This repository has been archived by the owner on Apr 25, 2022. It is now read-only.
/
all.atom.xml
7567 lines (7517 loc) · 621 KB
/
all.atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Alex Clark</title><link href="http://blog.aclark.net/" rel="alternate"></link><link href="http://blog.aclark.net/feeds/all.atom.xml" rel="self"></link><id>http://blog.aclark.net/</id><updated>2013-01-09T15:30:00Z</updated><entry><title>Hello Plone Again</title><link href="http://blog.aclark.net//2013/01/09/hello-plone-again/" rel="alternate"></link><updated>2013-01-09T15:30:00Z</updated><author><name>aclark</name></author><id>tag:blog.aclark.net,2013-01-09:/2013/01/09/hello-plone-again/</id><summary type="html"><p>Regarding my recent &quot;Goodbye Plone&quot; post:</p>
<ul class="simple">
<li>It's come to my attention that the style of my departure post, and associated actions, may be perceived poorly. I'm sorry. This was not my intention, and I apologize if I've upset anyone. The Plone Community deserves the best, so let me see what I can do to address this.</li>
<li>Several folks have reached out to express their concern about my departure, I appreciate this very much.</li>
<li>While I stand behind my need to distance myself from such conflicts, I don't want to give the Plone Community or the outside world the wrong impression.</li>
</ul>
<p>So, let me say this: I'm thinking about what happened today, and I'm going to comment about it in the future. I.E. after 24 hours or so. Regardless of future updates, please consider me: &quot;around in some capacity, but not as fully engaged for personal reasons&quot; :-). This is an attempt to revert my abrubt departure, while at the same time not fully re-engage until such time as I can determine the best course of action. Note that above all, and aside from my personal and professional goals, I don't want to be disruptive to the community if I can help it.</p>
<p>Thanks for reading.</p>
</summary><category term="Plone"></category></entry><entry><title>Goodbye Plone</title><link href="http://blog.aclark.net//2013/01/09/goodbye-plone/" rel="alternate"></link><updated>2013-01-09T13:30:00Z</updated><author><name>aclark</name></author><id>tag:blog.aclark.net,2013-01-09:/2013/01/09/goodbye-plone/</id><summary type="html"><p>After experiencing an unexpectedly negative reaction in #plone to my most recent post &quot;Introducing The Plone Kitty&quot; (which was intended to be light-hearted and fun), I have decided to leave the Plone community for good. I wish you all the best! It's been fun.</p>
<p>To be clear: I'll still be doing some Plone consulting as part of my &quot;day job&quot; at ACLARK.NET, LLC. But I won't be participating in any community events because it has become clear to me that my vision for Plone, and the Plone Community, is inconsistent with that of the majority of the core team.</p>
</summary><category term="Plone"></category></entry><entry><title>Introducing The Plone Kitty</title><link href="http://blog.aclark.net//2013/01/09/introducing-the-plone-kitty/" rel="alternate"></link><updated>2013-01-09T12:15:00Z</updated><author><name>aclark</name></author><id>tag:blog.aclark.net,2013-01-09:/2013/01/09/introducing-the-plone-kitty/</id><summary type="html"><p><em>Actually: re-introducing the Plone Kitty from Plone 1!</em></p>
<img alt="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/plone-kitty.png" src="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/plone-kitty.png" />
<p><em>Plone Kitty</em> is the name of a theme (then called &quot;skin&quot;) that shipped with the earliest versions of <a class="reference external" href="http://plone.org">Plone</a> (1.1 in the image above). This was a simpler time when the web was new, and everything was possible!</p>
<p>Today, we know that the <strong>web is hard</strong>. While everything is still possible, building the web requires a tremendous amount of hard work. But it doesn't have to be all drudgery. There is still quite a bit of fun to be had building the web, if you know where to look (in addition to all the unavoidable hard work).</p>
<p>Enter: Plone. Both the web and Plone have changed drastically since The Plone Kitty once prowled the internet. And while the Plone Kitty is all but extinct, Plone lives on; continously modernizing itself to keep up with the fast pace of today's modern web.</p>
<p>From the <a class="reference external" href="http://plone-1-fun.herokuapp.com">Plone Kitty website</a> (now running on Heroku!):</p>
<pre class="literal-block">
Plone was once great. Actually, Plone is still great but the excitement around it has dissipated. It's time to fix that.
If you used Plone &quot;back in the day&quot; (early 2000s), please add a comment below about your experiences then. If you are new to Plone or just curious about it now, please add a comment below about your initial impressions.
Let's bring the excitement back to Plone in 2013!
</pre>
<p>So if you'd like to add <strong>your bit of nostalgia</strong>, or first impressions of Plone, <a class="reference external" href="http://plone-1-fun.herokuapp.com/#disqus">please do so here</a>. I appreciate any and all comments, good or bad, about Plone.</p>
</summary><category term="Plone"></category><category term="Python"></category></entry><entry><title>New Year's Python Meme 2012</title><link href="http://blog.aclark.net//2012/12/29/new-years-python-meme-2012/" rel="alternate"></link><updated>2012-12-29T15:30:00Z</updated><author><name>aclark</name></author><id>tag:blog.aclark.net,2012-12-29:/2012/12/29/new-years-python-meme-2012/</id><summary type="html"><img alt="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/tarek-meme-reminder.png" src="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/tarek-meme-reminder.png" />
<p><em>This is my entry for Tarek Ziadé's New Year's Python Meme, a tradition I have come to enjoy. Both to reflect on the current year and look back on previous years. So here it is.</em></p>
<p>I did this in <a class="reference external" href="http://blog.aclark.net/2009/12/31/new-years-python-meme/">2009</a> &amp; <a class="reference external" href="http://blog.aclark.net/2011/12/21/new-years-python-meme-2011/">2011</a>. Let's try it again.</p>
<p><strong>1. What’s the coolest Python application, framework or library you have discovered in 2012?</strong></p>
<p>That would be <a class="reference external" href="http://docs.python-requests.org/en/latest/">Kenneth Reitz's Requests</a>. Like many others, I've been bitten by the elegance and simplicity bug that is inherent and ingrained in the Requests library. Primarily, I used it to build pythonpackages.com. In particular, I used it to communicate with the almost-equally-elegant (IMHO) GitHub API. This is why I like requests (among other reasons): I don't need to use a &quot;third party&quot; library to communicate with the GitHub API. Such libraries (I think) attempt to make my job easier by hiding complexity and presenting simpler APIs to use. This is sometimes necessary, but no substitute for <em>really</em> and <em>actually</em> simple APIs and good documentation (both of which GitHub and Kenneth provide, with their respective APIs.)</p>
<p><strong>2. What new programming technique did you learn in 2012?</strong></p>
<p>JavaScript: check. Unit testing: check. These are techniques I have learned enough of to be effective in my &quot;day job&quot; (I'm self-employed). But I learned (finally) that I am primarily: a Python Web Developer. And it feels good to say that. I use Python, and related web technologies to build web applications for my clients. I typically only care to learn enough of a technology to get my job done, then I lose interest (for the most part). That's because I'm also a Hacker. I identify significantly with this monicker because it fits who I am and how I conduct myself professionally. I care about getting the job done above all else. And if there is a job to be done, my intellectual curiosity knows no bounds. If the job is done, I'm going to play guitar. So whatever the technique, I'll learn it if it's something I care about for whatever reason.</p>
<p><strong>3. Which open source project did you contribute to the most in 2012 ? What did you do?</strong></p>
<p>This is the first year that Plone did not consume my every moment. I also spent significant time working on <a class="reference external" href="https://github.com/buildout">Buildout</a> (INI-config-driven system to install Python packages and other software, &amp; perform other related and miscellaneous tasks) and <a class="reference external" href="https://github.com/python-imaging">Pillow (PIL fork)</a>. With the help of many others, I hope to get a Python 3.3 compatible release of Pillow out by PyCon 2013. And I'll support Buildout &lt; 2.x until such time as Buildout 2.x goes mainstream.</p>
<p><strong>4. Which Python blog or website did you read the most in 2012?</strong></p>
<p>Planets: Django, Mozilla, Plone, Python. Reddits: Python. Other feeds: Hacker News &amp; Tech Crunch. I added Tech Crunch this year to satisfy my &quot;startup itch&quot;, as was recommended to me by Jonathon Perrelli of Fortify.vc in DC.</p>
<p><strong>5. What are the three top things you want to learn in 2013?</strong></p>
<p>How to hustle. Hustling, and more hustling. I've gained a lot (enough?) technical skill over the years. Now I want to put that skill to good use in business. I've managed to remain self-employed for a number of years, now I'd like to employ others full time, build successful businesses and otherwise &quot;expand my empire&quot;.</p>
<p><strong>6. What is the top software, application or library you wish someone would write in 2013?</strong></p>
<p>I hope that I get more significant time to put into my &quot;baby&quot;: <a class="reference external" href="https://github.com/pythonpackages">pythonpackages.com</a>. In particular, I'm considering adding a Travis-like service which would spawn Windows VMs to run tests and produce executables for Python packages (to address a particular pain point I've discovered along the way: people want to support Windows, but often don't have the ability to do so easily.)</p>
<p>Happy (Python) New Year!</p>
<p>Want to do your own list? Here's how:</p>
<ul class="simple">
<li>Copy-paste the questions and answer to them in your blog</li>
<li>Tweet it with the <a class="reference external" href="https://twitter.com/search/realtime?q=%232012pythonmeme&amp;src=typd">#2012pythonmeme</a> hashtag</li>
</ul>
</summary><category term="Django"></category><category term="Mozilla"></category><category term="Plone"></category><category term="Python"></category></entry><entry><title>The Zen of Zope, by Alex Clark</title><link href="http://blog.aclark.net//2012/12/09/the-zen-of-zope-by-alex-clark/" rel="alternate"></link><updated>2012-12-09T18:00:00Z</updated><author><name>aclark</name></author><id>tag:blog.aclark.net,2012-12-09:/2012/12/09/the-zen-of-zope-by-alex-clark/</id><summary type="html"><pre class="literal-block">
&gt;&gt;&gt; import other
The Zen of Zope, by Alex Clark
Beautiful is an attribute of ugly.
Explicit is implemented by implicit.
Simple is provided by complex.
Complex is directly provided by complicated.
Flat only implements nested.
Sparse has tagged value dense.
Readability count is not in range.
Special cases could not adapt the rules.
Practicality implements purity.
Errors should never require a specification that doesn’t extend the specification of silence.
Unless explicit is a multi-adapter.
In subscribing to ambiguity, return all the objects that refuse the temptation to guess.
There should be none-- and preferably only zero --output from a handler.
Although that way may not be obvious at first unless you've registered an adapter hook
Now is verified by never.
Although never is not implemented by *right* now.
If the implementation is hard to explain, it queries the bad idea utility.
If the implementation is easy to explain, it may query the good idea utility.
Implicit namespace packages are one honking great idea -- let's do more of those!
</pre>
</summary><category term="Plone"></category><category term="Python"></category></entry><entry><title>Plone Guide</title><link href="http://blog.aclark.net//2012/11/23/plone-guide/" rel="alternate"></link><updated>2012-11-23T08:30:00Z</updated><author><name>aclark</name></author><id>tag:blog.aclark.net,2012-11-23:/2012/11/23/plone-guide/</id><summary type="html"><div class="section" id="who">
<h2>Who</h2>
<p>For anyone new to my blog, welcome. I am Alex Clark: Python Web Developer.</p>
</div>
<div class="section" id="what">
<h2>What</h2>
<p>Recently with a tweet, I announced the start of a new personal project:</p>
<img alt="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/tweet.png" src="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/tweet.png" />
</div>
<div class="section" id="when">
<h2>When</h2>
<p>I have tentatively scheduled this project to be completed by the end of 2013, because it's important to set a deadline.</p>
</div>
<div class="section" id="where">
<h2>Where</h2>
<p>This project will be hosted on one of my current favorite websites: <a class="reference external" href="http://readthedocs.org">http://readthedocs.org</a>.</p>
</div>
<div class="section" id="why">
<h2>Why</h2>
<p>I think about Plone a lot as it relates to my current professional work. And I have more thoughts than I can currently keep track of in blogs, tweets, etc. So I decided to make an effort to write them all down.</p>
</div>
<div class="section" id="how">
<h2>How</h2>
<p>I think a lot about what other people think about Plone, so I decided this book will feature comments from the general public in it. E.g.:</p>
<img alt="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/comments.png" src="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/comments.png" />
</div>
<div class="section" id="how-much">
<h2>How much?</h2>
<p>This book will be free. But if you'd like to support its development, please <a class="reference external" href="http://gittip.com/aclark4life">gittip me</a>.</p>
<p>There's not much to it yet, but feel free to head over and add some comments: <a class="reference external" href="https://plone-guide.readthedocs.org/en/latest/">https://plone-guide.readthedocs.org/en/latest/</a>.</p>
</div>
</summary><category term="Plone"></category><category term="Python"></category></entry><entry><title>Pillow 1-7-8</title><link href="http://blog.aclark.net//2012/11/02/pillow-1-7-8/" rel="alternate"></link><updated>2012-11-02T11:00:00Z</updated><author><name>aclark</name></author><id>tag:blog.aclark.net,2012-11-02:/2012/11/02/pillow-1-7-8/</id><summary type="html"><p><em>Pillow is the &quot;friendly&quot; PIL fork. Initially just a packaging fork, now considering image code bug fixes and Python 3 support. To be friendly, we attempt to track changes against upstream tickets in PIL.</em></p>
<p>Pillow 1.7.8 is out! Read about it here:</p>
<ul class="simple">
<li><a class="reference external" href="http://pypi.python.org/pypi/Pillow/1.7.8">http://pypi.python.org/pypi/Pillow/1.7.8</a></li>
</ul>
<div class="section" id="features">
<h2>Features</h2>
<ul class="simple">
<li>It's PIL (Python Imaging Library)</li>
<li>It installs on all modern systems <a class="footnote-reference" href="#id2" id="id1">[1]</a></li>
<li>Win32 eggs are provided (special thanks to Takayuki Shimizukawa)</li>
</ul>
</div>
<div class="section" id="changes">
<h2>Changes</h2>
<p>This release includes:</p>
<ul class="simple">
<li>Removed doctests.py that made tests of other packages fail. [thomasdesvenain]</li>
<li>Fix opening psd files with RGBA layers when A mode is not of type 65535 but 3. Fixes issue <a class="reference external" href="https://github.com/python-imaging/Pillow/issues/3">https://github.com/python-imaging/Pillow/issues/3</a> [thomasdesvenain]</li>
</ul>
</div>
<div class="section" id="install">
<h2>Install</h2>
<p>To install Pillow:</p>
<pre class="literal-block">
$ easy_install Pillow
</pre>
<p>Or:</p>
<pre class="literal-block">
$ pip install Pillow
</pre>
<p>Or:</p>
<pre class="literal-block">
$ python setup.py install (inside the extracted zip)
</pre>
<p>Or:</p>
<pre class="literal-block">
$ pip install zc.buildout
$ buildout init
</pre>
<p>With <tt class="docutils literal">buildout.cfg</tt>:</p>
<pre class="literal-block">
[buildout]
parts = pillow
[pillow]
recipe = zc.recipe.egg
</pre>
<p>And:</p>
<pre class="literal-block">
$ buildout
</pre>
<p>(Note: easy_install &amp; pip each handle namespace packages differently, so you should choose one or the other, and not mix the two.)</p>
</div>
<div class="section" id="report-issues">
<h2>Report issues</h2>
<p>If you find an issue, please report it here:</p>
<ul class="simple">
<li><a class="reference external" href="https://github.com/python-imaging/Pillow/issues">https://github.com/python-imaging/Pillow/issues</a></li>
</ul>
<p>Better yet: please fork, fix, and submit a pull request. Please also solicit for peer review once the pull request has been submitted.</p>
</div>
<div class="section" id="discussion">
<h2>Discussion</h2>
<p>You may discuss issues related to PIL, Pillow, and Python imaging on the image-sig list:</p>
<ul class="simple">
<li><a class="reference external" href="http://mail.python.org/mailman/listinfo/image-sig">http://mail.python.org/mailman/listinfo/image-sig</a></li>
</ul>
<p>Enjoy using Pillow!</p>
<table class="docutils footnote" frame="void" id="id2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>If it doesn't, please report it: <a class="reference external" href="https://github.com/python-imaging/Pillow/issues">https://github.com/python-imaging/Pillow/issues</a></td></tr>
</tbody>
</table>
</div>
</summary><category term="Python"></category></entry><entry><title>Django Hello</title><link href="http://blog.aclark.net//2012/10/23/django-hello/" rel="alternate"></link><updated>2012-10-23T13:00:00Z</updated><author><name>aclark</name></author><id>tag:blog.aclark.net,2012-10-23:/2012/10/23/django-hello/</id><summary type="html"><p>Django doesn't really need a hello world style introduction, its documentation speaks for itself. But this is what <strong>Hello World</strong> in Django looks like to me. I hate boilerplate and I love reducing software down to its core components; just enough to start the server.</p>
<p>setup.py:</p>
<pre class="literal-block">
from setuptools import setup
setup(
name='hello',
)
</pre>
<p>requirements.txt:</p>
<pre class="literal-block">
Django==1.4.1
-e .
</pre>
<p>settings.py:</p>
<pre class="literal-block">
from hello import urls
DEBUG = True
ROOT_URLCONF = urls
</pre>
<p>urls.py:</p>
<pre class="literal-block">
from django.conf.urls import patterns
urlpatterns = patterns(
'',
(r'', 'hello.views.index'),
)
</pre>
<p>views.py:</p>
<pre class="literal-block">
from django.http import HttpResponse
import datetime
# Based on https://docs.djangoproject.com/en/1.4/topics/http/views/
def index(request):
&quot;&quot;&quot;
This function takes a Django request object and returns a 'Hello World'
style response, by wrapping some HTML in a Django response object.
&quot;&quot;&quot;
now = datetime.datetime.now()
html = &quot;&lt;html&gt;&lt;body&gt;It is now %s.&lt;/body&gt;&lt;/html&gt;&quot; % now
return HttpResponse(html)
</pre>
<div class="section" id="installation">
<h2>Installation</h2>
<p>To install:</p>
<pre class="literal-block">
$ git clone this-repo
$ cd this-repo
$ virtualenv .
$ bin/pip install -r requirements.txt
$ bin/django-admin.py runserver --settings=hello.settings
</pre>
<p><em>The above code can be found here:</em> <a class="reference external" href="https://github.com/aclark4life/django-hello">https://github.com/aclark4life/django-hello</a></p>
<p><em>Consider a</em></p>
<iframe style="border: 0; margin: 0; padding: 0;"
src="https://www.gittip.com/aclark4life/widget.html"
width="48pt" height="20pt"></iframe><p>&lt;3</p>
</div>
</summary><category term="Django"></category><category term="Python"></category></entry><entry><title>Plone Secrets 5: The Community</title><link href="http://blog.aclark.net//2012/10/23/plone-secrets-5-the-community/" rel="alternate"></link><updated>2012-10-23T11:30:00Z</updated><author><name>aclark</name></author><id>tag:blog.aclark.net,2012-10-23:/2012/10/23/plone-secrets-5-the-community/</id><summary type="html"><p>This is a <strong>non-technical</strong> post on the Plone community, why it's so great, how it functions, and some details that may help one understand it from the outside looking in (AKA The &quot;secrets&quot;)</p>
<div class="section" id="size-and-activity">
<h2>Size and Activity</h2>
<p>The Plone community is <strong>HUGE</strong>. I don't have any numbers handy, but I'm sure there is as much if not more activity going on in the Plone Community right now as there is in the White House &quot;reelection department&quot;.</p>
</div>
<div class="section" id="structure">
<h2>Structure</h2>
<p>The Plone community consists (roughly) of Founders, Contributors, and Users. It has formalized itself into a <strong>501(c)(3) organization</strong> with a corresponding board and membership. The board conducts business to &quot;protect and promote Plone&quot; on behalf of the community and the foundation members (but not necessarily board members) are all recognized contributors. Contributors control the speed and direction of the project. Some of the contributors are:</p>
<div class="section" id="teams">
<h3>Teams</h3>
<ul class="simple">
<li><strong>The Framework Team</strong> (arguably the most important team, next to the core developers themselves <a class="footnote-reference" href="#id3" id="id1">[0]</a>.) Responsible for &quot;evaluating PLIPS for inclusion in Plone&quot;. PLIPS are &quot;Plone Improvement Proposals&quot; used to convey the message: &quot;I want to add this feature to (or remove from) Plone core and I, or the others listed here, will do the work.&quot;</li>
<li><strong>The Documentation Team</strong> (arguably equally as important) Responsible for documenting the Plone software for developers and end users.</li>
<li><strong>The QA Team</strong> (arguably… oh hell they're all important) Responsible for making sure the software is suitable for consumption by developers and end users.</li>
<li><strong>The Marketing Team</strong> Responsible for promoting Plone to prospective consumers.</li>
<li><strong>The AI Team</strong> (Admin Infrastructure) <a class="footnote-reference" href="#id4" id="id2">[1]</a> Responsible for maintaining software and systems infrastructure for the community.</li>
<li><strong>Internationalization Team</strong> Responsible for translating Plone's user interface text into multiple language.</li>
<li><strong>Security team</strong> Responsible for addressing complex security issues with Plone core software.</li>
<li><strong>And more…</strong> I'm sure I missed some teams, feel free to check out the entire list here: <a class="reference external" href="http://plone.org/team">http://plone.org/team</a>.</li>
</ul>
</div>
<div class="section" id="factions">
<h3>Factions</h3>
<p>As is common in the world at large, the Plone community is comprised of various factions. From circles of friends, to the hundreds of Plone consulting firms, to the business sectors that embrace Plone (e.g. non-profits). These factions may never, in their lifetimes, interact with one another but they are critical to the success of Plone. (It would be a shame if they didn't, which is why we have the annual Plone Conference).</p>
</div>
<div class="section" id="individuals">
<h3>Individuals</h3>
<p>Finally, we have the noteworthy individuals of the project. These include the Founders, Board Presidents, Release Managers, Core Developers, and more. Most especially this includes <strong>YOU</strong>. If you have contributed to the Plone project in any way large or small, your work is appreciated.</p>
</div>
</div>
<div class="section" id="greatness">
<h2>Greatness</h2>
<p>What's great is that it all works. I am struck by how much the Plone Community is a microcosm of the world. Especially during election time in the United States, I've been thinking a lot about &quot;how the world works&quot; and I see the same patterns everywhere. Not everyone:</p>
<ul class="simple">
<li>Enjoys the same activities</li>
<li>Shares the same beliefs</li>
<li>Likes the same people</li>
<li>Has the same goals</li>
</ul>
<p>But when you share a common goal e.g. Running a country, or a city, or a state, or business, or a community, or a project, you find ways to get along. Individuals work with other individuals, factions work with other factions, teams works with others teams, projects ship their product to the world. In this case, I'm looking forward to the Plone project shipping its product to the world for the next 10 years or more.</p>
<p>Good luck to us all!</p>
<p><em>Consider a</em></p>
<iframe style="border: 0; margin: 0; padding: 0;"
src="https://www.gittip.com/aclark4life/widget.html"
width="48pt" height="20pt"></iframe><p>&lt;3</p>
<table class="docutils footnote" frame="void" id="id3" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id1">[0]</a></td><td>I'm not listing the core developers because there are over 100 of them and they don't formally meet as far as I know. But of course, without the Founders and Core Developers none of us would be here. So a very special thanks to them as well.</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id4" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id2">[1]</a></td><td>Term coined by Wyn Williams</td></tr>
</tbody>
</table>
</div>
</summary><category term="Plone"></category></entry><entry><title>Why Split The Lists</title><link href="http://blog.aclark.net//2012/10/22/why-split-the-lists/" rel="alternate"></link><updated>2012-10-22T01:00:00Z</updated><author><name>aclark</name></author><id>tag:blog.aclark.net,2012-10-22:/2012/10/22/why-split-the-lists/</id><summary type="html"><div class="section" id="background">
<h2>Background</h2>
<p>The Plone community consists (roughly) of Founders, Contributors, and Users. It has formalized itself into a 501(c)(3) software foundation with a corresponding board and membership. The board conducts business on behalf of the community and the board and foundation members are all recognized contributors. Both the board and the membership have their own private mailing list.</p>
</div>
<div class="section" id="issue">
<h2>Issue</h2>
<p>Over the years, issues have been raised on the membership list that have led to more discussion than all of the foundation membership are comfortable with. And some have expressed that concern (usually without addressing the orginal concern or &quot;topic&quot; of the thread).</p>
</div>
<div class="section" id="fix">
<h2>Fix</h2>
<p>While I am quite confident that folks can manage their own <strong>INBOXES</strong> (or should be able to), I'm not confident that folks (myself included) can resist engaging with others over issues like:</p>
<ul class="simple">
<li>The &quot;religious&quot; aspect (The Plone community is better than this!)</li>
<li>The practical aspect (Everyone can just control themselves!)</li>
<li>The miscommunication (You are obviously &quot;wrong&quot; about XYZ which I won't address but rather suggest you stop!)</li>
</ul>
<p>To me, the fix is simple. Do the most practical thing and split the lists into: Membership-announce and Membership-discuss (note: discussions with the board list are a different matter.) This says nothing about the health of the community (which is strong), it just means: announce is for important information like &quot;please renew your foundation membership&quot; and discuss is for hashing out issues that foundation members care about.</p>
<p>As someone who volunteers to help maintain the lists for the community, I don't take this suggestion lightly but I think it's the right thing to do to move forward and make the most number of people happy. That said, if a vote decides otherwise I am OK with that, but I'll be curbing the amount of discussion I would actually like to do on the membership list.</p>
</div>
</summary></entry><entry><title>Review of Aspeli's Professional Plone 4 Development</title><link href="http://blog.aclark.net//2012/10/20/review-of-aspelis-professional-plone-4-development/" rel="alternate"></link><updated>2012-10-20T19:15:00Z</updated><author><name>aclark</name></author><id>tag:blog.aclark.net,2012-10-20:/2012/10/20/review-of-aspelis-professional-plone-4-development/</id><summary type="html"><p><em>I owe PACKT a review of this book, so here it is.</em></p>
<p>First: I liked it. Second: I appreciate Aspeli writing it. Third: Like many others, I couldn't wait for it to come out. Fourth: I know that it was a <strong>TON OF WORK</strong> and <strong>PROBABLY NOT WORTH THE MONEY</strong> to write it. So why write a Plone book? A few reasons (other than money):</p>
<ul class="simple">
<li>It's good for you</li>
<li>It's good for the community</li>
<li>It's good for Plone</li>
</ul>
<p>So if you care about Plone: please go buy both an electronic and paper version of this book <strong>RIGHT NOW</strong> <a class="footnote-reference" href="#id5" id="id1">[0]</a>. While you are at it, please pick up a copy of <strong>Plone 3.3 Site Administration</strong>. It's quite good, and I hear the author is a <strong>swell guy</strong> who would appreciate your generosity <a class="footnote-reference" href="#id6" id="id2">[1]</a> <a class="footnote-reference" href="#id7" id="id3">[2]</a>.</p>
<div class="section" id="what-i-like">
<h2>What I like</h2>
<p>First let me cover what I <strong>ABSOLUTELY LOVE</strong> about this book.</p>
<div class="section" id="buildout-eggs">
<h3>buildout:eggs</h3>
<img alt="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/buildout.png" src="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/buildout.png" />
<p>Aspeli correctly addresses one of my biggest pet peeves (concerns) about what I believe to be an <strong>ANTI-PATTERN</strong> in almost every Plone buildout: buildout:eggs (referring to the eggs parameter of the buildout section; it does not exist, other than as a convenient variable setting).</p>
<p>If you know me, you know I've spoken about this before and whilst I've moved on from harping on it I will say this: with most software that uses ini-style configuration files when you set a parameter you expect something to happen. But since Buildout is more complicated than the average software that uses ini-style configuration, that expectation is not always met.</p>
</div>
<div class="section" id="add-ons">
<h3>Add-ons</h3>
<img alt="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/addons.png" src="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/addons.png" />
<p>Did you see? You might have missed it. No mention of <strong>Products</strong> WHAT-SO-EVER. &quot;Product&quot; was a term that Zope2 used for Python libraries that enhanced the functionality of Zope2, and it stuck. Now, it should die in favor of a term everyone else in the world is familiar with (in this context): add-on. Well played, Aspeli. Well played.</p>
</div>
</div>
<div class="section" id="the-review">
<h2>The Review</h2>
<p>I will now talk about each chapter briefly. This will be TL;DR-style, but I hope you'll get a nice idea for why this book is so great. Every imaginable detail for each section is covered in the book in painstaking detail by Aspeli. If you have any questions, please don't hesitate to ask them in the comments.</p>
<div class="section" id="chapter-1-plone-in-context">
<h3>Chapter 1: Plone in Context</h3>
<p>In which we learn what, why &amp; when Plone is, plus a bit more. My favorite sub-section is: Plone-the-application and Plone-the-framework, in which Aspeli describes the phenomenon of Plone the application being used by some folks as a generic Python web framework. Plone's strengh and indeed its raison d'etre (reason to exist) is to provide a fully-featured CMS web application suitable for immediate use, or use immediately after a few simple customizations. So if you try to use it as a web framework, you may not get exactly what you expect (because it was not designed to be used that way).</p>
</div>
<div class="section" id="chapter-2-introduction-to-the-case-study">
<h3>Chapter 2: Introduction to the Case Study</h3>
<p>In which we learn how a professional may execute a typical website project with Plone. This is a nice little chapter with some great details about the fictional project that will be executed throughout the remainder of the book: requirements, mockups, and information architecture are the highlights here; as well as the necessary CMS details like users, groups, and content types.</p>
</div>
<div class="section" id="chapter-3-the-development-environment">
<h3>Chapter 3: The Development Environment</h3>
<p>In which we learn about how to setup an environment in which you can customize Plone to suit your needs. TL;DR: fairly typical Python development environment <a class="footnote-reference" href="#id8" id="id4">[3]</a> with additional Plone details covered: Buildout recipes, development libraries, and more.</p>
</div>
<div class="section" id="chapter-4-basics-of-customization">
<h3>Chapter 4: Basics of Customization</h3>
<p>In which we learn about the technical architecture of Plone: ZODB, GenericSetup, Zope2 CMF, Zope Component Architecture, and more (!). And the best way to implement your requirements within that architecture.</p>
</div>
<div class="section" id="chapter-5-developing-a-site-strategy">
<h3>Chapter 5: Developing a Site Strategy</h3>
<p>In which we learn about how to bundle your customizations into a Python package for general use.</p>
</div>
<div class="section" id="chapter-6-security-and-workflow">
<h3>Chapter 6: Security and Workflow</h3>
<p>In which we learn about how Plone implements generic web application features and how you can customize that implementation.</p>
</div>
<div class="section" id="chapter-7-using-add-ons">
<h3>Chapter 7: Using Add-ons</h3>
<p>In which we learn about how to add additional Python libraries to Plone to provide additional features.</p>
</div>
<div class="section" id="chapter-8-creating-a-custom-theme">
<h3>Chapter 8: Creating a Custom Theme</h3>
<p>In which we learn about Plone's new theming engine: Diazo.</p>
</div>
<div class="section" id="chapter-9-nine-core-concepts-of-zope-programming">
<h3>Chapter 9: Nine Core Concepts of Zope Programming</h3>
<p>In which learn a bit more about the technical architecture of Plone. If you love this chapter (as many do), you might also enjoy: <a class="reference external" href="http://developer.plone.org/reference_manuals/old/zope_secrets/index.html">http://developer.plone.org/reference_manuals/old/zope_secrets/index.html</a>.</p>
</div>
<div class="section" id="chapter-10-custom-content-types">
<h3>Chapter 10: Custom Content Types</h3>
<p>In which we learn about Plone's new content type framework: Dexterity.</p>
</div>
<div class="section" id="chapter-11-standalone-views-and-forms">
<h3>Chapter 11: Standalone Views and Forms</h3>
<p>In which we learn about a topic that would be first, if Plone were a generic website framework: how to build forms.</p>
</div>
<div class="section" id="chapter-12-relational-databases">
<h3>Chapter 12: Relational Databases</h3>
<p>In which we learn about how to integrate a relational database into your CMS application. Since Plone relies heavily on the ZODB, none is included by default.</p>
</div>
<div class="section" id="chapter-13-users-and-their-permissions">
<h3>Chapter 13: Users and their Permissions</h3>
<p>In which we learn about another topic that would be covered first if Plone were a generic website framework: authentication and authorization.</p>
</div>
<div class="section" id="chapter-14-dynamic-user-interfaces-with-jquery">
<h3>Chapter 14: Dynamic User Interfaces with jQuery</h3>
<p>In which we learn about using jQuery in Plone.</p>
</div>
<div class="section" id="chapter-15-summary-and-potential-enhancements">
<h3>Chapter 15: Summary and Potential Enhancements</h3>
<p>In which we learn about next steps. You've just built and delivered a CMS application for your client. What will they ask you for next? And how will you implement it.</p>
</div>
</div>
<div class="section" id="conclusion">
<h2>Conclusion</h2>
<p>I hope you have enjoyed this review; and I hope you'll consider purchasing a copy of Aspeli's book for your next Plone project.</p>
<p><em>Like this article? Consider a</em> <a class="reference external" href="http://gittip.com/aclark4life">gittip</a>. <em>You may also want to follow me on</em> <a class="reference external" href="http://twitter.com/aclark4life">twitter</a>.</p>
<table class="docutils footnote" frame="void" id="id5" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id1">[0]</a></td><td>Disclaimer: I was given a copy of both versions in exchange for this review.</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id6" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id2">[1]</a></td><td>Seriously though, whilst PACKT literally forces you to include a software version number in your title, <strong>Plone 3.3 Site Administration</strong> is still relevant to today's Plone. I expect it will be relevant through at least Plone 5.</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id7" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id3">[2]</a></td><td>The financial details of (at least) my contract for writing a book with PACKT <strong>CLEARLY FAVORED PACKT</strong>. That said, I think they are a great organization and I am proud to be a PACKT author. But according to my statements, I still need to earn about $1K more in royalties before I have paid back my advance. Notice what I just said there: <strong>earn in royalties</strong> i.e. I have to sell enough books in order to get PACKT to pay out enough money to meet the terms of the contract. I won't pretend to have any idea why PACKT does what it does with its contracts, except to say that I assume they expect to make money. I'll also assume everything is on the up and up. But unfortunately sometimes the &quot;up and up&quot; can look like this: <a class="reference external" href="http://www.techdirt.com/articles/20121018/01054720744/hollywood-accounting-how-19-million-movie-makes-150-million-still-isnt-profitable.shtml">http://www.techdirt.com/articles/20121018/01054720744/hollywood-accounting-how-19-million-movie-makes-150-million-still-isnt-profitable.shtml</a>.</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id8" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id4">[3]</a></td><td><tt class="docutils literal">$ pip install Plone</tt> support may be available soon which may blow the lid off the Python popularity shack (raise the level of interest from generic Python developers interested in Python CMS applications).</td></tr>
</tbody>
</table>
</div>
</summary><category term="Plone"></category></entry><entry><title>Mailing List Etiquette</title><link href="http://blog.aclark.net//2012/10/20/mailing-list-etiquette/" rel="alternate"></link><updated>2012-10-20T03:00:00Z</updated><author><name>aclark</name></author><id>tag:blog.aclark.net,2012-10-20:/2012/10/20/mailing-list-etiquette/</id><summary type="html"><p>I read a lot of mailing lists:</p>
<img alt="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/unison.png" src="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/unison.png" />
<p>Also, I've been subscribing to, reading, and participating in discussions on mailing lists since about the time Mailman 1.0 was released circa 1999 <a class="footnote-reference" href="#id3" id="id1">[1]</a>. And I have fond memories of interacting administratively with MajorDomo and ListServ software. And by administratively, I mean sending the software commands and getting back a response. In fact, you might say I get along better with the software and machines than I do with the humans that use them. Which is not to say that I'm not a people person: I love people. But I do struggle with striking the right balance between hacking machines and communicating with humans.</p>
<p>Anyway, as you can imagine: I have <strong>VERY STRONG OPINIONS</strong> about how folks should conduct themselves on mailing lists: call it a code of conduct. And regardless of what you might expect from a self-described &quot;hack&quot;: I work <strong>VERY HARD</strong> to enforce that code of conduct on my own behavior. Do I occasionally step outside the lines? Of course. But make no mistake: I do not communicate in a vacuum. You can be as polite and courteous as The Pope and <strong>STILL GET THE SMACKDOWN</strong> through no fault of your own. Why? Because humans make mistakes. Context gets lost. Do you think you know what's going on enough to make a comment? You might be wrong <a class="footnote-reference" href="#id4" id="id2">[2]</a>:</p>
<blockquote>
<p>&quot;The single biggest problem in communication is the illusion that it has taken place.&quot;</p>
<blockquote>
— George Bernard Shaw quotes (Irish literary Critic, Playwright and Essayist. 1925 Nobel Prize for Literature, 1856-1950)</blockquote>
</blockquote>
<div class="section" id="netiquette">
<h2>Netiquette</h2>
<p>So what is a human to do? Well, guess what! There's actually a set of rules or, code of conduct, for humans to follow. Someone wrote it all down. And it's commonly referred to today as &quot;netiquette&quot;. A quick glance at <a class="reference external" href="http://www.albion.com/netiquette/corerules.html">The Core Rules of Netiquette</a> and you'll be well on your way to being a better electronic human than you were the day before. I say this as someone familiar with netiquette, but not as someone who has actually studied up on the concepts recently. One of my favorites:</p>
<blockquote>
<p>From Rule #1: Remember The Human:</p>
<p>…</p>
<p>&quot;When you're holding a conversation online -- whether it's an email exchange or a response to a discussion group posting -- it's easy to misinterpret your correspondent's meaning. And it's frighteningly easy to forget that your correspondent is a person with feelings more or less like your own.</p>
<p>It's ironic, really. Computer networks bring people together who'd otherwise never meet. But the impersonality of the medium changes that meeting to something less -- well, less personal. Humans exchanging email often behave the way some people behind the wheel of a car do: They curse at other drivers, make obscene gestures, and generally behave like savages. Most of them would never act that way at work or at home. But the interposition of the machine seems to make it acceptable.</p>
<p>The message of Netiquette is that it's not acceptable. Yes, use your network connections to express yourself freely, explore strange new worlds, and boldly go where you've never gone before. But remember the Prime Directive of Netiquette: Those are real people out there.</p>
<p>Would you say it to the person's face?</p>
<p>Writer and Macintosh evangelist Guy Kawasaki tells a story about getting email from some fellow he's never met. Online, this fellow tells Guy that he's a bad writer with nothing interesting to say.</p>
<p>Unbelievably rude? Yes, but unfortunately, it happens all the time in cyberspace.&quot;</p>
<p>…</p>
</blockquote>
<p>One belief that I've held for almost as long as I have been communicating electronically is: <strong>IF I SAY SOMETHING ELECTRONICALLY I PROBABLY MEAN IT</strong>. That means you can expect to hear the same information from me in person, as you would in an email or other electronic corresponence. That also means that I rarely look back and <strong>CRINGE</strong> and think to myself: &quot;Oh my gosh I can't believe I wrote that.&quot; Do I make mistakes? Of course. But less and less as I get older and older. More frequently than not, I stand 100% behind my electronic correspondence.</p>
</div>
<div class="section" id="is-netiquette-enough">
<h2>Is netiquette enough?</h2>
<p>Netiquette covers almost everything you can think of. From trying to be sensitive to the context of the list (RULE #3 and #4) to helping guide the discussion the right way (RULE #7) to giving everyone the benefit of the doubt all the time (RULE #10).</p>
<p>Still, sometimes <strong>CRAZY THINGS HAPPEN</strong> like someone forgets to mail the list directly and the direction of the membership &quot;forks&quot;. Follow <a class="reference external" href="http://lists.plone.org/pipermail/plone-com/Week-of-Mon-20120903/000039.html">this thread</a> to see me both issue a <strong>SMACKDOWN</strong> then <strong>APOLOGIZE</strong> when I realized I'd acted upon information only I and one other person was privy to.</p>
</div>
<div class="section" id="policy-makes-perfect">
<h2>Policy makes perfect</h2>
<p>Sometimes, people will pop on to a list and say &quot;Is this the right place to ask about XYZ?&quot; Other times, they'll just ask it: &quot;I have an XYZ that I'm looking to sell…&quot; If the primary topic of the list is &quot;ABC&quot; and if the popping in happens frequently enough, you may want to define a policy e.g. my non-profit organization DC Python has a <a class="reference external" href="http://dcpython.org/#job-postings">policy for job postings</a>:</p>
<blockquote>
<p>&quot;DC Python helps Python programmers get jobs. We allow job postings on our meetup.dcpython.org mailing list provided the following criteria are met:</p>
<p>You are posting for a Python job in Washington, DC or the surrounding metro area — please don't try to recruit PHP or Ruby or .NET developers here, and please don't try to recruit for other cities.</p>
<p>You will put [JOB] in the subject line of the email and include a description of the job (including duties and location) in the body of the email.</p>
<p>You are an active member of DC Python or you are willing to contribute financially either through a sponsorship or by providing food/drink at one of our meetings.&quot;</p>
</blockquote>
<p>That way whenever someone posts to the list or emails me personally about job postings, I can point them to the link:</p>
<ul class="simple">
<li><a class="reference external" href="http://dcpython.org/#job-postings">http://dcpython.org/#job-postings</a></li>
</ul>
<p>Pointing them at netiquette may help too, but that would require them to read through the archives to discover things like &quot;Wow, that recruiter got the smackdown when they identified themselves as a recruiter.&quot; So, a policy of netiquette plus an additional set of rules can go along way toward making communication better for everyone involved.</p>
<p><em>Like this article? Consider a</em> <a class="reference external" href="http://gittip.com/aclark4life">gittip</a>. <em>You may also</em> <a class="reference external" href="http://twitter.com/aclark4life">follow me on Twitter</a>.</p>
<table class="docutils footnote" frame="void" id="id3" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td><a class="reference external" href="http://mail.python.org/pipermail/mailman-announce/1999-July/000004.html">http://mail.python.org/pipermail/mailman-announce/1999-July/000004.html</a></td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id4" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id2">[2]</a></td><td><a class="reference external" href="http://thinkexist.com/quotation/the_single_biggest_problem_in_communication_is/155222.html">http://thinkexist.com/quotation/the_single_biggest_problem_in_communication_is/155222.html</a></td></tr>
</tbody>
</table>
</div>
</summary><category term="Plone"></category></entry><entry><title>Gittip, Misunderstood</title><link href="http://blog.aclark.net//2012/10/19/gittip-misunderstood/" rel="alternate"></link><updated>2012-10-19T03:00:00Z</updated><author><name>aclark</name></author><id>tag:blog.aclark.net,2012-10-19:/2012/10/19/gittip-misunderstood/</id><summary type="html"><p>People do not understand gittip. Or, they do not understand how I use it. Worse, they <strong>think</strong> they understand it <a class="footnote-reference" href="#id2" id="id1">[1]</a>. So much so, some choose to comment about it publicly.</p>
<img alt="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/condescend.jpg" src="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/condescend.jpg" />
<p>Remember <a class="reference external" href="http://blog.aclark.net/gittip-is-the-future.html">gittip is the future</a>? Someone commented:</p>
<blockquote>
<p>&quot;Nobody likes a beggar.&quot;</p>
<blockquote>
— <a class="reference external" href="mailto:fuckoff&#64;dfgd.com">fuckoff&#64;dfgd.com</a></blockquote>
</blockquote>
<p>Really? Well, I have to agree. I <strong>don't like seeing panhandlers</strong> on the street. But I'd never yell &quot;Nobody likes a beggar!&quot; at them. Why? Because: I don't care what they do. Does their presence sometimes annoy me? Sure, because I have to read the sign. And then I have to nod, like &quot;What's up&quot; and &quot;Nah, sorry&quot; at the same time (an acquired skill).</p>
<p>But that is not what bothers me the most about my friend &#64;dfgd.com's comment. What bothers me the most is: I don't claim to know or understand why people do what they do. And short of a loitering law being broken somewhere, I think they have every right to do it (as long as they are not harming me or others). I'd even like to see a pandhandler use Square to accept payments. It sounds ridiculous, but I'd actually pay a panhandler that was accepting credit cards (I have no idea why this amuses me, but it does; of course, you may think twice about what is happening when they swipe but could a panhandler really figure out how to…&nbsp;I digress, back to the story.)</p>
<p>Anyway, pro tip: <strong>the people who use gittip are not begging</strong>. Some (most?) never ask for a dime. I choose to promote my gittip link and I am now going to tell you why, so if anyone ever asks? Or condescends? Here it is:</p>
<div class="section" id="i-like-the-project">
<h2>I like the project</h2>
<p>I like what Chad Whitacre is doing. I think it's a cool idea. I want to do everything I can to help him promote his service. I also like that people I know and like are being gittip'ed. It gives me a warm fuzzy inside. Hell, the entire &quot;top 10&quot; gives me a warm fuzzy.</p>
</div>
<div class="section" id="i-like-money">
<h2>I like money</h2>
<p>I have a funny story I like tell to… well, to you, now: I've done AdSense in the past. For YEARS. One time one of my blog entries got about 40+ upvotes on Hacker News and my revenue went up as quickly as it ever had. This, after years of adsensing, tipped the scales to… YUP, you guessed it! $100. I got my check, and a copy of it is sitting nearby ready for framing. Was that the hardest $100 I ever made? Probably. But it felt damn good to make it. Similarly, with $2 per week in support, I stand to make another $100 much quicker than I ever did with AdSense. This, my friends, is progress. It may not seem like much to random people on the internet. In fact, it may even be laughable, disgusting, or any number of things to other people. But guess what: it's none of their business.</p>
</div>
<div class="section" id="money-is-not-my-boss">
<h2>Money is not my boss</h2>
<p>Some people go <strong>APE SHIT</strong> and get <strong>REALLY UNCOMFORTABLE</strong> in certain situations involving money. I am not one of them. Are you concerned that I'm not volunteering enough and getting paid too much? Don't be. I assure you, I can figure it out. If you have any questions, just ask me: <a class="reference external" href="mailto:aclark&#64;aclark.net">aclark&#64;aclark.net</a>. Are you concerned that because I get paid, someone else may get the wrong impression about volunteering and why do some people get paid and some don't and don't you worry this may give the wrong…? No. I trust that if someone wants to volunteer, that's exactly what they are going to do.</p>
</div>
<div class="section" id="i-have-vision">
<h2>I have vision</h2>
<p>I picture any number of scenarios with gittip. Here are some:</p>
<ul class="simple">
<li>Do you like that I've spent years pouring my heart and soul into the Plone software and community, and perhaps, made your life better in some small way? Gittip me.</li>
<li>Did you notice I forked the Python Imaging Library so that thousands of people could have a working PIL release? Gittip me.</li>
<li>Did you also notice the new zc.buildout release that's much faster than the old release? Gittip me. (And a few others too, most especially: iElectric and zenwryly… you could also gittip Jim Fulton too, I guess :-)).</li>
<li>Do you want me to handle your Python package releases on a regular basis for you, but you don't want to sign a contract with my consulting business or use pythonpackages.com? Gittip me.</li>
<li>Do you want me to handle some other task on a regular basis, but you don't want to sign a contract with my consulting business? Gittip me.</li>
</ul>
<p>Are you aware of all those things and don't want to gittip me? That's fine too. I'm not entirely sure I'm making myself clear, but I will leave you with this: I will always donate my time freely to good causes, especially those near and dear to my heart. My non-profit organization DC Python has been working with the PyLadies to teach &quot;Introduction to Python Classes&quot; in DC. And I'm so grateful, because I want to grow the organization (as big as Mozilla?) and I need all the help I can get. But, I need to make a living too. And this is precisely where, as the old saying goes: &quot;the rubber meets the road&quot;.</p>
<p>I (like so many others before me and along with me in the Plone, Python, and Mozilla communities) have become an entrepreneur. In addition to thinking about &quot;what consulting projects am I going to work to pay my bills&quot;, I like thinking about &quot;what services can I build to pay my bills&quot;. And I'm so lucky I get the chance to do it.</p>
<p><em>You know what to do or not to do because you have just read this article:</em> <a class="reference external" href="http://gittip.com/aclark4life">http://gittip.com/aclark4life</a></p>
<p><em>You may also want to follow me on Twitter:</em> <a class="reference external" href="http://twitter.com/aclark4life">http://twitter.com/aclark4life</a></p>
<table class="docutils footnote" frame="void" id="id2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td><a class="reference external" href="http://blogs.hbr.org/ashkenas/2011/02/your-communications-may-not-be.html">http://blogs.hbr.org/ashkenas/2011/02/your-communications-may-not-be.html</a></td></tr>
</tbody>
</table>
</div>
</summary><category term="Mozilla"></category><category term="Plone"></category><category term="Python"></category></entry><entry><title>Why I Criticize The Plone Foundation Board</title><link href="http://blog.aclark.net//2012/10/17/why-i-criticize-the-plone-foundation-board/" rel="alternate"></link><updated>2012-10-17T20:00:00Z</updated><author><name>aclark</name></author><id>tag:blog.aclark.net,2012-10-17:/2012/10/17/why-i-criticize-the-plone-foundation-board/</id><summary type="html"><img alt="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/aclark-conf.jpg" src="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/aclark-conf.jpg" />
<p>TL;DR: Because I care.</p>
<p>As some of you can probably relate to, I've had my fair share of disagreements with the Plone Foundation Board over the years. The good news is, for the most part, it (just like the community) is staffed with <strong>very reasonable people</strong> who if you push them on an issue, will acknowledge that there are always competing viewpoints to any issue you can think of.</p>
<div class="section" id="the-fallacy-of-false-cause">
<h2>The Fallacy Of False Cause</h2>
<p><em>I don't like what you have to say, therefore you must be quiet.</em> <strong>Not necessarily. You may choose not to listen.</strong></p>
<p>As long as you are polite, respectful, and on topic: you can have a civil discussion with almost any human individual or group in today's world. The challenge is in <a class="reference external" href="http://blog.aclark.net/2012/10/17/top-3-favorite-logical-fallacies/">sticking to those criteria</a>. Conversations often become heated and stray outside of respectful lines, because we are human.</p>
</div>
<div class="section" id="issues">
<h2>Issues</h2>
<p>From the famous (?) pricing scrap of 2010 (i wanted a more expensive server with VM capability, they didn't) to various financially sensitive issues: i.e. I occasionally want to be financially compensated as a &quot;volunteer&quot;. And while the Board does compensate volunteers in many ways, they frequently don't agree with the ways I've suggested. And who could forget <a class="reference external" href="http://plone.org/2008">Plone Conference 2008</a>? This was the first year that the Foundation received a percentage of the ticket sales. Now if I recall correctly there were certainly some heated debates, but none were too taxing or unreasonable (unless you count the ones we collectively had with The Ronald Reagan Building ;-)).</p>
</div>
<div class="section" id="success">
<h2>Success</h2>
<p>Plone's success <a class="footnote-reference" href="#id2" id="id1">[1]</a> is my success and vice versa. I do a lot of different things in life, so I'm not going to say that Plone must succeed for me to succeed. But I must succeed, and if I can help Plone succeed too, I'm going to do everything within my power to make it happen. Let me be clear: Plone does not need me to be successful. But if you've seen the &quot;Plone: I wish I could quit you.&quot; T-Shirt by Tarek Ziadé (shown above), you may know why I keep struggling to make Plone as good as it can be, albeit by my excessively high and overly strict (but not unrealistic) standards; which some, I am sure, do not like.</p>
</div>
<div class="section" id="conclusion">
<h2>Conclusion</h2>
<p>I hope, after reading this, you may have some better idea of who I am and why I do what I do. I've made a commitment in my life to open source software, helping people, and being the best human I can be. I hope you will join me in my quest. If not, at the very least I hope you will respect my right to undertake it. If you have any questions or concerns, please do not hesitate to contact me to express them. Either in the comments below, or here: <a class="reference external" href="mailto:aclark&#64;aclark.net">aclark&#64;aclark.net</a>.</p>
<p>Here's to you, Plone. And to the next 10 years of success.</p>
<table class="docutils footnote" frame="void" id="id2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>Success means different things to different people.</td></tr>
</tbody>
</table>
</div>
</summary><category term="Mozilla"></category><category term="Python"></category><category term="Plone"></category></entry><entry><title>Top 3 "favorite" logical fallacies</title><link href="http://blog.aclark.net//2012/10/17/top-3-favorite-logical-fallacies/" rel="alternate"></link><updated>2012-10-17T02:00:00Z</updated><author><name>aclark</name></author><id>tag:blog.aclark.net,2012-10-17:/2012/10/17/top-3-favorite-logical-fallacies/</id><summary type="html"><img alt="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/y-u-no-agree.jpg" src="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/y-u-no-agree.jpg" />
<p>I love to debate issues. The more complex, the better. I have no formal training in <a class="reference external" href="http://en.wikipedia.org/wiki/Debate">debate</a>, but I wish I did. It may have better prepared me to face different personality types with varying degree of communication skill. You don't have to watch the 2012 U.S. Presidential Debates to know that people will say things that are <strong>BATSHIT CRAZY</strong> to make their point. I've done it myself. That's why we need rules to formalize our discussions, because it's hard to stay on point.</p>
<div class="section" id="fallacy">
<h2>Fallacy</h2>
<p>In the course of debate, you may encounter a <a class="reference external" href="http://en.wikipedia.org/wiki/Fallacy">fallacy</a> or &quot;faulty reasoning&quot;. Discussion of fallacy is my favorite part of debate. So without further ado, my top 3 &quot;favorite&quot; <a class="footnote-reference" href="#id6" id="id1">[1]</a> logical fallacies; of all those I've encountered since I begun to debate in electronic form in the mid-1990s. <em>Disclaimer: I have been on both sides of all three, I'm human. My goal in writing this blog entry is to facilitate better conversations within the communities I care about: Mozilla, Python, and Plone.</em></p>
<div class="section" id="you-will-regret-your-comments">
<h3>1. &quot;You will regret your comments!&quot;</h3>
<p>This may be true, but it's probably not the point. And it's probably better to stay on topic then it is to stray into personal attacks, or what you may feel is &quot;helping&quot; <a class="footnote-reference" href="#id7" id="id2">[2]</a> the other person.</p>
</div>
<div class="section" id="you-are-out-of-line">
<h3>2. &quot;You are out of line!&quot;</h3>
<p>This may be true too, but it may take both sides to acknowledge the lines. When discussing a point, even though it's tempting to cry foul, it's probably better to stay on point. Sometimes you need a break, in which case it's OK to say &quot;let's take a break and pick this up again later&quot; <a class="footnote-reference" href="#id8" id="id3">[3]</a></p>
</div>
<div class="section" id="you-are-wrong">
<h3>3. &quot;You are wrong!&quot;</h3>
<p>Perhaps. But it is likely that you may never agree with your debate counterparts. It's much better to focus on the core issues, and how you can compromise, then it is to focus attention on what is &quot;right&quot; and &quot;wrong&quot; (and who is right and wrong) <a class="footnote-reference" href="#id9" id="id4">[4]</a>.</p>
</div>
</div>
<div class="section" id="final-thoughts">
<h2>Final Thoughts</h2>
<p>It feels great to get those out. If anyone reading this has formal training in debate, I would love to hear your comments. Either below, or: <a class="reference external" href="mailto:aclark&#64;aclark.net">aclark&#64;aclark.net</a>.</p>
<p><em>Like this blog entry? Consider supporting me on</em> <a class="reference external" href="http://gittip.com/aclark4life">gittip</a>.</p>
<table class="docutils footnote" frame="void" id="id6" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>I say &quot;favorite&quot; because these fallacies have crystallized in my brain over the years to the point where I feel I can categorize and discuss them.</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id7" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id2">[2]</a></td><td>I say &quot;helping&quot; because it's probably hurting the intended recipient (whether it's true or not). Sorry, it's not up to you to decide whether or not someone else will regret their comments.</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id8" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id3">[3]</a></td><td>I am married. And there is no better place in the world, than within the institution of marriage, to learn how to debate. :-)</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id9" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id4">[4]</a></td><td>There may be no tangible right or wrong, just preference. Discuss your preferences, then what you need from the other side to be happy. Then ask the other side to do the same.</td></tr>
</tbody>
</table>
</div>
</summary><category term="Mozilla"></category><category term="Python"></category><category term="Plone"></category></entry><entry><title>Hello, Django!</title><link href="http://blog.aclark.net//2012/10/15/hello-django/" rel="alternate"></link><updated>2012-10-15T18:40:00Z</updated><author><name>aclark</name></author><id>tag:blog.aclark.net,2012-10-15:/2012/10/15/hello-django/</id><summary type="html"><div class="section" id="test-post">
<h2>Test post</h2>
<p>This is a test post to create a Django tag feed. Hello, Django planet!</p>
</div>
</summary><category term="Django"></category></entry><entry><title>Looking for projects</title><link href="http://blog.aclark.net//2012/10/04/looking-for-projects/" rel="alternate"></link><updated>2012-10-04T10:30:00Z</updated><author><name>aclark</name></author><id>tag:blog.aclark.net,2012-10-04:/2012/10/04/looking-for-projects/</id><summary type="html"><img alt="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/use_python.jpg" src="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/use_python.jpg" />
<p>With <a class="reference external" href="http://blog.aclark.net/2012/09/28/pythonpackages-com-one-year-later/">pythonpackages.com winding down</a>, I am now actively seeking projects for Q4 2012 and beyond. I am good at:</p>
<ul class="simple">
<li>Deploying Plone sites: <a class="reference external" href="http://blog.aclark.net/2012/10/03/plone-4-3-alpha-1-in-production/">http://blog.aclark.net/2012/10/03/plone-4-3-alpha-1-in-production/</a></li>
<li>Maintaining and releasing Python packages: <a class="reference external" href="http://pypi.python.org/pypi?%3Aaction=search&amp;term=aclark&amp;submit=search">http://pypi.python.org/pypi?%3Aaction=search&amp;term=aclark&amp;submit=search</a></li>
<li>Cat herding volunteers: <a class="reference external" href="http://lists.plone.org/pipermail/plone-com/Week-of-Mon-20120903/000039.html">http://lists.plone.org/pipermail/plone-com/Week-of-Mon-20120903/000039.html</a></li>
<li>Writing documentation: <a class="reference external" href="http://docs.pythonpackages.com/en/latest/index.html">http://docs.pythonpackages.com/en/latest/index.html</a></li>
<li>Writing narrative text: <a class="reference external" href="http://www.packtpub.com/plone-33-site-administration/book">http://www.packtpub.com/plone-33-site-administration/book</a></li>
<li>Writing Python code: <a class="reference external" href="https://github.com/aclark4life">https://github.com/aclark4life</a></li>
</ul>
<p>Also, I've put together a list of projects I am involved in (or have been involved in): <a class="reference external" href="http://resume.aclark.net/projects/">http://resume.aclark.net/projects/</a>, and please feel free to check out my résumé: <a class="reference external" href="http://resume.aclark.net/">http://resume.aclark.net/</a>. If you'd like to discuss how I can help you or your team, please get in touch: <a class="reference external" href="mailto:aclark&#64;aclark.net">aclark&#64;aclark.net</a>.</p>
</summary><category term="Plone"></category><category term="Python"></category><category term="Mozilla"></category></entry><entry><title>Plone 4-3 Alpha 1 In Production</title><link href="http://blog.aclark.net//2012/10/03/plone-4-3-alpha-1-in-production/" rel="alternate"></link><updated>2012-10-03T13:00:00Z</updated><author><name>aclark</name></author><id>tag:blog.aclark.net,2012-10-03:/2012/10/03/plone-4-3-alpha-1-in-production/</id><summary type="html"><p>I love upgrading Plone. Given the choice between an afternoon in the sun and upgrading Plone… OK I'd probably pick the sun, but it'd be close.</p>
<div class="section" id="always-upgrading">
<h2>Always upgrading?</h2>
<p>I would love to see the trend of continuous integration make its way all the way to deployment, so that one day our Plone sites are getting new code as soon as it's released. Until then, it's nice to know that Plone's upgrade procedure is fairly predictable and stable, if not entirely straightforward <a class="footnote-reference" href="#id4" id="id1">[1]</a>.</p>
</div>
<div class="section" id="how-do-i-upgrade">
<h2>How do I upgrade?</h2>
<p>Unfortunately we <em>still</em> get asked this question in IRC. The TLDR (short) explanation is as follows. Got an old Plone? Here's what you should do:</p>
<ul class="simple">
<li>Don't touch it! Leave it alone. It's probably doing something important.</li>
<li>Install the latest Plone somewhere that is not the location of your current site. Maybe not even on the same machine.</li>
<li>Copy the production Data.fs file (usually in var/ somewhere) and any blobs you may have (Plone 4 or greater) to the new installation.</li>
<li>Restart Plone in the foreground (bin/instance fg). If it starts, great! If it doesn't, look for missing add-ons and add their newest-Plone counterparts (this is usually where all the real work happens). Can't find the latest version? Try contacting the author. Stuck? Try Plone support (<a class="reference external" href="http://plone.org/support">http://plone.org/support</a>) or hire a consultant (e.g. <a class="reference external" href="http://aclark.net">http://aclark.net</a>). Otherwise, continue.</li>
<li>Once your add-ons are in place, start the site in the foreground and give the ZMI a poke (stay out of Plone). Look for broken objects. If you find some, repeat the previous step. Otherwise, continue.</li>
<li>Once the ZMI looks good, trigger the migration with the Dry Run checkbox selected. See what you get. If it completes, do it for real. If it doesn't, open a ticket on <a class="reference external" href="http://dev.plone.org">http://dev.plone.org</a> so we can track the kinds of issues that folks are encountering in the wild. At this point if you are stuck, try to get help from the support forums (<a class="reference external" href="http://plone.org/support">http://plone.org/support</a>) or hire a consultant (e.g. <a class="reference external" href="http://aclark.net">http://aclark.net</a>). Otherwise, you are almost done!</li>
<li>Run the upgrade for real i.e. with the Dry Run checkbox unselected. When it finishes (it could take a while depending on the size of your site) check Plone. If everything looks OK, rejoice! If not, don't worry. Check: <tt class="docutils literal">Site Setup <span class="pre">-&gt;</span> ZMI <span class="pre">-&gt;</span> portal_skins <span class="pre">-&gt;</span> custom</tt>. If there is anything inside the custom folder, rename the custom folder to <tt class="docutils literal">custom_X_X</tt> where <tt class="docutils literal">X_X</tt> equals the previous Plone version e.g. <tt class="docutils literal">custom_3_3</tt>. Or, rename it to whatever you like. Or delete it if you don't care about any in-database customizations that have been made. You probably should care, but maybe you don't. Now check Plone again. If everything looks OK, you are done! If not… well you really should be done by now. So if not, please email me: <a class="reference external" href="mailto:aclark&#64;aclark.net">aclark&#64;aclark.net</a> and I will try to help.</li>
</ul>
<p>That's still a lot to swallow for a summary. The key point is this: <strong>test the upgrade away from the production site. Don't put yourself in an unpleasant situation you can easily avoid</strong>. Once everything works as expected, make a copy of your Data.fs and perform the upgrade on the production site (by editing the buildout.cfg if you know how, or just make the new Plone installation the production site. Need help? Please feel free to email me: <a class="reference external" href="mailto:aclark&#64;aclark.net">aclark&#64;aclark.net</a> to discuss professional assistance.)</p>
</div>
<div class="section" id="how-did-i-upgrade">
<h2>How did I upgrade?</h2>
<p>Anyway, the point of this blog entry is to cover the recent upgrade of <a class="reference external" href="http://aclark.net">http://aclark.net</a> to Plone 4.3a1, and the bliss that ensued. Plone 4.3 has lots of goodness in it, most notably the new theme editor from Martin Aspeli. Whilst I haven't fully explored its possibilites, I definitely liked seeing it in place; it's an impressive piece of work and I suspect will be very useful to lots of folks. So here is a brief summary of my upgrade steps, which took about 2-3 days.</p>
<div class="section" id="create-a-new-empty-repo">
<h3>Create a new empty repo</h3>
<p>I started with a public repo in my personal GitHub account, then forked it to my organization for showcasing:</p>
<ul class="simple">
<li><a class="reference external" href="https://github.com/ACLARKNET/new_style">https://github.com/ACLARKNET/new_style</a></li>
</ul>
</div>
<div class="section" id="add-the-buildout">
<h3>Add the buildout</h3>
<p>Yes, we are still married to Buildout for even the simplest deployments :-/. So in order to make this easy for myself and others, I maintain buildouts for every version of Plone under the <a class="reference external" href="http://pythonpackages.com">http://pythonpackages.com</a> umbrella. I typically start like this from within the checked out repo:</p>
<div class="highlight"><pre><span class="nv">$ </span>virtualenv .
<span class="nv">$ </span>bin/pip install zc.buildout
<span class="nv">$ </span>bin/buildout init
</pre></div>
<p>I then <tt class="docutils literal">extend</tt> the desired base configuration (<tt class="docutils literal"><span class="pre">4.3.x-dev</span></tt> in this case) and add additional customizations as needed.</p>
<div class="highlight"><pre><span class="k">[buildout]</span>
<span class="na">extends</span> <span class="o">=</span> <span class="s">http://pythonpackages.com/buildout/plone/4.3.x-dev</span>
<span class="k">[plone]</span>
<span class="na">eggs +</span><span class="o">=</span><span class="s"></span>
<span class="s"> z3c.jbot</span>
<span class="s"> ZODB3</span>
<span class="na">scripts</span> <span class="o">=</span> <span class="s">ZODB3</span>
<span class="na">resources</span> <span class="o">=</span> <span class="s">${buildout:directory}/resources</span>
<span class="na">zcml-additional</span> <span class="o">=</span>
<span class="c"># XXX Can this be done with p.r.zope2instance yet?</span>
<span class="err">&lt;configure</span>
<span class="na">xmlns:browser</span><span class="o">=</span><span class="s">&quot;http://namespaces.zope.org/browser&quot;</span>
<span class="s"> &gt;</span>
<span class="s"> &lt;include package=&quot;z3c.jbot&quot; file=&quot;meta.zcml&quot; /&gt;</span>
<span class="s"> &lt;browser:jbot directory=&quot;${buildout:directory}/templates&quot; /&gt;</span>
<span class="s"> &lt;/configure&gt;</span>
<span class="k">[versions]</span>
<span class="na">Cheetah</span> <span class="o">=</span> <span class="s">2.2.1</span>
<span class="na">Pillow</span> <span class="o">=</span> <span class="s">1.7.7</span>
<span class="na">Products.DocFinderTab</span> <span class="o">=</span> <span class="s">1.0.5</span>
<span class="na">Products.FSDump</span> <span class="o">=</span> <span class="s">0.9.5</span>
<span class="na">collective.recipe.supervisor</span> <span class="o">=</span> <span class="s">0.17</span>
<span class="na">gdata</span> <span class="o">=</span> <span class="s">2.0.17</span>
<span class="na">meld3</span> <span class="o">=</span> <span class="s">0.6.9</span>
<span class="na">plone.app.debugtoolbar</span> <span class="o">=</span> <span class="s">1.0a2</span>
<span class="na">supervisor</span> <span class="o">=</span> <span class="s">3.0b1</span>
<span class="na">z3c.jbot</span> <span class="o">=</span> <span class="s">0.7.1</span>
<span class="na">zope2-bootstrap</span> <span class="o">=</span> <span class="s">0.0.7</span>
</pre></div>
</div>
<div class="section" id="develop-the-diazo-theme">
<h3>Develop the Diazo theme</h3>
<p>With Diazo, Python packaging is optional. And the <tt class="docutils literal">resources</tt> parameter available from <tt class="docutils literal">plone.recipe.zope2instance</tt> makes it easy to start theming without a Python package. I started with a bootstrap template:</p>
<div class="highlight"><pre><span class="cp">&lt;!DOCTYPE html&gt;</span>
<span class="nt">&lt;html</span> <span class="na">lang=</span><span class="s">&quot;en&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;head&gt;</span>
<span class="nt">&lt;meta</span> <span class="na">charset=</span><span class="s">&quot;utf-8&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;title&gt;</span>Bootstrap, from Twitter<span class="nt">&lt;/title&gt;</span>
<span class="nt">&lt;meta</span> <span class="na">name=</span><span class="s">&quot;viewport&quot;</span> <span class="na">content=</span><span class="s">&quot;width=device-width, initial-scale=1.0&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;meta</span> <span class="na">name=</span><span class="s">&quot;description&quot;</span> <span class="na">content=</span><span class="s">&quot;&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;meta</span> <span class="na">name=</span><span class="s">&quot;author&quot;</span> <span class="na">content=</span><span class="s">&quot;&quot;</span><span class="nt">&gt;</span>
<span class="c">&lt;!-- Le styles --&gt;</span>
<span class="nt">&lt;link</span> <span class="na">href=</span><span class="s">&quot;/++theme++static/css/bootstrap.css&quot;</span> <span class="na">rel=</span><span class="s">&quot;stylesheet&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;link</span> <span class="na">href=</span><span class="s">&quot;/++theme++static/css/new_style.css&quot;</span> <span class="na">rel=</span><span class="s">&quot;stylesheet&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;link</span> <span class="na">href=</span><span class="s">&#39;http://fonts.googleapis.com/css?family=Oswald&#39;</span> <span class="na">rel=</span><span class="s">&#39;stylesheet&#39;</span> <span class="na">type=</span><span class="s">&#39;text/css&#39;</span><span class="nt">&gt;</span>
<span class="nt">&lt;style </span><span class="na">type=</span><span class="s">&quot;text/css&quot;</span><span class="nt">&gt;</span>
<span class="nt">body</span> <span class="p">{</span>
<span class="k">padding-top</span><span class="o">:</span> <span class="m">60px</span><span class="p">;</span>
<span class="k">padding-bottom</span><span class="o">:</span> <span class="m">40px</span><span class="p">;</span>
<span class="p">}</span>
<span class="nt">&lt;/style&gt;</span>
<span class="c">&lt;!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --&gt;</span>
<span class="c">&lt;!--[if lt IE 9]&gt;</span>
<span class="c"> &lt;script src=&quot;http://html5shim.googlecode.com/svn/trunk/html5.js&quot;&gt;&lt;/script&gt;</span>
<span class="c"> &lt;![endif]--&gt;</span>
<span class="c">&lt;!-- Le fav and touch icons --&gt;</span>
<span class="nt">&lt;link</span> <span class="na">rel=</span><span class="s">&quot;shortcut icon&quot;</span> <span class="na">href=</span><span class="s">&quot;/++theme++static/img/favicon.ico&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;link</span> <span class="na">rel=</span><span class="s">&quot;apple-touch-icon-precomposed&quot;</span> <span class="na">sizes=</span><span class="s">&quot;144x144&quot;</span> <span class="na">href=</span><span class="s">&quot;/++theme++static/ico/apple-touch-icon-144-precomposed.png&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;link</span> <span class="na">rel=</span><span class="s">&quot;apple-touch-icon-precomposed&quot;</span> <span class="na">sizes=</span><span class="s">&quot;114x114&quot;</span> <span class="na">href=</span><span class="s">&quot;/++theme++static/ico/apple-touch-icon-114-precomposed.png&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;link</span> <span class="na">rel=</span><span class="s">&quot;apple-touch-icon-precomposed&quot;</span> <span class="na">sizes=</span><span class="s">&quot;72x72&quot;</span> <span class="na">href=</span><span class="s">&quot;/++theme++static/ico/apple-touch-icon-72-precomposed.png&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;link</span> <span class="na">rel=</span><span class="s">&quot;apple-touch-icon-precomposed&quot;</span> <span class="na">href=</span><span class="s">&quot;/++theme++static/ico/apple-touch-icon-57-precomposed.png&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;script </span><span class="na">type=</span><span class="s">&quot;text/javascript&quot;</span><span class="nt">&gt;</span>
<span class="kd">var</span> <span class="nx">_gaq</span> <span class="o">=</span> <span class="nx">_gaq</span> <span class="o">||</span> <span class="p">[];</span>
<span class="nx">_gaq</span><span class="p">.</span><span class="nx">push</span><span class="p">([</span><span class="s1">&#39;_setAccount&#39;</span><span class="p">,</span> <span class="s1">&#39;UA-35125830-1&#39;</span><span class="p">]);</span>
<span class="nx">_gaq</span><span class="p">.</span><span class="nx">push</span><span class="p">([</span><span class="s1">&#39;_trackPageview&#39;</span><span class="p">]);</span>
<span class="p">(</span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="kd">var</span> <span class="nx">ga</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="s1">&#39;script&#39;</span><span class="p">);</span> <span class="nx">ga</span><span class="p">.</span><span class="nx">type</span> <span class="o">=</span> <span class="s1">&#39;text/javascript&#39;</span><span class="p">;</span> <span class="nx">ga</span><span class="p">.</span><span class="nx">async</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span>
<span class="nx">ga</span><span class="p">.</span><span class="nx">src</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;https:&#39;</span> <span class="o">==</span> <span class="nb">document</span><span class="p">.</span><span class="nx">location</span><span class="p">.</span><span class="nx">protocol</span> <span class="o">?</span> <span class="s1">&#39;https://ssl&#39;</span> <span class="o">:</span> <span class="s1">&#39;http://www&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;.google-analytics.com/ga.js&#39;</span><span class="p">;</span>
<span class="kd">var</span> <span class="nx">s</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementsByTagName</span><span class="p">(</span><span class="s1">&#39;script&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">];</span> <span class="nx">s</span><span class="p">.</span><span class="nx">parentNode</span><span class="p">.</span><span class="nx">insertBefore</span><span class="p">(</span><span class="nx">ga</span><span class="p">,</span> <span class="nx">s</span><span class="p">);</span>
<span class="p">})();</span>
<span class="nt">&lt;/script&gt;</span>
<span class="nt">&lt;/head&gt;</span>
<span class="nt">&lt;body&gt;</span>
<span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">&quot;navbar navbar-inverse navbar-fixed-top&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">&quot;navbar-inner&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">&quot;container&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;a</span> <span class="na">class=</span><span class="s">&quot;btn btn-navbar&quot;</span> <span class="na">data-toggle=</span><span class="s">&quot;collapse&quot;</span> <span class="na">data-target=</span><span class="s">&quot;.nav-collapse&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;icon-bar&quot;</span><span class="nt">&gt;&lt;/span&gt;</span>
<span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;icon-bar&quot;</span><span class="nt">&gt;&lt;/span&gt;</span>
<span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;icon-bar&quot;</span><span class="nt">&gt;&lt;/span&gt;</span>
<span class="nt">&lt;/a&gt;</span>
<span class="nt">&lt;a</span> <span class="na">class=</span><span class="s">&quot;brand&quot;</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>Project name<span class="nt">&lt;/a&gt;</span>
<span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">&quot;nav-collapse collapse&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;ul</span> <span class="na">class=</span><span class="s">&quot;nav&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">&quot;active&quot;</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>Home<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
<span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;#about&quot;</span><span class="nt">&gt;</span>About<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
<span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;#contact&quot;</span><span class="nt">&gt;</span>Contact<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
<span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">&quot;dropdown&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span> <span class="na">class=</span><span class="s">&quot;dropdown-toggle&quot;</span> <span class="na">data-toggle=</span><span class="s">&quot;dropdown&quot;</span><span class="nt">&gt;</span>Dropdown <span class="nt">&lt;b</span> <span class="na">class=</span><span class="s">&quot;caret&quot;</span><span class="nt">&gt;&lt;/b&gt;&lt;/a&gt;</span>
<span class="nt">&lt;ul</span> <span class="na">class=</span><span class="s">&quot;dropdown-menu&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>Action<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
<span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>Another action<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
<span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>Something else here<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
<span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">&quot;divider&quot;</span><span class="nt">&gt;&lt;/li&gt;</span>
<span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">&quot;nav-header&quot;</span><span class="nt">&gt;</span>Nav header<span class="nt">&lt;/li&gt;</span>
<span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>Separated link<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
<span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>One more separated link<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
<span class="nt">&lt;/ul&gt;</span>
<span class="nt">&lt;/li&gt;</span>
<span class="nt">&lt;/ul&gt;</span>
<span class="nt">&lt;/div&gt;</span><span class="c">&lt;!--/.nav-collapse --&gt;</span>
<span class="nt">&lt;/div&gt;</span>
<span class="nt">&lt;/div&gt;</span>
<span class="nt">&lt;/div&gt;</span>
<span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">&quot;container&quot;</span><span class="nt">&gt;</span>
<span class="c">&lt;!-- Main hero unit for a primary marketing message or call to action --&gt;</span>
<span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">&quot;hero-unit&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;h1&gt;</span>Hello, world!<span class="nt">&lt;/h1&gt;</span>
<span class="nt">&lt;p&gt;</span>This is a template for a simple marketing or informational website. It includes a large callout called the hero unit and three supporting pieces of content. Use it as a starting point to create something more unique.<span class="nt">&lt;/p&gt;</span>
<span class="nt">&lt;p&gt;&lt;a</span> <span class="na">class=</span><span class="s">&quot;btn btn-primary btn-large&quot;</span><span class="nt">&gt;</span>Learn more <span class="ni">&amp;raquo;</span><span class="nt">&lt;/a&gt;&lt;/p&gt;</span>
<span class="nt">&lt;/div&gt;</span>
<span class="c">&lt;!-- Example row of columns --&gt;</span>
<span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">&quot;row&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">&quot;span6 col1&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;h2&gt;</span>Heading<span class="nt">&lt;/h2&gt;</span>
<span class="nt">&lt;p&gt;</span>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. <span class="nt">&lt;/p&gt;</span>
<span class="nt">&lt;p&gt;&lt;a</span> <span class="na">class=</span><span class="s">&quot;btn&quot;</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>View details <span class="ni">&amp;raquo;</span><span class="nt">&lt;/a&gt;&lt;/p&gt;</span>
<span class="nt">&lt;/div&gt;</span>
<span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">&quot;span6 col2&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;h2&gt;</span>Heading<span class="nt">&lt;/h2&gt;</span>
<span class="nt">&lt;p&gt;</span>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. <span class="nt">&lt;/p&gt;</span>
<span class="nt">&lt;p&gt;&lt;a</span> <span class="na">class=</span><span class="s">&quot;btn&quot;</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>View details <span class="ni">&amp;raquo;</span><span class="nt">&lt;/a&gt;&lt;/p&gt;</span>
<span class="nt">&lt;/div&gt;</span>
<span class="nt">&lt;hr&gt;</span>
<span class="nt">&lt;footer&gt;</span>
<span class="nt">&lt;p&gt;</span><span class="ni">&amp;copy;</span> Company 2012<span class="nt">&lt;/p&gt;</span>
<span class="nt">&lt;/footer&gt;</span>
<span class="nt">&lt;/div&gt;</span> <span class="c">&lt;!-- /container --&gt;</span>
<span class="c">&lt;!-- Le javascript</span>
<span class="c"> ================================================== --&gt;</span>
<span class="c">&lt;!-- Placed at the end of the document so the pages load faster --&gt;</span>
<span class="nt">&lt;script </span><span class="na">src=</span><span class="s">&quot;/++theme++static/js/jquery.js&quot;</span><span class="nt">&gt;&lt;/script&gt;</span>
<span class="nt">&lt;script </span><span class="na">src=</span><span class="s">&quot;/++theme++static/js/bootstrap.min.js&quot;</span><span class="nt">&gt;&lt;/script&gt;</span>
<span class="nt">&lt;script </span><span class="na">src=</span><span class="s">&quot;http://platform.twitter.com/widgets.js&quot;</span> <span class="na">type=</span><span class="s">&quot;text/javascript&quot;</span><span class="nt">&gt;&lt;/script&gt;</span>
<span class="nt">&lt;script </span><span class="na">type=</span><span class="s">&quot;text/javascript&quot;</span><span class="nt">&gt;</span>
<span class="nx">$</span><span class="p">(</span><span class="nb">document</span><span class="p">).</span><span class="nx">ready</span><span class="p">(</span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">$</span><span class="p">(</span><span class="s1">&#39;a.lightbox&#39;</span><span class="p">).</span><span class="nx">lightBox</span><span class="p">();</span>
<span class="nx">$</span><span class="p">(</span><span class="s2">&quot;.client&quot;</span><span class="p">).</span><span class="nx">collapse</span><span class="p">()</span>
<span class="nx">$</span><span class="p">(</span><span class="s1">&#39;.carousel&#39;</span><span class="p">).</span><span class="nx">carousel</span><span class="p">({</span>
<span class="nx">interval</span><span class="o">:</span> <span class="mi">10000</span><span class="p">,</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="p">});</span>
<span class="nt">&lt;/script&gt;</span>
<span class="nt">&lt;/body&gt;</span>
<span class="nt">&lt;/html&gt;</span>
</pre></div>
<p>Then added some Diazo rules:</p>
<div class="highlight"><pre><span class="nt">&lt;rules</span>
<span class="na">xmlns=</span><span class="s">&quot;http://namespaces.plone.org/diazo&quot;</span>
<span class="na">xmlns:css=</span><span class="s">&quot;http://namespaces.plone.org/diazo/css&quot;</span>
<span class="na">xmlns:xsl=</span><span class="s">&quot;http://www.w3.org/1999/XSL/Transform&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;append</span> <span class="na">css:content=</span><span class="s">&quot;#category&quot;</span> <span class="na">css:theme=</span><span class="s">&quot;.hero-unit&quot;</span> <span class="nt">/&gt;</span>
<span class="nt">&lt;before</span> <span class="na">content=</span><span class="s">&#39;/html/head/title&#39;</span> <span class="na">theme=</span><span class="s">&#39;/html/head/title&#39;</span> <span class="nt">/&gt;</span>
<span class="nt">&lt;theme</span> <span class="na">href=</span><span class="s">&quot;index.html&quot;</span> <span class="nt">/&gt;</span>
<span class="nt">&lt;replace</span> <span class="na">css:content=</span><span class="s">&quot;.nav&quot;</span> <span class="na">css:theme=</span><span class="s">&quot;.nav&quot;</span> <span class="nt">/&gt;</span>
<span class="nt">&lt;replace</span> <span class="na">css:content=</span><span class="s">&quot;#content&quot;</span> <span class="na">css:theme-children=</span><span class="s">&quot;.hero-unit&quot;</span> <span class="nt">/&gt;</span>
<span class="nt">&lt;replace</span> <span class="na">css:content=</span><span class="s">&quot;#portal-column-one&quot;</span> <span class="na">css:theme-children=</span><span class="s">&quot;.col1&quot;</span> <span class="nt">/&gt;</span>
<span class="nt">&lt;replace</span> <span class="na">css:content=</span><span class="s">&quot;#portal-column-two&quot;</span> <span class="na">css:theme-children=</span><span class="s">&quot;.col2&quot;</span> <span class="nt">/&gt;</span>
<span class="nt">&lt;replace</span> <span class="na">css:content=</span><span class="s">&quot;footer&quot;</span> <span class="na">css:theme=</span><span class="s">&quot;footer&quot;</span> <span class="nt">/&gt;</span>
<span class="nt">&lt;replace</span> <span class="na">css:content=</span><span class="s">&quot;#portal-logo&quot;</span> <span class="na">css:theme=</span><span class="s">&quot;.brand&quot;</span> <span class="nt">/&gt;</span>
<span class="nt">&lt;/rules&gt;</span>
</pre></div>
<p>Then styled to fit with CSS:</p>
<div class="highlight"><pre><span class="nf">#about</span> <span class="p">{</span>
<span class="k">padding-top</span><span class="o">:</span> <span class="m">9px</span><span class="p">;</span>
<span class="p">}</span>
<span class="nc">.alex</span> <span class="p">{</span>
<span class="k">border-bottom</span><span class="o">:</span> <span class="m">1px</span> <span class="k">solid</span> <span class="m">#FAFAFA</span><span class="p">;</span>
<span class="p">}</span>
<span class="nt">body</span> <span class="p">{</span>
<span class="k">background</span><span class="o">:</span> <span class="sx">url(&quot;/++theme++static/img/aclark-net-background.png&quot;)</span> <span class="k">repeat-x</span><span class="p">;</span>
<span class="k">background-color</span><span class="o">:</span> <span class="nb">black</span><span class="p">;</span>
<span class="p">}</span>
<span class="nc">.brand</span> <span class="p">{</span>
<span class="k">color</span><span class="o">:</span> <span class="m">#FAFAFA</span> <span class="cp">!important</span><span class="p">;</span>
<span class="k">font-family</span><span class="o">:</span> <span class="n">Georgia</span><span class="p">;</span>
<span class="p">}</span>
<span class="nc">.brand</span> <span class="nc">.alpha</span> <span class="p">{</span>
<span class="k">font-size</span><span class="o">:</span> <span class="m">360</span><span class="o">%</span><span class="p">;</span>
<span class="k">font-style</span><span class="o">:</span> <span class="k">italic</span><span class="p">;</span>
<span class="p">}</span>
<span class="nc">.brand</span> <span class="nc">.name</span> <span class="p">{</span>
<span class="k">font-size</span><span class="o">:</span> <span class="m">50px</span><span class="p">;</span>
<span class="p">}</span>
<span class="nc">.carousel-inner</span> <span class="p">{</span>
<span class="k">border-bottom</span><span class="o">:</span> <span class="m">1px</span> <span class="k">solid</span> <span class="m">#CCC</span><span class="p">;</span>
<span class="k">padding-bottom</span><span class="o">:</span> <span class="m">2em</span><span class="p">;</span>
<span class="p">}</span>
<span class="nf">#content</span> <span class="p">{</span>
<span class="k">color</span><span class="o">:</span> <span class="m">#FAFAFA</span><span class="p">;</span>
<span class="p">}</span>
<span class="nc">.description</span> <span class="p">{</span>
<span class="k">font-size</span><span class="o">:</span> <span class="m">125</span><span class="o">%</span><span class="p">;</span>
<span class="k">margin</span><span class="o">:</span> <span class="m">1em</span> <span class="m">0</span> <span class="m">1em</span> <span class="m">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="nc">.documentDescription</span> <span class="p">{</span>
<span class="k">font-size</span><span class="o">:</span> <span class="m">125</span><span class="o">%</span><span class="p">;</span>
<span class="k">margin</span><span class="o">:</span> <span class="m">1em</span> <span class="m">0</span> <span class="m">1em</span> <span class="m">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="nt">dt</span> <span class="p">{</span>
<span class="k">margin</span><span class="o">:</span> <span class="m">1em</span> <span class="m">0</span> <span class="m">1em</span> <span class="m">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="nf">#facebook</span> <span class="p">{</span>
<span class="k">padding-top</span><span class="o">:</span> <span class="m">1px</span><span class="p">;</span>
<span class="p">}</span>
<span class="nt">footer</span> <span class="p">{</span>
<span class="k">border-top</span><span class="o">:</span> <span class="m">1px</span> <span class="k">solid</span> <span class="m">#999999</span><span class="p">;</span>
<span class="k">color</span><span class="o">:</span> <span class="m">#999999</span><span class="p">;</span>
<span class="k">margin-top</span><span class="o">:</span> <span class="m">600px</span><span class="p">;</span>
<span class="k">width</span><span class="o">:</span> <span class="m">100</span><span class="o">%</span><span class="p">;</span>
<span class="k">padding-top</span><span class="o">:</span> <span class="m">1em</span><span class="p">;</span>
<span class="p">}</span>
<span class="nt">footer</span> <span class="nt">li</span> <span class="p">{</span>
<span class="k">list-style-type</span><span class="o">:</span> <span class="k">none</span><span class="p">;</span>
<span class="p">}</span>
<span class="nc">.hero-unit</span> <span class="p">{</span>
<span class="k">background</span><span class="o">:</span> <span class="nb">black</span><span class="p">;</span>
<span class="p">}</span>
<span class="nt">hr</span> <span class="p">{</span>
<span class="k">border</span><span class="o">:</span> <span class="k">none</span><span class="p">;</span>
<span class="k">background-color</span><span class="o">:</span> <span class="m">#CCC</span><span class="p">;</span>
<span class="k">color</span><span class="o">:</span> <span class="m">#CCC</span><span class="p">;</span>
<span class="k">height</span><span class="o">:</span> <span class="m">1px</span><span class="p">;</span>
<span class="p">}</span>
<span class="nc">.image-left</span> <span class="p">{</span>
<span class="k">float</span><span class="o">:</span> <span class="k">left</span><span class="p">;</span>
<span class="k">margin</span><span class="o">:</span> <span class="m">0</span> <span class="m">1em</span> <span class="m">0</span> <span class="m">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="nc">.navbar-inner</span> <span class="p">{</span>
<span class="k">background</span><span class="o">:</span> <span class="m">#AA001F</span> <span class="cp">!important</span><span class="p">;</span>
<span class="k">height</span><span class="o">:</span> <span class="m">50px</span><span class="p">;</span>
<span class="p">}</span>
<span class="nc">.portletHeader</span> <span class="p">{</span>
<span class="k">font-size</span><span class="o">:</span> <span class="m">125</span><span class="o">%</span><span class="p">;</span>
<span class="p">}</span>
<span class="nf">#portal-column-one</span> <span class="p">{</span>
<span class="k">color</span><span class="o">:</span> <span class="m">#FAFAFA</span><span class="p">;</span>
<span class="p">}</span>
<span class="nf">#portal-column-two</span> <span class="p">{</span>
<span class="k">color</span><span class="o">:</span> <span class="m">#FAFAFA</span><span class="p">;</span>
<span class="p">}</span>
<span class="nc">.team-member</span> <span class="p">{</span>
<span class="k">border-bottom</span><span class="o">:</span> <span class="m">1px</span> <span class="k">solid</span> <span class="m">#FAFAFA</span><span class="p">;</span>
<span class="p">}</span>
<span class="nc">.service</span> <span class="p">{</span>
<span class="k">padding</span><span class="o">:</span> <span class="m">30px</span> <span class="m">0</span> <span class="m">30px</span> <span class="m">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="nf">#twitter</span> <span class="p">{</span>
<span class="k">padding-top</span><span class="o">:</span> <span class="m">15px</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
<div class="section" id="customize-templates">
<h2>Customize templates</h2>
<p>As you may have noticed above I use <tt class="docutils literal">z3c.jbot</tt> to customize various Plone templates.</p>
<img alt="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/custom-templates.png" src="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/custom-templates.png" />
</div>
<div class="section" id="add-content">
<h2>Add content</h2>
<p>I then cut/pasted all my content from the old site to the new site. This is a lot of work, but I like mimicking the experience of someone non-tech-savvy using Plone for the first time.</p>
</div>
<div class="section" id="what-s-left">
<h2>What's left?</h2>
<p>I am very happy with this upgrade, but of course it's not perfect.</p>
<div class="section" id="use-sunburst-theme-for-content-editing">
<h3>Use Sunburst theme for content editing</h3>
<p>If you are Diazo-savvy, you may notice I completely ignore styling the content editing interface. Instead I rely on the unthemed <a class="footnote-reference" href="#id5" id="id2">[2]</a> site for content editing.</p>
<img alt="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/edit-ui.png" src="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/edit-ui.png" />
</div>
<div class="section" id="use-diazo-theme-for-public-facing-view">
<h3>Use Diazo theme for public facing view</h3>
<p>Of course, visitors to <a class="reference external" href="http://aclark.net">http://aclark.net</a> see the Diazo theme.</p>
<img alt="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/diazo-theme.png" src="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/diazo-theme.png" />
<p>I'm hoping that the Plone team can unify the content editing experience again in Plone 5, possibly via simplifying the &quot;old style&quot; templates such that it's easier to map them to custom Diazo themes.</p>
</div>
</div>
<div class="section" id="hightlights">
<h2>Hightlights</h2>
<p>Lastly, I'll cover some of the remaining highlights.</p>
<div class="section" id="it-works">
<h3>It works!</h3>
<p>Plone 4.3a1 is remarkably stable. The TinyMCE UI is a bit rough, and the sitemap is broken <a class="footnote-reference" href="#id6" id="id3">[3]</a>, but it works.</p>
</div>
<div class="section" id="the-all-content-view-is-awesome">
<h3>The <tt class="docutils literal">All content</tt> view is awesome</h3>
<img alt="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/all-content.png" src="https://raw.github.com/ACLARKNET/aclarknet.github.com/master/images/all-content.png" />
<p>Contributed by Laurence Rowe for Plone 4, I use the <tt class="docutils literal">All content</tt> view in two places:</p>
<ul class="simple">
<li><a class="reference external" href="http://aclark.net/services">http://aclark.net/services</a></li>
<li><a class="reference external" href="http://aclark.net/team">http://aclark.net/team</a></li>
</ul>
<p>I love the ability to easily aggregate the contents of pages within a folder.</p>
</div>
<div class="section" id="my-deployment-is-awesome">
<h3>My deployment is awesome</h3>
<p>I'm really happy with the following trick I used this time around:</p>
<ul class="simple">
<li>Content is stored in Data.fs (of course) which I've checked into a private repo on bitbucket, and save nightly with an automated commit and push. I'm able to present the site buildout and theme to the public but keep the Data.fs private via git submodules.</li>
</ul>
<p>Prior to this, the entire site was stored in a private repo on bitbucket. And finally:</p>
<ul class="simple">
<li>If you load the site, you'll notice the images (configured as static resources) are a bit laggy. I'm a big fan of of CloudFlare and current user via pythonpackages.com, so I'll probably be configuring aclark.net to use it soon too. Once that is done, the site should be lightning fast instead of just really fast.</li>
</ul>
<p>Like this article and/or my open source work in general? Please <a class="reference external" href="http://gittip.com/aclark4life">consider supporting me on gittip</a>.</p>
<table class="docutils footnote" frame="void" id="id4" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>Some ideas for improving upgrades: 1.) optionally rename portal_skins/custom during the upgrade process. 2.) Include suggestions in the form copy to stage the upgrade away from the current production site. 3.) Report on availability of add-ons compatible with latest version of Plone.</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id5" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id2">[2]</a></td><td>Unthemed meaning un-diazo-themed. The content UI is themed with the Sunburst theme &quot;the old way&quot;.</td></tr>
</tbody>
</table>