Weblog

published Nov 03, 2021, last modified Nov 04, 2021

Fantasystrijd Brugge

published Nov 03, 2012

Dit is mijn inzending voor de Fantasystrijd Brugge 2012.

Ik heb in juni meegedaan aan de Fantasystrijd Brugge 2012. Dit is een schrijfwedstrijd voor fantasyverhalen met een maximum van 1500 woorden. De mooie Vlaamse term is kortverhalen.

Vandaag, 3 november, ben ik in Brugge geweest voor de uitslag. Er waren 213 deelnemers. Ik ben als 62e geëindigd. Dat is ruim de bovenste helft, dus ik mag tevreden zijn.

Het verhaal dat ik geschreven heb, had ik oorspronkelijk bedoeld als proloog voor de fantasyroman waar ik aan werk (voor de Luitingh Fantasy en Magic Tales romanwedstrijd). Een deel van de charme van het kortverhaal zit hem erin dat het een tijdje duurt voor je doorhebt wat er aan de hand is en wat voor iemand de hoofdpersoon is. Als deze proloog in mijn roman zou staan, dan zou de lezer allang een plaatje op de voorkant hebben gezien en een stuk tekst op de achterflap en was dat stukje verrassing weg. Toen heb ik besloten er een apart verhaal van te maken.

De verwijzingen naar de harde werkelijkheid van mijn roman heb ik eruit gehaald. Mede daardoor is het waarschijnlijk de kortste inzending geworden, met slechts 669 woorden. Niet lang voor ik het verhaal inzond, heb ik de Hunger Games trilogie van Suzanne Collins en Op de hoogte van Christophe Van Gerrewey gelezen. Deze boeken vond ik erg goed. Ze zijn in de eerste persoon en de tegenwoordige tijd geschreven. Voor die boeken werkte dat goed en ik vond die directe vorm ook bij mijn verhaal passen, dus in de laatste week heb ik het nog omgeschreven.

Ben je nieuwsgierig geworden? Je kan mijn inzending lezen.

Mountain Lion

published Oct 26, 2012

Upgrading to OS X Mountain Lion.

IANAME (I Am Not A Mac Expert), but I have recently upgraded my MacBook Pro from Snow Leopard (10.6.8) to Mountain Lion (10.8.2). Some pointers follow.

Get the software

Just open the App Store application, search for Mount Lion (it may be on the front page as popular download), and buy it. The download is about 4 GB, so you will want to start with this step. Or buy it on CD somewhere.

Cleanup

I do not think you need much extra hard disk space for the new Mac OS X version, but this is still a good time to make some extra room. Disk Inventory can be a good assistent here, showing you which files or directories take up the most space.

Your Downloads directory may also contain old installers that can be deleted. Maybe you have some backups from 2004 that you finally realize you will not need anymore.

Be sure to go to the Trash folder and empty it.

Backup

Make sure you have a backup, probably with the Time Machine. If you are a developer, make sure all your source code changes have been committed and pushed.

Upgrade

Close your programs and run the Mountain Lion installer. I think this took about half an hour.

TRIM Enabler

If you have a Solid State Disk, you are probably using TRIM Enabler. After the first reboot, you will need to start that application and enable it again. Then you probably need to restart again, but the application will tell you this.

XCode

If you are a developer, you will want to install the latest XCode from Apple. Open the App Store and download it. It is about 1.6 GB so this will again take a while.

When you install it, make sure to install the command line tools too. Open XCode, open the Preferences, go to the Downloads section and download and install the command line tools.

Status

At this point, as I am a Plone developer, I tried starting an existing zope instance. This worked fine. But then I tried rebuilding the Python buildout, specifically installing the 3.3 one, which failed. If I recall correctly, no good C compiler could be found. I have that in Mac ports, so I needed to update those.

Mac ports

You will need to completely reinstall the Mac ports package and your active ports. Follow instructions at https://trac.macports.org/wiki/Migration

For step 1 under 'Reinstall ports' you may want to gather only the active ports:

