Weghalen van .DS_Store files

Scriptje voor als de Mac OS X Finder weer eens ongewenst .DS_Store files heeft aangemaakt.

1
2
cd /some/folder/name
find . -name ".DS_Store" -exec rm '{}' ;

Permalinks en sitemaps

Als rails ontwikkelaar wil je natuurlijk wel nice url's voor je posts. Moest hiervoor nog mod_rewrite aanzetten in apache en een .htaccess bestand aanmaken in mijn Wordpress folder en hiervan de rechten goed zetten.

1
2
3
4
5
cd /etc/apache2/mods-enabled
sudo ln -s ../mods-available/rewrite.load
cd /u/apps/soemirno.net
touch .htaccess
sudo chown www-data .htaccess

Ook nog Directory settings aanpassen in mijn virtualhost file:

1
2
3
4
5
    ServerName soemirno.net
    DocumentRoot /u/apps/soemirno.net
 
	Options FollowSymLinks
	AllowOverride All

Daarna kon ik via de admin interface een zinnige permalink construeren. Ik heb gekozen voor de postnaam met de post id ervoor om het uniek te maken: /posts/%post_id%-%postname%/

Ook meteen de sitemap plugin geinstalleerd om makkelijk een sitemap voor Google te generereren.

Reading code: concerns

Zat weer even te kijken hoe anderen in Ruby coderen. Voor het integreren van een forum in een applicatie, zat ik met altered_beast te werken. De manier hoe functionaliteit aan een User object toegevoegd werd was nieuw voor mij.

Een User model in een forum heeft verschillende 'concerns', functionaliteiten die je bij elkaar kunt groeperen zoals: authenticatie, posten van reacties, etc. Deze zijn gegroepeerd in aparte modules i.p.v. in een grote User class.

ActiveRecord word uitgebreid met een concerned_with methode om dependencies te laden.

1
2
3
4
5
6
7
class << ActiveRecord::Base
  def concerned_with(*concerns)
    concerns.each do |concern|
      require_dependency "#{name.underscore}/#{concern}"
    end
  end
end

In het User model geef je aan wat geladen moet worden, zoals posting.

1
2
3
4
class User < ActiveRecord::Base
  concerned_with :validation, :states, :activation, :posting
  #...
end

In user/posting.rb heb je dan alleen de functionaliteit m.b.t. het posten van reacties.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class User
  # Creates new topic and post.
  # Only..
  #  - sets sticky/locked bits if you're a moderator or admin 
  #  - changes forum_id if you're an admin
  #
  def post(forum, attributes)
    attributes.symbolize_keys!
    Topic.new(attributes) do |topic|
      topic.forum = forum
      topic.user  = self
      revise_topic topic, attributes
    end
  end
 
 #...
end

Ik heb zelf nog geen oordeel over, ik moest in eerste instantie de code gewoon begrijpen. Het voordeel is dat je i.p.v. wat regels met require_dependency, je een enkele regel hebt met een duidelijke intentie. Je zit niet te denken in het linken van modules, maar in de verantwoordingen van het object. Dit is goed. Het is echter altijd wel even uitzoeken hoe dit soort oplossingen in elkaar zit.

Terugkeer van Word macros ellende

Ik weet niet of het nog gebruikt wordt, maar in het verleden heb ik wel Word formulieren moeten invullen via invoerschermpjes met macros erachter die je helpen de formulieren op de juiste manier in te vulen. Word macros waren ook een handige manier om virussen te verspreiden dus denk dat het nu wat minder gebruikt wordt.

Maar met PDF kun je nu blijkbaar hetzelfde doen met Javascript. Ik probeerde een formulier voor de Kamer van Koophandel in te vullen en werd dood gegooid met foutmeldingen en instructies. Een ingevuld formulier is alleen uit te printen en kun je niet opslaaan, althans in theorie. Op mijn Mac kreeg ik het formulier gewoon niet uitgeprint, waarschijnlijk door een foutje in de PDF. Bij het nabellen bleek dat het op de Mac niet echt getest is. Ja, dat je websites multiplatform moet testen is intussen wel bekend, maar dat je een Portable Document Format ook op elk platform moet testen is toch vrij nieuw.

Uiteindelijk heb ik het formulier met de standaard Preview wel gedeeltelijk kunnen invullen, opslaan en uitprinten. Alleen het eerste blad moest ik nog met de pen invullen, omdat waarschijnlijk de Javascript roet in het eten gooit bij Preview.

Waarom het allemaal zo ingewikkeld moest, is mij niet duidelijk. Het gaat om het invullen van een formulier en dan hoef ik geen instructies te zien over persoonlijk langs gaan met identificatie. Als je zo intelligent ben om een formulier van een website te downloaden en in te vullen, kun je ook nog gewoon op de website lezen wat je er daarna mee moet doen. Gebruik daar geen irritante dialoogvensters voor.

De Sharepoint Wiki

Ik zat mee te kijken hoe een collega een Sharepoint wiki pagina aanpaste. Het was de eerste keer dat ik een wiki zag met een rich text editor. Het is anders en misschien dat Microsoft, als laatkomer, zich op deze manier wil onderscheiden van de andere wiki engines.

Dit vind ik een beetje jammer. Een van de redenen dat ik een wiki pagina prefereer boven een office document is dat ik me kan focussen op structuur en content en nog niet aan opmaak hoef te denken. Als ik een office document schrijft, zit ik door wysiwyg toch ook al te kijken of het er goed uitziet en dat leidt mij af. Een wiki met een rich text editor heeft dat dus ook. Misschien dat er een Textile of Markdown plugin bestaat, maar ik vermoed van niet.

Er zat nog een rare bug in. Via de rich text editor kun je een bestaande link niet meer aanpassen. Het link aanpas dialoogvenster laat het veld met de link leeg en de enige manier om te weten wat de oorspronkelijk link was, is de html view te gebruiken.

Het is alsof helemaal niet is gekeken naar de bestaande wiki engines en men bezig is het wiel opnieuw uit te vinden. Hmm, was simpele kennisdeling en hergebruik ervan juist niet de kracht van wiki's.

On 2008-07-03

  • not happy. Doing an svn clean with 1.5 client upgraded my workfolder. Cannot use svn integration from intellij anymore. #

Twitter Updates for 2008-07-03

  • not happy. Doing an svn clean with 1.5 client upgraded my workfolder. Cannot use svn integration from intellij anymore. #

On 2008-07-01

  • solved out of memory problems: just increase the maximum heapsize to 2gig #

Twitter Updates for 2008-07-01

  • solved out of memory problems: just increase the maximum heapsize to 2gig #