parlement 0.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -1,7 +1,8 @@
1
1
  # Add your own tasks in files placed in lib/tasks ending in .rake,
2
2
  # for example lib/tasks/switchtower.rake, and they will automatically be available to Rake.
3
3
 
4
- require(File.join(File.dirname(__FILE__), 'config', 'boot'))
4
+ #require(File.join(File.dirname(__FILE__), 'config', 'boot'))
5
+ require(File.join(File.dirname(__FILE__), 'config', 'environment'))
5
6
 
6
7
  require 'rake'
7
8
  require 'rake/testtask'
@@ -13,7 +14,8 @@ require 'tasks/rails'
13
14
  require 'meta_project'
14
15
 
15
16
  require 'rake/contrib/rubyforgepublisher'
16
-
17
+ require 'meta_project/release/freshmeat'
18
+ require 'meta_project/release/raa'
17
19
 
18
20
  desc "Deploy basic application directories"
19
21
  task :deploy => :environment do
@@ -27,7 +29,7 @@ end
27
29
 
28
30
 
29
31
  PKG_NAME = "parlement"
30
- PKG_VERSION = "0.1"
32
+ PKG_VERSION = PARLEMENT_VERSION
31
33
  PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
32
34
 
33
35
  PKG_FILES = FileList[
@@ -39,7 +41,7 @@ spec = Gem::Specification.new do |s|
39
41
  ## Basic information.
40
42
  s.name = PKG_NAME
41
43
  s.version = PKG_VERSION
42
- s.summary = "Secure Direct Democracy on a forum"
44
+ s.summary = "Trusted Direct Democracy on a forum"
43
45
  s.description = <<EOF
44
46
  This is a forum and mailing list project, which aims to be a complete Direct
45
47
  Democracy implementation where everybody can propose polls, vote on them, or
@@ -78,6 +80,7 @@ Rake::GemPackageTask.new(spec) do |pkg|
78
80
  #pkg.package_files.include("*")
79
81
  end
80
82
 
83
+
81
84
  # Support Tasks ------------------------------------------------------
82
85
 
83
86
  desc "Look for TODO and FIXME tags in the code"
@@ -87,25 +90,53 @@ task :todo do
87
90
  end
88
91
  end
89
92
 
90
- task :release => [:verify_env_vars, :release_files, :publish_doc, :publish_news, :tag]
93
+ #task :release => [:verify_env_vars, :release_files, :publish_doc, :publish_news, :tag]
94
+ task :release => [:verify_env_vars, :release_files, :publish_news]
91
95
 
92
96
  task :verify_env_vars do
97
+ if not ENV["RUBYFORGE_USER"]
98
+ print "rubyforge.org's user: "
99
+ ENV["RUBYFORGE_USER"] = STDIN.gets.chomp
100
+ end
101
+
102
+ # This echos password to shell which is a bit sucky
103
+ if ENV["RUBYFORGE_PASSWORD"]
104
+ password = ENV["RUBYFORGE_PASSWORD"]
105
+ else
106
+ print "#{ENV['RUBYFORGE_USER']}@rubyforge.org's password: "
107
+ ENV["RUBYFORGE_PASSWORD"] = STDIN.gets.chomp
108
+ end
109
+
93
110
  raise "RUBYFORGE_USER environment variable not set!" unless ENV['RUBYFORGE_USER']
94
111
  raise "RUBYFORGE_PASSWORD environment variable not set!" unless ENV['RUBYFORGE_PASSWORD']
95
- puts ENV['RUBYFORGE_USER']
96
- puts ENV['RUBYFORGE_PASSWORD']
112
+
113
+ if not ENV["FRESHMEAT_USER"]
114
+ print "freshmeat user: "
115
+ ENV["FRESHMEAT_USER"] = STDIN.gets.chomp
116
+ end
117
+
118
+ # This echos password to shell which is a bit sucky
119
+ if ENV["FRESHMEAT_PASSWORD"]
120
+ password = ENV["FRESHMEAT_PASSWORD"]
121
+ else
122
+ print "freshmeat's password: "
123
+ ENV["FRESHMEAT_PASSWORD"] = STDIN.gets.chomp
124
+ end
125
+
97
126
  end
98
127
 
99
128
  task :publish_doc do
100
- publisher = Rake::RubyForgePublisher.new('xforge', ENV['RUBYFORGE_USER'])
129
+ publisher = Rake::RubyForgePublisher.new(PKG_NAME, ENV['RUBYFORGE_USER'])
101
130
  publisher.upload
102
131
  end
103
132
 
104
133
  desc "Release files on RubyForge"
105
134
  task :release_files => [:gem] do
106
- release_files = FileList[ "pkg/#{PKG_FILE_NAME}.gem" ]
135
+ release_files = FileList[ "pkg/#{PKG_FILE_NAME}.gem",
136
+ "pkg/#{PKG_FILE_NAME}.tgz",
137
+ "pkg/#{PKG_FILE_NAME}.zip" ]
107
138
 
108
- Rake::XForge::Release.new(MetaProject::Project::XForge::RubyForge.new('xforge')) do |release|
139
+ Rake::XForge::Release.new(MetaProject::Project::XForge::RubyForge.new(PKG_NAME)) do |release|
109
140
  # Never hardcode user name and password in the Rakefile!
110
141
  release.user_name = ENV['RUBYFORGE_USER']
111
142
  release.password = ENV['RUBYFORGE_PASSWORD']
@@ -115,15 +146,32 @@ task :release_files => [:gem] do
115
146
  end
116
147
  end
117
148
 
118
- desc "Publish news on RubyForge"
149
+
150
+ desc "Publish news"
119
151
  task :publish_news => [:gem] do
120
- release_files = FileList[ "pkg/#{PKG_FILE_NAME}.gem" ]
152
+ Rake::XForge::NewsPublisher.new(MetaProject::Project::XForge::RubyForge.new(PKG_NAME)) do |news|
153
+ # Never hardcode user name and password in the Rakefile!
154
+ news.user_name = ENV['RUBYFORGE_USER']
155
+ news.password = ENV['RUBYFORGE_PASSWORD']
156
+ end
121
157
 
122
- Rake::XForge::NewsPublisher.new(MetaProject::Project::XForge::RubyForge.new('xforge')) do |news|
158
+ fm = DevTools::Freshmeat::FreshmeatService.new(ENV['FRESHMEAT_USER'], ENV['FRESHMEAT_PASSWORD'])
159
+ fm.get_project_list.each do |p|
160
+ puts p
161
+ branches = fm.get_branch_list( p.shortName )
162
+ puts branches.inspect
163
+ release = fm.get_release( p.shortName, branches[0], p.version )
164
+ puts release
165
+ end
166
+ puts fm.logout
167
+
168
+ """
169
+ Rake::XForge::NewsPublisher.new(MetaProject::Project::XForge::Fresh.new(PKG_NAME)) do |news|
123
170
  # Never hardcode user name and password in the Rakefile!
124
171
  news.user_name = ENV['RUBYFORGE_USER']
125
172
  news.password = ENV['RUBYFORGE_PASSWORD']
126
173
  end
174
+ """
127
175
  end
128
176
 
129
177
  desc "Tag all the CVS files with the latest release number (REL=x.y.z)"
@@ -133,4 +181,3 @@ task :tag do
133
181
  sh %{cvs tag #{reltag}}
134
182
  end
135
183
 
136
-
@@ -27,7 +27,7 @@ class EltController < ApplicationController
27
27
 
28
28
  def list
29
29
  @elt = Elt.find(params[:id]) if @elt == nil
30
- render :partial => 'list', :locals => { :elt => @elt }
30
+ render :partial => '/elt/list', :locals => { :elt => @elt }
31
31
  end
32
32
 
33
33
  def rss
@@ -67,10 +67,10 @@ class EltController < ApplicationController
67
67
  #redirect_to :action => 'top', :id => @elt.parent_id
68
68
  #render_component(:action => 'show', :id => @elt.id )
69
69
 
70
- render :partial => 'elt', :locals => { :elt => @elt, :eltTop => false }
70
+ render :partial => '/elt/elt', :locals => { :elt => @elt, :eltTop => false }
71
71
  else
72
72
  flash[:notice] = 'Error'
73
- render :action => 'new'
73
+ render :controller => 'elt', :action => 'new'
74
74
  end
75
75
  end
76
76
 
@@ -0,0 +1,13 @@
1
+ class PersonController < ApplicationController
2
+ layout 'top'
3
+ model :person
4
+
5
+ def show
6
+ @person = Person.find(params[:id])
7
+ @title = @person.name+' (parlement)'
8
+
9
+ rescue ActiveRecord::RecordNotFound => e
10
+ flash[:error] = "Person '#{params[:id]}' does not exist"
11
+ redirect_to '/'
12
+ end
13
+ end
@@ -0,0 +1,2 @@
1
+ module PersonHelper
2
+ end
@@ -35,7 +35,7 @@
35
35
 
36
36
  <%= submit_tag 'Ok' %>
37
37
 
38
- <%= render :partial => 'account/help',
38
+ <%= render :partial => '/help',
39
39
  :locals => { :divId => 'login'+divId.to_s, :content => '
40
40
  <ul>You can propose an element
41
41
  <li>with no pseudo</li>
@@ -5,19 +5,16 @@
5
5
  <%= error_messages_for 'person' if @person %>
6
6
  <%= error_messages_for 'user' if @user %>
7
7
 
8
- <% if @session[:person] != nil %>
9
- <% if @session[:person] != nil and @session[:person].name != nil \
10
- and @session[:person].name != '' %>
8
+ <% if @session[:person] %>
9
+ <% if @session[:person].name and @session[:person].name != '' %>
11
10
  <div class="author">
12
- <% if @session[:person] != nil and @session[:person].email != nil %>
13
- &lt;<%= mail_to @session[:person].email, @session[:person].name %>&gt;
14
- <% else %>
15
- &lt;<%= @session[:person].name %>&gt;
16
- <% end %>
11
+ &lt;<%= link_to(@session[:person].name,
12
+ :controller => 'person',
13
+ :action => 'show',
14
+ :id => @session[:person]) %>&gt;
17
15
  </div>
18
16
  <% end %>
19
17
 
20
-
21
18
  <div class="logout">
22
19
  <%= link_to_remote('(X)',
23
20
  :update => divId,
@@ -26,6 +23,6 @@
26
23
  </div>
27
24
  <% else %>
28
25
 
29
- <%= render :partial => 'account/login', :locals => { :divId => divId } %>
26
+ <%= render :partial => '/account/login', :locals => { :divId => divId } %>
30
27
  <% end %>
31
28
 
@@ -1,41 +1,48 @@
1
1
  <% eltSubsNb = elt.children.count if eltSubsNb == nil %>
2
2
 
3
+ <% if elt.id and not elt.subject.include? elt.parent.subject and not eltTop %>
4
+ <br />
5
+ <% end %>
6
+
3
7
  <div class="elt" id="elt_<%= elt.id %>">
4
- <% if elt.person != nil and elt.person.name != nil \
5
- and elt.person.name != '' %>
6
- <div class="author">
7
- <% if elt.person != nil and elt.person.email != nil %>
8
- &lt;<%= mail_to elt.person.email, elt.person.name,
9
- :subject => elt.subject %>&gt;
10
- <% else %>
11
- &lt;<%= elt.person.name %>&gt;
12
- <% end %>
13
- </div>
14
- <% end %>
8
+ <div class="author">
9
+ <% if elt.person %>
10
+ &lt;<%= link_to(elt.person.name,
11
+ :controller => 'person', :action => 'show', :id => elt.person) %>&gt;
12
+ <% elsif elt.parent_id != 'ROOT' and elt.subject.include? elt.parent.subject %>
13
+ &lt;<%= ANONYMOUS_POSTER %>&gt;
14
+ <% end %>
15
+ </div>
15
16
 
16
17
  <div class="eltInfo" title="<%= elt.created_on %>">
17
18
  <!--
18
19
  <= link_to('@', :action => 'raw_elt', :id => elt) if elt.mail != nil >
19
20
  -->
20
-
21
21
  <% if elt.id and elt.children.count == 0 %>
22
22
  <%= link_to_remote('>>',
23
23
  :update => 'eltNew_'+elt.id.to_s,
24
- :url => { :action => 'new', :id => elt },
24
+ :url => { :controller => 'elt', :action => 'new', :id => elt },
25
25
  :loaded => visual_effect(:BlindDown, 'eltNew_'+elt.id.to_s)+
26
26
  visual_effect(:BlindDown, 'eltSubsClose_'+elt.id.to_s)) %>
27
27
  <% end %>
28
28
  </div>
29
29
 
30
- <% if elt.parent_id == 'ROOT' or not elt.subject.include? elt.parent.subject %>
31
- <h<%= eltTop ? '1' : '2' %>>
30
+ <% if elt.parent_id == 'ROOT' or eltTop \
31
+ or not elt.subject.include? elt.parent.subject %>
32
+ <% if elt.parent_id != 'ROOT' %>
33
+ <span class="created_on">
34
+ <%= elt.created_on.strftime('%d/%m/%y %H:%M') %>
35
+ </span>
36
+ <% end %>
37
+
38
+ <<%= eltTop ? 'h1' : 'h2' %>>
32
39
  <% if elt.id %>
33
40
  <%= link_to(textilize_without_paragraph(elt.subject),
34
41
  :controller => 'elt', :action => 'show', :id => elt) %>
35
42
  <% else %>
36
43
  <%= textilize_without_paragraph(elt.subject) %>
37
44
  <% end %>
38
- </h<%= eltTop ? '1' : '2' %>>
45
+ </<%= eltTop ? 'h1' : 'h2' %>>
39
46
  <% end %>
40
47
 
41
48
  <div class="eltBody">
@@ -53,14 +60,14 @@
53
60
  class="eltMore" id="eltMore_<%= elt.id %>">
54
61
  <%= link_to_remote(eltSubsNb.to_s+' more',
55
62
  :update => 'eltSubs_'+elt.id.to_s,
56
- :url => { :action => 'list', :id => elt },
63
+ :url => { :controller => 'elt', :action => 'list', :id => elt },
57
64
  :loading => visual_effect(:SwitchOff, 'eltMore_'+elt.id.to_s)+
58
65
  visual_effect(:BlindDown, 'eltSubsClose_'+elt.id.to_s),
59
66
  :loaded => visual_effect(:BlindDown, 'eltSubs_'+elt.id.to_s)) %>
60
67
 
61
68
  <%= link_to_remote('Add >>',
62
69
  :update => 'eltNew_'+elt.id.to_s,
63
- :url => { :action => 'new', :id => elt },
70
+ :url => { :controller => 'elt', :action => 'new', :id => elt },
64
71
  :loaded => visual_effect(:BlindDown, 'eltNew_'+elt.id.to_s)+
65
72
  visual_effect(:BlindDown, 'eltSubsClose_'+elt.id.to_s)) %>
66
73
  </div>
@@ -68,7 +75,7 @@
68
75
  <div style="display:<%= (eltTop or eltSubsNb == 1) ? '' : 'none' %>"
69
76
  class="eltSubs" id="eltSubs_<%= elt.id %>">
70
77
  <% if eltTop or eltSubsNb == 1 %>
71
- <%= render :partial => 'list', :locals => { :elt => elt } %>
78
+ <%= render :partial => '/elt/list', :locals => { :elt => elt } %>
72
79
  <% end %>
73
80
  </div>
74
81
 
@@ -86,18 +93,16 @@
86
93
  visual_effect(:BlindUp, 'eltSubsClose_'+elt.id.to_s)+
87
94
  visual_effect(:BlindDown, 'eltMore_'+elt.id.to_s)) %>
88
95
 
89
- <% if elt.person != nil and elt.person.name != nil \
90
- and elt.person.name != '' %>
91
- <% if elt.person != nil and elt.person.email != nil %>
92
- &lt;<%= mail_to elt.person.email, elt.person.name %>&gt;
93
- <% else %>
94
- &lt;<%= elt.person.name %>&gt;
95
- <% end %>
96
+ <% if elt.person %>
97
+ &lt;<%= link_to(elt.person.name,
98
+ :controller => 'person', :action => 'show', :id => elt.person) %>&gt;
99
+ <% elsif elt.parent_id != 'ROOT' and elt.subject.include? elt.parent.subject %>
100
+ &lt;<%= ANONYMOUS_POSTER %>&gt;
96
101
  <% end %>
97
102
 
98
103
  <%= link_to_remote('Add >>',
99
104
  :update => 'eltNew_'+elt.id.to_s,
100
- :url => { :action => 'new', :id => elt },
105
+ :url => { :controller => 'elt', :action => 'new', :id => elt },
101
106
  :loaded => visual_effect(:BlindDown, 'eltNew_'+elt.id.to_s)+
102
107
  visual_effect(:BlindDown, 'eltSubsClose_'+elt.id.to_s)) %>
103
108
  </div>
@@ -22,7 +22,7 @@ e = Elt.find_all("parent_id = '#{elt.id}'",
22
22
  :loading => visual_effect(:BlindDown, 'eltSubsClose_'+elt.id.to_s),
23
23
  :loaded => visual_effect(:BlindDown, 'eltSubs_'+elt.id.to_s)) if e_pages.current.previous %>
24
24
 
25
- <%= render :partial => 'elt',
25
+ <%= render :partial => '/elt/elt',
26
26
  :collection => e.reverse,
27
27
  :locals => { :eltTop => false } %>
28
28
 
@@ -24,7 +24,7 @@
24
24
  <h2>
25
25
  <%= text_field 'elt', 'subject', :style => 'font-weight:bolder' %>
26
26
 
27
- <%= render :partial => 'account/help',
27
+ <%= render :partial => '/help',
28
28
  :locals => { :divId => 'title'+@elt.parent_id, :content => '
29
29
  This is the title of your proposition.
30
30
  <br/>
@@ -47,7 +47,7 @@
47
47
  :loaded => visual_effect(:BlindDown, 'eltNewPreview_'+@elt.parent_id)) %>
48
48
  <%= submit_tag 'Propose' %>
49
49
 
50
- <%= render :partial => 'account/help',
50
+ <%= render :partial => '/help',
51
51
  :locals => { :divId => 'body'+@elt.parent_id, :content => '
52
52
  _<em>emphasis</em>_ *<strong>strong</strong>* -<span
53
53
  style="text-decoration:line-through;">strike-through</span>- +added+
@@ -1,4 +1,4 @@
1
- <div class="sidebar" style="clear:right">
1
+ <div class="sidebar">
2
2
  <div class="box">
3
3
  <% if @elt.children.count > 0 %>
4
4
  <div class="boxTitle">Titres</div>
@@ -18,14 +18,6 @@
18
18
  <%= link_to image_tag("/images/webfeed.gif"),
19
19
  :action => 'rss', :id => @elt %>
20
20
  </div>
21
-
22
- <!--
23
- <a href="http://echarp.dyndns.org/perso/image/echarp.jpg"
24
- title="Oui oui, je fais mon style ;)">
25
- <img src="/perso/image/echarpSmall.jpg" style="margin-top:1em"/>
26
- <img src="http://echarp.dyndns.org/perso/CV/20030520echarp.jpg"/>
27
- </a>
28
- -->
29
21
  </div>
30
22
 
31
23
  <% @flash.each do |key, value| %>
@@ -42,5 +34,3 @@
42
34
  <%= render :partial => 'elt', :layout => 'top',
43
35
  :locals => { :elt => @elt, :eltTop => true } %>
44
36
 
45
- <div class="version">version <%= PARLEMENT_VERSION %></div>
46
-
@@ -1,16 +1,10 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
3
 
4
4
  <html>
5
5
  <head>
6
6
  <title><%= @title %></title>
7
- <!--<title><%= controller.action_name %></title>-->
8
-
9
7
  <%= stylesheet_link_tag 'default' %>
10
- <!--
11
- <%= stylesheet_link_tag 'scaffold' %>
12
- <%= javascript_include_tag "/javascripts/live_tree.js" %>
13
- -->
14
8
  <%= javascript_include_tag "/javascripts/prototype" %>
15
9
  <%= javascript_include_tag "/javascripts/scriptaculous" %>
16
10
 
@@ -28,7 +22,7 @@
28
22
 
29
23
  <body>
30
24
  <div class="sidebar">
31
- <a class="title" href="/">Parlement</a>
25
+ <a class="title" href="http://leparlement.org">Parlement</a>
32
26
 
33
27
  <div class="signets">
34
28
  <a href="http://rubyforge.org/projects/parlement">forge</a>
@@ -38,8 +32,8 @@
38
32
 
39
33
  <%= @content_for_layout %>
40
34
 
41
- <!-- To make sure the content goes beyond the sidebar -->
42
- <div style="clear:both"/>
35
+ <a href="<%= url_for :controller => 'elt', :action => 'show', :id => '' %>"
36
+ class="version">version <%= PARLEMENT_VERSION %></a>
43
37
  </body>
44
38
  </html>
45
39
 
@@ -0,0 +1,40 @@
1
+ <h1><%= @person.name %></h1>
2
+
3
+ <p>Created on <%= @person.created_on %></p>
4
+
5
+
6
+ <p>Posts made by <%= @person.name %>
7
+ <%= render :partial => '/help',
8
+ :locals => { :divId => 'body'+@person.id, :content => '
9
+ posts can be displayed more than once depending on their occurence in sub
10
+ threads
11
+ ' } %></p>
12
+
13
+ <%
14
+ # TODO get the count from the parent element call
15
+ e_pages = ActionController::Pagination::Paginator.new(
16
+ self, @person.elts.count, PAGE_ELT_LENGTH, @params['page'])
17
+ e = Elt.find_all("person_id = '#{@person.id}'",
18
+ 'created_on DESC', e_pages.current.to_sql)
19
+ %>
20
+
21
+ <%= link_to_remote('< Previous',
22
+ :update => 'eltSubs_'+elt.id.to_s,
23
+ :url => { :action => 'list', :id => elt, :page => e_pages.current.next },
24
+ :loading => visual_effect(:BlindDown, 'eltSubsClose_'+elt.id.to_s),
25
+ :loaded => visual_effect(:BlindDown, 'eltSubs_'+elt.id.to_s)) if e_pages.current.next %>
26
+
27
+ <span style="display:<%= e_pages.length > 1 ? '' : 'none'%>" class="pageCount">
28
+ (<%= e_pages.length-e_pages.current.to_i+1 %>/<%= e_pages.length %>)
29
+ </span>
30
+
31
+ <%= link_to_remote('Next >',
32
+ :update => 'eltSubs_'+elt.id.to_s,
33
+ :url => { :action => 'list', :id => elt, :page => e_pages.current.previous },
34
+ :loading => visual_effect(:BlindDown, 'eltSubsClose_'+elt.id.to_s),
35
+ :loaded => visual_effect(:BlindDown, 'eltSubs_'+elt.id.to_s)) if e_pages.current.previous %>
36
+
37
+ <%= render :partial => '/elt/elt',
38
+ :collection => e.reverse,
39
+ :locals => { :eltTop => false } %>
40
+
@@ -58,10 +58,13 @@ require 'rails_file_column'
58
58
  require 'jcode'
59
59
  $KCODE = 'u'
60
60
 
61
+ PARLEMENT_VERSION='0.2'
62
+
61
63
  # How many elements are displayed at once
62
64
  PAGE_ELT_LENGTH = 20
63
65
 
64
- PARLEMENT_VERSION=0.1
66
+ # What is the name of a quick anonymous poster
67
+ ANONYMOUS_POSTER = 'anon'
65
68
 
66
69
  require 'environments/user_environment'
67
70
 
data/config/routes.rb CHANGED
@@ -11,6 +11,7 @@ ActionController::Routing::Routes.draw do |map|
11
11
  # map.connect '', :controller => "welcome"
12
12
 
13
13
  map.connect '', :controller => 'elt', :action => 'show', :id => 'parlement'
14
+ map.connect 'index.rss', :controller => 'elt', :action => 'rss', :id => 'parlement'
14
15
  map.connect ':id', :controller => 'elt', :action => 'show', :id => 'parlement'
15
16
  map.connect ':id/index.rss', :controller => 'elt', :action => 'rss'
16
17
 
data/db/ROOT/CV.txt CHANGED
@@ -50,8 +50,8 @@ Langages : java, ruby, J2EE, XML/XSLT, SQL, UML.
50
50
  Bases de donn�es : "PostgreSQL":http://www.postgresql.org,
51
51
  "HsqlDB":http://hsqldb.org, "MySQL":http://www.mysql.com.
52
52
 
53
- Frameworks : "Cocoon":http://cocoon.apache.org, "ruby on
54
- rails":http://rubyonrails.org, "struts":http://struts.apache.org.
53
+ Frameworks : "Cocoon":http://cocoon.apache.org, "Ruby on
54
+ Rails":http://rubyonrails.org, "struts":http://struts.apache.org.
55
55
 
56
56
  Logiciels : "JBoss":http://jboss.org, "JOnAS":http://jonas.objectweb.org,
57
57
  "Tomcat":http://tomcat.apache.org, "Jetty":http://jetty.mortbay.org,
@@ -0,0 +1,8 @@
1
+ Version 0.1
2
+
3
+ Initial release
4
+
5
+ * Simple threaded forum
6
+ * Optional registration
7
+
8
+
@@ -0,0 +1,2 @@
1
+ News
2
+
@@ -0,0 +1,17 @@
1
+ Anonymity
2
+
3
+ In the virtual world, it is impossible to be totally anonymous while still
4
+ ensuring that one person can only vote once. Because at one moment or another
5
+ you need to link a vote to a person.
6
+
7
+ In the physical world this connection is lost in the voting box. But on
8
+ internet everything can be traced, no matter what you do you can never be
9
+ totally certain that a relation is lost.
10
+
11
+ So to have anonymity a scheme can be constructed using trust. Trust that a
12
+ voter can have into a third party of *his* choice. It is a trustee who will
13
+ vouch for the voter's reinscription on the electoral list using a pseudonym.
14
+
15
+ Thus you have two identities, the real person, knwown and accounted on the
16
+ electoral list, but unable to vote because she is marked as anonymous. And a
17
+ pseudonym.
@@ -3,8 +3,8 @@ Security
3
3
  Of course a large scale Direct Democracy relying on electrons is difficult to
4
4
  accept, due to one very valid reason: we can't trust internet.
5
5
 
6
- It is so easy to change rules, to break into systems, to subvert data, how,
7
- why? Can we ever use it for such an important things as politics?
6
+ It is so easy to change rules, to break into servers, to subvert data. Can we
7
+ ever use it for such an important things as politics?
8
8
 
9
9
  There is a way, a simple one relying on three elements:
10
10
  * p2p servers
@@ -18,17 +18,22 @@ When you cast a vote you sign it with your private key.
18
18
  Anybody can setup electoral lists that contain public keys.
19
19
 
20
20
 
21
- There you have it. Basic isn't it? Of course all data is totally transparent,
22
- to the point of being replicated among any number of servers. No anonimity (in
23
- the basic and simplest setup).
21
+ There you have it. Basic isn't it? Of course it requires that *all* data is
22
+ totally transparent, to the point it can be replicated among any number of
23
+ server. No anonimity (in the basic and simplest setup).
24
24
 
25
25
  pgp signatures being what they are, can not be subverted (nowadays and in the
26
26
  near future), thus the votes can take any path available to them. They can be
27
27
  cast from any server. But to be sure that one's vote is not simply erased from
28
- that first node, it is recommended to check that it has been replicated to few
29
- other ones. Or better, to send it directly to different servers.
28
+ that first node, it is recommended to check that it has been replicated to a
29
+ few other ones. Or better, to send it directly to different servers.
30
30
 
31
- There can be any number of participants, votes, issues, but at the end of the
31
+ There can be any number of participants, votes or issues, but at the end of the
32
32
  day the results are calculated using one electoral list and on one server.
33
33
  Everybody can check if thoses results are valid or not.
34
34
 
35
+ This doesn't bring 100%% security, no such thing can exist even in the physical
36
+ world, but it can bring trust. An active trust, if you care about the issues,
37
+ the process, the participants, you can supervise it and make sure it goes as it
38
+ should. The more eyes, the more trust.
39
+
@@ -5,7 +5,7 @@ unities: unity of time, unity of place and unity of object. It's a principle
5
5
  taking its roots in ancient Greece, and it certainly contributes to the awe we
6
6
  can feel when comes election day. But it is also a limitation...
7
7
 
8
- <div style="float:left;">
8
+ <table align="center"><tr><td>
9
9
 
10
10
  In the physical world we vote on:
11
11
 
@@ -13,13 +13,11 @@ In the physical world we vote on:
13
13
  * one place
14
14
  * one issue
15
15
 
16
- </div>
17
-
18
- <div style="float:left;margin-top:3em;margin-right:3em;margin-bottom:1em">
16
+ </td><td style="padding-right:3em;" vertical-align="center">
19
17
 
20
18
  =>
21
19
 
22
- </div>
20
+ </td><td>
23
21
 
24
22
  In Internet we can vote:
25
23
 
@@ -27,6 +25,8 @@ In Internet we can vote:
27
25
  * any where
28
26
  * any issue
29
27
 
28
+ </td></tr></table>
29
+
30
30
  It is us, individuals, citizens, who choose what we want to do.
31
31
 
32
32
  These three freedom have consequences, for example if you can vote anytime, you
data/db/ROOT/perso.txt CHANGED
@@ -1,7 +1,7 @@
1
1
  echarp / manu
2
2
 
3
3
  <style>
4
- .eltSub { display:none; }
4
+ .eltSub, .eltSubsClose { display:none; }
5
5
  </style>
6
6
 
7
7
  <div class="sidebar" style="clear:right">