port -qv installed | grep active > myports.txt

Then you can open that file and remove the lines for ports that you think are not needed anymore. Maybe keep a copy of the original file in case you later find things are missing.

In step 3 you execute this:

sudo port clean all

This might fail with an error like this:

Error: Unable to open port: can't read "build.pre_args": can't read
"build.cmd": Failed to locate 'gnumake' in path:
'/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin' or at
its MacPorts configuration time location, did you move it?

If that is the case, then most likely you have not installed the command line tools of XCode. See http://guide.macports.org/chunked/installing.xcode.html on how to do this. Or see above.

Note that freshly installing all you favorite mac ports will take a while. You may want to grab a drink or some sleep at this point.

Python buildout

If you are developing Plone, you may already be using the Python buildout. This is on github now. It seems best to rebuild your pythons at this point. Use the bootstrap-1.4.4.py file, otherwise you will run into problems.

Initial impressions

Wow, it feels fast! My feeling is that starting an application is now twice as fast. Maybe I would have had the same result with a fresh install of Snow Leopard, but it sure is nice. Note that I was already using a Solid State Disk, so it was already fast.

I have switched the natural scrolling off (System Preferences, Hardware, Mouse). Maybe I should just try it, but I am used to the old behaviour.

For a while, iTunes started up and began playing music without me doing anything. It did this lots of times. Today I did not see this anymore.

Mail looks rather differently. I started it up and did not see my mail accounts and folders, just some messages. So I quit Mail and started ThunderBird, which is still my favorite mail reader because I know its keyboard short cuts. The Mail interface can be easily tweaked though, nothing wrong with it, just a bit surprising for me the first time. I think the layout will work fine, at least on wide screens.

Lightning talks Friday

published Oct 12, 2012

Lightning talks during the Plone Conference 2012.

Lightning talks on Friday during the Plone conference 2012.

Paul J Stevens - BlobStorage improvement

We had a site with PloneMultiSite. Content items end up in multiple sites. The blobs are then also duplicated. So this takes up more hard-disk space than needed. Whether you use PloneMultiSite or not, this can happen. So I created a tool to compress the blob storage with a script. It deduplicated the blobs using hard links. So with this, you use less disk-space and get faster copy and move actions. A few patches need to be updated. I want to talk with collective.recipe.backup authors too [that would be me, welcome!].

Code: https://github.com/pjstevns/bscompress

Philip Bauer - Theme Editor

You can have a Theme Editor, started by David Glick. As Starzel we want to make this a company-sponsored PLIP. I propose a new process for plips: everything that David creates should be plipped and he should get gittipped, so we have a Glick-PLIP-Git-tip.

Johannes Raggam - plone.app.event

I have made a better version op plone.app.event for the PLIP. Please read the README.rst file for usage info. It supports recurring events. Please test it and use it.

Code: https://github.com/collective/plone.app.event

Eric Steele, Elizabeth Leddy - teams

If you run a team, for example the UI team, please come on stage so we can see you and know how you look. If you want to get involved, these are the people to talk to.

Lucas Graf - ftw.tabbedview

I work for 4teamwork (ftw). ftw.tabbedview integrates collective.js.extjs, collective.quickupload and ftw.table. You can filter content listings, sort tables client side, group things, manage columns, batching support, flexible sources (catalog, SQLAlchemy, etc), data transformations (you have a user name in the table but want to show the fullname) and lots more.

Code: https://github.com/4teamwork/ftw.tabbedview

Philip Bauer - Plone Konferenz

I helped organize the Plone Konferenz 2012 in Munich, Germany. Lots of visitors. Most were long-time users, but not yet part of the community. We wanted to attract decision makers and people new to Plone. We had great success and a lot of fun. How can you do that yourself? Get your local usergroup drunk and have them say yes. Organize a sprint. Have a party at the first day so people get to know each other faster. Spend money and effort on marketing. You get (local) visibility, new community members, a great party, you give large tips. We have 3,000 euros that we donate to the Plone Foundation.

Mikko Ohtamaa - Solving problems

I will show some packages: visualtitle, imageportlet, silvuple (it's French) which shows untranslated items, plomobile, sevabot (irc bot). Low let's party.

Sprint at the end of the world

World is going to end December 21st. So go to the end of the world to sprint. Come to the South of Argentina on 1 December 2012. We will see what we will sprint on.

Jukka Ojaniemi - Whiskers

Whiskers is a Pyramid application. It collects all the packages you use in your buildouts. You need a buildout extension called buildout.sendpickedversions that sends info to the whiskers server.

[Mark van Lent blogged about it earlier this year.]

Érico Andrei - Desk surfing

We need you in Brazil. We are lonely. Please visit us, otherwise we need to drink. If you need to travel to Sao Paulo, we have a place for you where you can work on Plone. Keep calm and Plone in Brazil.

Calvin Hendryx-Parker - Playing with blocks

We have a desk in Fortville as well: welcome!

Choose good building blocks:

  • Use APIs versus embedded iframes. Get the content in your site.
  • Evaluate your options: are mailing lists taken over by spam, what is the activity in version control?
  • Try out Single Sign On.
  • Supercharge your search with Solr. Index external content. Fix spelling.
  • Beware of over customization.
  • Testing, testing, testing.

See my talk from earlier today.

Radek Jankiewicz - stxnext.greyscale

Transforms the content of the page into grey scale colors. We use it when a website needs a mourning color after a national incident. There is a filter attribute in css, but is only supported by IE. Javascript also not really an option. Images are cached in filestorage.

See: http://pypi.python.org/pypi/stxnext.grayscale

Johannes Raggam - amplify.cc

This provides a framework for old php/postnuke based community portals. One content type for everything, using dexterity and behaviors. I gave a talk about this.

Maurizio Delmonte - Plone in your country

Your country may have a national Plone site. Italy: http://plone.it. Netherlands: http://plone.nl. You can now see a link to national Plone sites in other countries in the right hand corner of your own site: we are world wide! Thank you for being here.

Maarten Kling

Thanks to all our sponsors, gold, silver, bronze, personal, supporting. Rita from RebelX: thanks a lot for all the designs. Guido Stevens created the Plone awards. The Brazilian Plone community has won the Plone Awards 2012 for their PloneGov.br community building efforts! Thanks Wyn Williams for the Wifi. Thanks to Musis for their support here at the Musis Sacrum location.

Crowd: "Thank you, Four Digits!"

Lennart Regebro - Blame it on Ceasar: A rant on calendaring

published Oct 12, 2012

Talk during the Plone Conference 2012.

Lennart Regebro blames it on Ceasar when giving a rant on calendaring during the Plone conference 2012.

I live in Krakow, Poland, and can be hired. I ended up doing a lot with calendaring support.

We have the day, the month and the year. These cycles do not fit into each other nicely, which causes problems. Rome has seen all kinds of problems for this. Rome had 10 months per year. For lunar months you may need twelve or thirteen months in a year. So several days did not actually exist. With lunar months you get out of sync with about 12 days. So you get leap months. The roman calendar went out of sync about four months compared to what the season should have been.

Julius Caesar wanted to fix this. Solar calendars let the year follow the solstices and seasons. They got months of 29 or 31 days, because even numbers were unlucky. The new calendar was probably the worst ever made, but it was forced on an unsuspecting world because Rome was the boss.

Several calendars had ten days per week, but seven is a good cycle. The week is now a cycle that has nothing to do with months or years. That makes it difficult to calculate the day of the week for a certain day of the month.

momentjs.com looks best now for javascript.

http://www.date4j.net is promising for date handling in Java.

What day is the start of the week. Sunday? Monday? The isoweekday function is the correct function to use. Monday=1, Sunday=0 or 7.

The world is not split into 24 time zones. Every country decides which standard time or times are used. But we call them time zones even though they do not exist. Some time zones used to be for example one hour and fourteen seconds before GMT.

William Willett thought other people were lazy so he invented the Daylight Savings Time.

Some time zones get abbreviated the same, which is obvious as most of them end with Standard Time:

  • BST: 5 different zones
  • CST: 4 different zones
  • IST: 4 different zones

So you can name them America/Chicago, Australia/Canberra, etcetera. Daylight savings has started at various dates and times for the same zone.

Javascript: new Date(2011, 1, 29) can give 1 March, as February=1. For date checking it is better to check a date at 12:00 at the middle of the day.

Now Python. The datetime library supports timezones, but no zoneinfo is included. So there is pytz, which is always up to date. dateutil uses what the OS gives, which is probably also up to date. There are more advantages and disadvantages. "Which half past three do you mean?" is a hard question in Daylight Savings. You can tell pytz to break when no information for DST is given. I have recently created http://pypi.python.org/pypi/tzlocal that helps pytz a bit more here.

Parsing timezones. POSIX has a number and a sign wrong here.

Recurring events: repeat every third Monday, except when it is the first of the month and not the third year. You can come up with really ridiculous rules here. It got simplified luckily. dateutil has good support. With dateutil.easter you can say things like: get the third Sunday after Easter. Other crazy stuff is in dateutil.rrule. The icalendar module helps for creating and parsing calendar files.

So what happens when you mix timezoned and timezone-naive events? plone.app.event does not allow this. Timezones do not make sense for conferences on boats. Do you use an end-date or a duration? plone.app.event supports whole day events.

With a datepicker popup you can pick a date with javascript. That is fine. But you want a fallback for non-javascript too. A dropdown box for hours is okay. For sixty minutes this is a long list. Plone limits it to five minute steps. That is a decision you need to make. An end date and time should not always be needed.

Solgema.fullcalendar is good, with hardly drawbacks and it pretty. Plone4Artists calender is good too, without javascript. Think twice before you create something new yourself. And if you do, you should limit yourself.

In calendaring you can luckily ignore leap seconds.

My blog: http://regebro.wordpress.com/

Guido Stevens - Plone goes social

published Oct 12, 2012

Talk during the Plone Conference 2012.

Guido Stevens talks about Plone goes social at the Plone conference 2012.

A Mckinsey study value social business at 1.3 trillion dollars per year. You can get a 25 percent productivity increase by replacing email with social tools.

Social business chooses:

  • people over documents
  • flow over structure
  • network over hierarchy

It is about

  • read/write instead of publish/read
  • social activity instead of CMS
  • activity stream instead of a document tree

Plone out of the box is good at the old stuff. The new stuff is there in bits and pieces.

We have created a set of social components, as basis: plonesocial.suite. Just add that to the eggs in your buildout and install it. You add status updates in an activity stream on your front page. Comments added in the site also end up in the activity stream. You can filter what ends up on the home page. So there are microblog status updates that get stored in the ZODB, and you see content creation and plone.app.discussion comments.

There is social networking, like following people and seeing who they follow and who their followers are.

plonesocial.suite is the one-click installer, which installs these separate packages:

  • plonesocial.microblog
  • plonesocial.activitystream
  • plonesocial.network

Out of the box you could get about ten to twenty commits per second like this. So we developed some extra stuff. We dropped some ACID: we batch commits to once per second. We skip ZCatalog indexing. This makes more than 1000 commits per seconds possible. Storing is done in BTrees (thanks for the assistence during the Plone Open Garden, Maurits). This is an optimized dictionary interface made available by Zope. Also using itertools.chain to combine status updates and results from the catalog.

The PloneSocial philosophy is:

  • Use native Plone stuff. Do it the Plone way.
  • A full social experience
  • Pre-integrated one-click install
  • Flexible components
  • Scale down for small sites
  • Scale up for large sites

Get it from PyPI: http://pypi.python.org/pypi/plonesocial.suite

The source code of the packages is at https://github.com/cosent

There is an Open Space about this at 15:45 here in the Anniversary Hall.

We override the author.cpt template to show the status updates of the user there.

It would be nice to get a notification when someone starts following you.

It is used in production.

We can do more with liking content and following content.