<?xml version="1.0" encoding="iso-8859-15"?>

<rss version="2.0" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>newton.gra2.com</title>
<link>http://www.gra2.com</link>
<description>Blog about technology and opinion by Daniel Alvarez.</description>
<managingEditor>root@gra2.com</managingEditor>
<webMaster>root@gra2.com</webMaster>
<copyright>Copyright 2008 newton.gra2.com</copyright>
<generator>GeekLog</generator>
<pubDate>Tue, 29 Apr 2008 15:32:15 +0200</pubDate>
<language>en_US</language>
<item>
<title>Merge a branch with the trunk in Subversion</title>
<link>http://www.gra2.com/article.php/merge-branch-trunk-in-subversion</link>
<guid isPermaLink="true">http://www.gra2.com/article.php/merge-branch-trunk-in-subversion</guid>
<pubDate>Tue, 29 Apr 2008 15:04:17 +0200</pubDate>
<comments>http://www.gra2.com/article.php/merge-branch-trunk-in-subversion#comments</comments>
<dc:subject>Programming</dc:subject>
<description>I restart my blog posting activity by sharing with you a little cookbook that may be useful if you use Subversion to manage your source code repository.&lt;br /&gt;&lt;br /&gt;If you are using Subversion, you most likely have already created (or thinking of creating) branches to manage different versions of your source code.&lt;br /&gt;&lt;br /&gt;When the time comes to merge my changes between branches or a branch and the trunk, I always forget the syntax, so here's a small step by step merge execution.&lt;br /&gt;&lt;br /&gt;I am assuming you have checked out both the branch and trunk from your subversion repository. If you haven't done so, you can easily checkout with:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt;svn co &amp;lt;repository&amp;gt;&lt;/div&gt;&lt;br /&gt;First of all, go to the branch main directory, and execute the following:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt;svn log --stop-on-copy&lt;/div&gt;&lt;br /&gt;The last entry is the version number corresponding to the creation of the branch, and looks something like the following:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt;r2887 | daniel | 2008-03-25 12:20:52 +0100 (Tue, 25 Mar 2008) | 1 line&lt;br /&gt;Creation of new branch for version 1.6.------------------------------------------------------------------&lt;/div&gt;&lt;br /&gt;So, we have found out that the version is 2887. Now, change directory to the trunk, and execute the following command:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt;svn up&lt;/div&gt;&lt;br /&gt;The output of this command should be something like:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt;At revision 3117.&lt;/div&gt;&lt;br /&gt;Basically, that means that we have to merge the changes from revision 2887 to 3117, using the following command:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt;svn merge -r2887:3117 https://&amp;lt;repository&amp;gt;/branches/&amp;lt;version&amp;gt;&lt;/div&gt;&lt;br /&gt;Now, you should check the changes performed to your local copy, and resolve any change conflicts that may appear.&lt;br /&gt;&lt;br /&gt;Once you have verified that the changes are correct, you can check in with the usual svn ci.</description>
<trackback:ping>http://www.gra2.com/trackback.php/merge-branch-trunk-in-subversion</trackback:ping>
</item>
<item>
<title>MacBook Air: The ultralight laptop from Apple</title>
<link>http://www.gra2.com/article.php/macbook-air-ultralight-laptop-from-apple</link>
<guid isPermaLink="true">http://www.gra2.com/article.php/macbook-air-ultralight-laptop-from-apple</guid>
<pubDate>Wed, 16 Jan 2008 18:03:14 +0100</pubDate>
<comments>http://www.gra2.com/article.php/macbook-air-ultralight-laptop-from-apple#comments</comments>
<dc:subject>Apple / MacOSX</dc:subject>
<description>Yesterday, &lt;a href=&quot;http://www.tuaw.com/2008/01/15/the-macworld-2008-keynote-liveblog/&quot;&gt;Steve Jobs unveiled&lt;/a&gt; the new &lt;a href=&quot;http://www.apple.com/macbookair/&quot;&gt;MacBook Air&lt;/a&gt;, as I'm sure you all know, following a week of rumors that this time were true, even having a photoshopped picture of the Air surprisingly similar to the end product. Apart from that, a new Apple TV with updated HDTV support has been launched, and an Airport Extreme with a 500GB or 1TB &amp;quot;server grade hard disk drive&amp;quot; on it (think of wireless Time Machine), called &lt;a href=&quot;http://www.apple.com/timecapsule/specs.html&quot;&gt;Time Capsule&lt;/a&gt; (I love the name!).&lt;br /&gt;&lt;br /&gt;So, the MacBook Air. The machine is less than 2cm thick (0.4 cm in its thinnest side, and 1.94cm in the thickest), and weights about 1.3kg.&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;img width=&quot;440&quot; height=&quot;163&quot; src=&quot;http://www.gra2.com/images/library/Image/macbook-air-keynote-1-15-08.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Among the things I also like is the CPU (a standard Core 2 Duo 1.6 or 1.8GHz), which apparently had to be reduced 60% in size compared to the Core 2 Duo that other MacBooks have, and that Apple reportedly persuaded Intel to build it for them.&lt;br /&gt;&lt;br /&gt;The standard (non expandable) RAM memory is also enough (2GB), and the battery life (apparently having wireless on) is a whopping 5 hours.&lt;br /&gt;&lt;br /&gt;As for the rest of the features, it is pretty much a small MacBook Pro (iSight, Bluetooth, Backlit keyboard, Micro-DVI output).&lt;br /&gt;&lt;br /&gt;Another great feature is the inclusion of an iPhone-like, bigger than usual trackpad. It allows you to scroll, zoom, pinch, rotate... the whole deal.&lt;br /&gt;&lt;br /&gt;It only has one USB and no Optical Drive, though, which I find completely understandable just by looking at its size. And I don't miss the Optical Drive, specially in such a small form factor laptop.&lt;br /&gt;&lt;br /&gt;No Ethernet adaptor either, but again, I understand as this is a travel laptop, the Air is supposed to work with AirPort, and leave the cables behind.&lt;br /&gt;&lt;br /&gt;Apple has come up with an already well known but improved feature to resolve the lack of a SuperDrive. All you have to do is enable CD/DVD sharing on a computer with one (apparently you have to install additional software if it's a PC) and it will automagically appear on Finder, so you can install all the software you need (it even works if you want to reinstall Leopard, for instance).&lt;br /&gt;&lt;br /&gt;As for the things I like less are, for instance, the size of the hard drive (80GB), and the price of the super-fast 64GB SSD optional disk (about EUR 900). The battery is sealed, as in the iPhone, so you can't get a replacement and change it yourself if you want. &lt;br /&gt;&lt;br /&gt;In a few words, this is a travel laptop, it's great to carry it around, has good battery life and you can work exactly the same as in a MacBook Pro. I'm already picturing myself working on it in an Airport Lounge. &lt;br /&gt;&lt;br /&gt;Just so you know, I'm getting one already, so I'll let you know how it performs.</description>
<trackback:ping>http://www.gra2.com/trackback.php/macbook-air-ultralight-laptop-from-apple</trackback:ping>
</item>
<item>
<title>Hallo aus Zürich</title>
<link>http://www.gra2.com/article.php/hallo-aus-zuerich</link>
<guid isPermaLink="true">http://www.gra2.com/article.php/hallo-aus-zuerich</guid>
<pubDate>Tue, 04 Dec 2007 18:06:41 +0100</pubDate>
<comments>http://www.gra2.com/article.php/hallo-aus-zuerich#comments</comments>
<dc:subject>Personal</dc:subject>
<description>For those of you who don't know where I am, and wondering why the hell I am and why aren't your e-mails answered as soon as usual, here it is: I have recently moved to Z&amp;uuml;rich, and my Internet connection is a bit &amp;quot;unstable&amp;quot;.&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;img width=&quot;500&quot; height=&quot;375&quot; src=&quot;http://www.gra2.com/images/library/Image/snowy-zuri.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;While waiting for Cablecom to deliver my cablemodem, I usually go to a nearby Starbucks and drink a Green Tea while enjoying the 30 minute free Internet. Also, I have discovered that the connections that are already active do not get disconnected after those 30 minutes, so one can open a SSH tunnel and bypass that limit - but I'm not suggesting anything at all ;-)</description>
<trackback:ping>http://www.gra2.com/trackback.php/hallo-aus-zuerich</trackback:ping>
</item>
<item>
<title>My Review of Leopard</title>
<link>http://www.gra2.com/article.php/my-review-of-leopard</link>
<guid isPermaLink="true">http://www.gra2.com/article.php/my-review-of-leopard</guid>
<pubDate>Tue, 06 Nov 2007 17:33:24 +0100</pubDate>
<comments>http://www.gra2.com/article.php/my-review-of-leopard#comments</comments>
<dc:subject>Apple / MacOSX</dc:subject>
<description>I have been using Leopard, Apple's last &lt;em&gt;&amp;uuml;berfeline&lt;/em&gt;, for more than a week now. It is without any doubt, the best operating system I have ever used.&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;img src=&quot;http://www.gra2.com/images/library/Image/leopard.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Leopard is the natural successor to Tiger, which basically improves its older brother and adds some other very interesting features.&lt;br /&gt;&lt;br /&gt;I recently bought an iMac, so I got it almost free (~EUR 9). The only bad thing is that it is only an update DVD (i.e. you need Tiger to install it), and that it comes without the fancy retail box. Apart from that, it's the real thing. If you have bought an Apple computer after October 1st, you are entitled to your almost free copy of Leopard. Check the &lt;a href=&quot;http://www.apple.com/macosx/uptodate/&quot;&gt;Up-to-Date site&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Most of the Apple-made applications seem to run faster (particularly Safari, iTunes and iPhoto). &lt;br /&gt;&lt;br /&gt;&lt;strong&gt; Time Machine&lt;/strong&gt; is astonishing. As easy as 1-2-3.&lt;br /&gt;&lt;br /&gt;Once you connect a Firewire or USB disk to the Mac, a menu automatically pops up asking you whether you want to use the disk as the Time Machine Backup Disk. If you answer affirmatively, an initial copy starts, which in my case, took less than an hour.&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;img width=&quot;399&quot; height=&quot;90&quot; src=&quot;http://www.gra2.com/images/library/Image/timemachine.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The great thing is that Time Machine doesn't require the disk to be dedicated to it. You still can use it to store other files. Time Machine just creates a folder called Backups.backupdb, where you can browse through the snapshots, stored in folders identified by date and time of backup.&lt;br /&gt;&lt;br /&gt;By default, Time Machine backups the incremental changes on your disk in one hour intervals. &lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;img src=&quot;http://www.gra2.com/images/library/Image/timemachine2.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;When you click the Time Machine icon on the Dock, whether you have a Finder window open, iTunes, iPhoto, Mail, or any other supported application, the already well known space animation starts and lets you restore previously deleted files. &lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;img src=&quot;http://www.gra2.com/images/library/Image/timemachine3.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Spaces&lt;/strong&gt; is VirtueDesktop replacement, only it works better and is perfectly integrated.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Terminal&lt;/strong&gt; has tabs now, and several other aesthetic changes. I was using &lt;a href=&quot;http://iterm.sourceforge.net&quot;&gt;iTerm&lt;/a&gt; on Tiger, and trashed it almost instantly after seeing Terminal. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;QuickLook&lt;/strong&gt; allows you to preview almost any type of file without opening the actual application. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Mail&lt;/strong&gt; lets you write Notes and To-Do's. Unfortunately, it doesn't currently sync with the iPhone.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;iChat&lt;/strong&gt; allows desktop sharing, document sharing, video sharing. And you can be in the Tour Eiffel for free. Really cool.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Finder&lt;/strong&gt; has now CoverFlow. I personally don't use it, as I think it's easier to browse through files shown as icons, but may be useful for somebody who wants to see previews of the files of a folder at a glance.&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;img src=&quot;http://www.gra2.com/images/library/Image/leopard-coverflow.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Some other extra details:&lt;br /&gt;- &lt;strong&gt;iCal&lt;/strong&gt;'s icon on the Dock now displays the current date, and not a static icon as it did on Tiger. Nice detail.&lt;br /&gt;- &lt;strong&gt;Dictionary&lt;/strong&gt; now also searches on the Wikipedia.&lt;br /&gt;- &lt;strong&gt;Spotlight&lt;/strong&gt; returns dictionary entries as well.&lt;br /&gt;- &lt;strong&gt;Preview&lt;/strong&gt; now allows you to resize images.&lt;br /&gt;&lt;br /&gt;The only issue I've had so far is that MySQL ceases working, a recognised &lt;a href=&quot;http://bugs.mysql.com/bug.php?id=32019&quot;&gt;MySQL bug&lt;/a&gt;. Apparently, the update to Leopard messes up the mysql directory permissions. It can be fixed by manually chown(ing) the mysql directory:&lt;br /&gt;&lt;strong&gt; chown -R mysql /usr/local/mysql-5.0.45-osx10.4-i686/&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;But the PreferencePane is definitely broken. You will have to start MySQL running&lt;strong&gt; /usr/local/mysql/bin/mysqld_safe &amp;amp;&lt;/strong&gt; from the Terminal.</description>
<trackback:ping>http://www.gra2.com/trackback.php/my-review-of-leopard</trackback:ping>
</item>
<item>
<title>in.solit.us meets iPhone</title>
<link>http://www.gra2.com/article.php/insolitus-meets-iphone</link>
<guid isPermaLink="true">http://www.gra2.com/article.php/insolitus-meets-iphone</guid>
<pubDate>Fri, 26 Oct 2007 16:54:40 +0200</pubDate>
<comments>http://www.gra2.com/article.php/insolitus-meets-iphone#comments</comments>
<dc:subject>in.solit.us</dc:subject>
<description>We have been developing a new web interface made for iPhone (which should also work for those of you who have another mobile internet device), &lt;a href=&quot;http://in.solit.us/iphone&quot;&gt;in.solit.us for iPhone&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The great thing is that you can have all your files on the go. Just upload your documents to in.solit.us and you will have them on your iPhone wherever you go!&lt;br /&gt;&lt;br /&gt;Once you log in the first time on your iPhone to in.solit.us, you will be presented with the following screen:&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;img width=&quot;250&quot; height=&quot;360&quot; src=&quot;http://www.gra2.com/images/library/Image/insolitus-iphone.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In your home page, in a similar way to the standard web interface, you will be able to see all the files and subfolders you have inside a folder, and navigate through them.&lt;br /&gt;&lt;br /&gt;Once you touch a file, it will open instantly in Safari, provided that it is a supported file. Safari currently supports PDFs, Images, Text files, Office files (Word, Excel and PowerPoint files), MP3, AAC, and some QuickTime video formats.&lt;br /&gt;&lt;br /&gt;Another great feature is live search. where you will be able to search within your files (public search is coming soon).&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;img width=&quot;250&quot; height=&quot;359&quot; src=&quot;http://www.gra2.com/images/library/Image/insolitus-iphone-search.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;left&quot;&gt;I hope you like it as much as I do. Please give it a try and post your suggestions either here on in the &lt;a href=&quot;http://in.solit.us/forums&quot;&gt;in.solit.us forums&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;</description>
<trackback:ping>http://www.gra2.com/trackback.php/insolitus-meets-iphone</trackback:ping>
</item>
<item>
<title>Setting up database replication on MySQL</title>
<link>http://www.gra2.com/article.php/setting-up-database-replication-on-mysql</link>
<guid isPermaLink="true">http://www.gra2.com/article.php/setting-up-database-replication-on-mysql</guid>
<pubDate>Tue, 02 Oct 2007 20:54:00 +0200</pubDate>
<comments>http://www.gra2.com/article.php/setting-up-database-replication-on-mysql#comments</comments>
<dc:subject>Manuals</dc:subject>
<description>Database replication is, as the americans would say, quite awesome. It provides, for one, an always fresh database backup. But most of the time you won't do it for backups. The greatest thing about database replication is that you can use it for load balancing. &lt;br /&gt;&lt;br /&gt;Just replicate the database onto another server, and you have two atabase servers for SELECTs and you can leave the master for INSERTs, DELETEs and UPDATEs. The only bad thing about this is that you will need different connections for read and write (&lt;a href=&quot;http://drnicwilliams.com/2007/04/12/magic-multi-connections-a-facility-in-rails-to-talk-to-more-than-one-database-at-a-time/&quot;&gt;nothing that Dr. Nic's magic can't resolve&lt;/a&gt;), and you must have a fast connection between the two servers or you may have records that don't show up instantly when you store them (that's bad for a web application).&lt;br /&gt;&lt;br /&gt;First of all, I'm supposing you already have a production database running in a server. If you start from scratch with several database servers, then it's much easier, as you don't have to dump/restore databases.&lt;br /&gt;&lt;br /&gt;Go to your master server (let's say her name is scherie), and edit &lt;strong&gt;/etc/mysql/my.cnf&lt;/strong&gt;:&lt;br /&gt;&lt;br /&gt;Make sure you have set server-id to 1:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt; server-id = 1 &lt;/div&gt;&lt;br /&gt;You need to uncomment the bind-address line, as we need port 3306 open for our slave:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt; #bind-address = 127.0.0.1 &lt;/div&gt;&lt;br /&gt;By default, Debian for instance, already saves the transaction log. Uncomment or add it if you don't have it:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt; log_bin&amp;nbsp; = /var/log/mysql/mysql-bin.log&lt;/div&gt;&lt;br /&gt;Add a line for the database that will be dumped to the binary log:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt;binlog-do-db=database_to_be_replicated&lt;/div&gt;&lt;br /&gt;You can now restart the database:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt; scherie:~# /etc/init.d/mysql restart&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Open a mysql client, and create a new user called replication_user (change this to whatever you want):&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt; scherie:~# mysql -u root -p&lt;br /&gt;&lt;br /&gt;mysql&amp;gt; grant replication slave on *.* to 'replication_user'@'%' identified by 'password';&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Now we have to lock temporarily the database while we proceed to dump it, so we have the correct binary log offset (Position).&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt; mysql&amp;gt; flush tables with read lock;&lt;br /&gt;Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt; mysql&amp;gt; show master status&amp;#092;G;&lt;br /&gt;*************************** 1. row ***************************&lt;br /&gt;File: mysql-bin.00002&lt;br /&gt;Position: 230&lt;br /&gt;Binlog_Do_DB: database_to_be_replicated&lt;br /&gt;Binlog_Ignore_DB: &lt;br /&gt;&lt;br /&gt;1 row in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;strong&gt;&lt;br /&gt;Don't close the mysql client&lt;/strong&gt;. Leave the terminal open, otherwise, the database will be unlocked. Write down the File and Position values, we will need them later. &lt;br /&gt;&lt;br /&gt;Dump the database (&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/en/load-data-from-master.html&quot;&gt;you could use load data from master&lt;/a&gt;, but it's deprecated and will be removed in the future).&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt; scherie:~# mysqldump -u root -p database_to_be_replicated &amp;gt; database_to_be_replicated.sql&lt;br /&gt;Enter password: &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Once dumped return to the open terminal, and unlock tables:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt; mysql&amp;gt; unlock tables;&lt;br /&gt;Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&amp;gt; quit;&lt;br /&gt;Bye&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;It would be a good idea to compress the database dump before transferring it:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt; scherie:~# bzip2 database_to_be_replicated.sql&lt;br /&gt;scherie:~# scp database_to_be_replicated.sql daniel@athena:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;You should also allow access from the slave to the master server, but block it otherwise (basic iptables rules):&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt; -A INPUT -s ip_of_slave_server -p tcp -m tcp --dport 3306 -j ACCEPT&lt;br /&gt;-A INPUT -p tcp -m tcp --dport 3306 -j REJECT --reject-with icmp-port-unreachable&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;You're done with the master configuration. Let's open a terminal to our slave server (let's say she is called athena):&lt;br /&gt;&lt;br /&gt;Check whether we have access to the master:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt; athena:~# mysql -u replication_user -p -h scherie&lt;br /&gt;Enter password: &lt;br /&gt;Welcome to the MySQL monitor.&amp;nbsp; Commands end with ; or g.&lt;br /&gt;Your MySQL connection id is 38&lt;br /&gt;Server version: 5.0.45-Debian_1-log Debian etch distribution&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;We can restore now the database dump from the master:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt; athena:~# bzip2 -d insolitus.sql.bz2 &lt;br /&gt;athena:~# mysql -u root -p insolitus &amp;lt; insolitus.sql &lt;br /&gt;Enter password: &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Add the following data to the slave's my.cnf, under the [mysqld] section:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt; server-id&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 2&lt;br /&gt;master_host&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = ip_of_master_server&lt;br /&gt;master_user&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = replication_user&lt;br /&gt;master_password&amp;nbsp;&amp;nbsp;&amp;nbsp; = password&lt;br /&gt;replicate_do_db&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = database_to_be_replicated&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Restart mysql:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt; athena:~# /etc/init.d/mysql restart&lt;br /&gt;Stopping MySQL database server: mysqld.&lt;br /&gt;Starting MySQL database server: mysqld.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Connect as root to our slave server:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt; athena:~# mysql -u root -p&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Stop the slave:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt; mysql&amp;gt; slave stop;&lt;br /&gt;Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Now, we need those File and Position parameters we got from the master, change the values on master_log_file and master_log_pos for those you wrote down previously:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt; mysql&amp;gt; change master to master_host='ip_of_master_server', master_user='replication_user', master_password='password',master_log_file='mysql-bin.000002', master_log_pos=230;&lt;br /&gt;Query OK, 0 rows affected (0.01 sec)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;We start the slave:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt; mysql&amp;gt; slave start;&lt;br /&gt;Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Now, if we issue a show slave status, you should see the following variables to 'Yes':&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt; mysql&amp;gt; show slave statusG;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Slave_IO_Running: Yes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Slave_SQL_Running: Yes&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;If you have Slave_IO_Running set to No, you haven't probably locked correctly the database prior to dumping it. You will have to repeat the dumping process locking correctly the database.&lt;br /&gt;&lt;br /&gt;If everything is correct, your database will be automatically replicated. Doing a simple show processlist; in either the master or the slave will show whether the communication is working.&lt;br /&gt;&lt;br /&gt;You can also take a look at the full guide to &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/en/replication.html&quot;&gt;replication at the MySQL official site&lt;/a&gt;.</description>
<trackback:ping>http://www.gra2.com/trackback.php/setting-up-database-replication-on-mysql</trackback:ping>
</item>
<item>
<title>The Computer Zeitgeist in the University</title>
<link>http://www.gra2.com/article.php/the-computer-zeitgeist-in-the-university</link>
<guid isPermaLink="true">http://www.gra2.com/article.php/the-computer-zeitgeist-in-the-university</guid>
<pubDate>Tue, 02 Oct 2007 15:22:02 +0200</pubDate>
<comments>http://www.gra2.com/article.php/the-computer-zeitgeist-in-the-university#comments</comments>
<dc:subject>Apple / MacOSX</dc:subject>
<description>Granted, this is a school of Journalism, the &lt;a href=&quot;http://www.molliesterling.com/blog/?p=218&quot;&gt;Missouri School of Journalism&lt;/a&gt; (&lt;a href=&quot;http://duggmirror.com/apple/Look_at_them_apples/&quot;&gt;mirror&lt;/a&gt;), to be exact. But it could also be a Design school, a Computer Science class, or a RailsConf ;)&lt;br /&gt;&lt;br /&gt;Simply amazing, try to find the PC (if you can).&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;a href=&quot;http://www.gra2.com/images/library/Image/9489b70ab55692ffcac3ec776aa50a1f_img_6672s.jpg&quot;&gt;&lt;img width=&quot;500&quot; height=&quot;333&quot; src=&quot;http://www.gra2.com/images/library/Image/9489b70ab55692ffcac3ec776aa50a1f_img_6672s.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;left&quot;&gt;Found on &lt;a href=&quot;http://fakesteve.blogspot.com/2007/10/check-this-out.html&quot;&gt;Fake Steve Jobs' blog&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</description>
<trackback:ping>http://www.gra2.com/trackback.php/the-computer-zeitgeist-in-the-university</trackback:ping>
</item>
<item>
<title>My thoughts on Apple</title>
<link>http://www.gra2.com/article.php/my-thoughts-on-apple</link>
<guid isPermaLink="true">http://www.gra2.com/article.php/my-thoughts-on-apple</guid>
<pubDate>Sat, 29 Sep 2007 16:44:56 +0200</pubDate>
<comments>http://www.gra2.com/article.php/my-thoughts-on-apple#comments</comments>
<dc:subject>Apple / MacOSX</dc:subject>
<description>I am a long time Mac user, and general Apple fan. I am even a shareholder which had his AAPL stock value more than tripled in the past two years. &lt;br /&gt;&lt;br /&gt;So you can safely assume I like Apple. But lately, Apple has done several things I completely disapprove.&lt;br /&gt;&lt;br /&gt;First of all, the US-only iPhone launch. I still can't possibly think of a reason why Steve Jobs (or the rest of the company) decided to sell the iPhone in just one country, and not everywhere (or at least Europe).&lt;br /&gt;&lt;br /&gt;We thought the decision for that was the subsequent launch of a 3G version of the iPhone for Europe, but now they will start selling the exact same phone, 4 months later, in November, in Germany and the UK.&lt;br /&gt;&lt;br /&gt;Needless to say, most of the people who really wanted an iPhone in Europe (including me) already have it. &lt;br /&gt;&lt;br /&gt;And guess what, Apple? I would have paid &amp;euro;800, for instance (yes, that's &amp;#36;1100) for an unlocked phone if you had sold it. Instead, we were forced to buy it via an US friend, a trip to NYC, or even eBay. And your revenue for that process was nil.&lt;br /&gt;&lt;br /&gt;Luckily, in September, after a struggle between iPhoneSimFree and the iPhone Dev Team, a software unlock was developed, and we finally updated our nice widescreen iPod to an iPhone. &lt;br /&gt;&lt;br /&gt;And this week, after a previous warning, a new firmware update was released that not only removed the possibility of unlocking the device, but also impeded the installation of third party applications.&lt;br /&gt;&lt;br /&gt;If that wasn't enough, the iPhones that were once unlocked or somehow modified to allow the installation of applications &lt;a href=&quot;http://www.nytimes.com/2007/09/29/technology/29iphone.html?_r=2&amp;amp;ref=technology&amp;amp;oref=slogin&amp;amp;oref=slogin&quot;&gt;have been bricked&lt;/a&gt;, and &lt;a href=&quot;http://gizmodo.com/gadgets/iphone/bring-a-bricked-iphone-to-the-genius-bar-and-talk-to-the-hand-video-304999.php&quot;&gt;Apple is refusing to give support to these &amp;quot;modified&amp;quot; iPhones&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It seems we will be staying with the 1.0.2 firmware for a very long time, even if we don't get the iTunes WiFi Store. &lt;br /&gt;&lt;br /&gt;Maybe it's time to stop buying music in the iTunes Store and spend our money in the new &lt;a href=&quot;http://www.amazon.com/b?ie=UTF8&amp;amp;node=163856011&quot;&gt;Amazonmp3 Store&lt;/a&gt;, where music is DRM-free, some songs even cheaper, and still compatible with iTunes.</description>
<trackback:ping>http://www.gra2.com/trackback.php/my-thoughts-on-apple</trackback:ping>
</item>
<item>
<title>Unlocking an iPhone</title>
<link>http://www.gra2.com/article.php/unlocking-an-iphone</link>
<guid isPermaLink="true">http://www.gra2.com/article.php/unlocking-an-iphone</guid>
<pubDate>Tue, 25 Sep 2007 21:49:24 +0200</pubDate>
<comments>http://www.gra2.com/article.php/unlocking-an-iphone#comments</comments>
<dc:subject>Apple / MacOSX</dc:subject>
<description>So you have decided to buy an iPhone, even when &lt;a href=&quot;http://www.macnn.com/articles/07/09/24/unlock.may.void.warranty/&quot;&gt;Steve said that may brick unlocked iPhones&lt;/a&gt; on the next software update. Let's unlock it then, shall we?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update&lt;/strong&gt;: Do NOT update to the 1.1.1 firmware in iTunes if you have previously unlocked your phone or want to unlock your phone. It will brick your iPhone. Stay with 1.0.2. Do NOT try to unlock if you already have 1.1.1. It won't work.&lt;br /&gt;&lt;br /&gt;Once you connect your iPhone for the first time to your Mac, iTunes will open, asking you to activate it using AT&amp;amp;T. Close iTunes.&lt;br /&gt;&lt;br /&gt;You should probably now activate it to play a bit with it before proceeding to unlock it. You can use GUI software such as &lt;a href=&quot;http://iphone.fiveforty.net/wiki/index.php/IActivator&quot;&gt;iActivator&lt;/a&gt;, &lt;a href=&quot;http://code.google.com/p/independence/&quot;&gt;iNdependence&lt;/a&gt;, or use the easy to use &lt;a href=&quot;http://in.solit.us/archives/download/71001&quot;&gt;command line activator&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;./tool --activate a.plist&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;If any of these programs asks you for the iPhone's firmware, you can download it from Apple: &lt;a href=&quot;http://content.info.apple.com/iPhone/061-3823.20070821.vormd/iPhone1,1_1.0.2_1C28_Restore.ipsw&quot;&gt;Firmware 1.0.2&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Once you have your iPhone activated and you've played with it for a while, you can use a needle to open the SIM tray and change the AT&amp;amp;T SIM for your shiny european one.&lt;br /&gt;&lt;br /&gt;Before you start with the unlock process, it's convenient to have the 1.0.2 firmware installed. You can check it on your iPhone in &lt;strong&gt;Settings -&amp;gt; General -&amp;gt; About&lt;/strong&gt;. If you have recently bought it, you probably have it already. If not, plug it into iTunes, and let it update (you may have to reactivate again after the update).&lt;br /&gt;&lt;br /&gt;Basically, you just have to upload an application to your iPhone to unlock it. But you need to enable read/write access to your iPhone's filesystem and install SSH. That's what they call &amp;quot;jailbreak&amp;quot;(ing) it.&lt;br /&gt;&lt;br /&gt;You can use several applications to do this procedure, but the one I like most is &lt;a href=&quot;http://iphone.nullriver.com/beta/&quot;&gt;AppTappInstaller&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Download it, execute it, wait for a few minutes, and your iPhone is jailbreaked. You will notice that a new icon named Installer has appeared in your iPhone.&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;img width=&quot;301&quot; height=&quot;451&quot; alt=&quot;&quot; src=&quot;http://www.gra2.com/images/library/Image/iphone-installer.png&quot; /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Now it is a good moment to temporarily disable the Auto Lock feature, as it will prevent the applications from installing properly. You can enable it again afterwards (&lt;strong&gt;Settings -&amp;gt; General -&amp;gt; Auto-Lock&lt;/strong&gt;, set to Never).&lt;br /&gt;&lt;br /&gt;Open Installer, and first of all, install the package named &lt;strong&gt;Community Sources&lt;/strong&gt;. This will allow to install, among other things, SSH.&lt;br /&gt;&lt;br /&gt;Once you have enabled the Community Sources, scroll down the list, and install &lt;strong&gt;BSD Subsystem&lt;/strong&gt; and &lt;strong&gt;OpenSSH&lt;/strong&gt;. There are some other interesting applications, such as MobileTerminal, and SummerBoard, an application that allows you to reorganise the icons of the main screen, use themes, et cetera.&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;img width=&quot;320&quot; height=&quot;480&quot; src=&quot;http://www.gra2.com/images/library/Image/iphone-installer-ui.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;You need to know your iPhone's IP address now. If you don't know it, you can see it going to &lt;strong&gt;Settings -&amp;gt; Wi-Fi&lt;/strong&gt;, and then clicking on the arrow symbol near to your wireless network.&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;img width=&quot;320&quot; height=&quot;480&quot; alt=&quot;&quot; src=&quot;http://www.gra2.com/images/library/Image/iphone-wireless.png&quot; /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Once you know your IP address, proceed to download the anySIM application. You can download it from any of the links that appear on the &lt;a href=&quot;http://www.hackint0sh.org/forum/showthread.php?t=6827&quot;&gt;hackintosh forum&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Uncompress the zip file, and open a terminal. Navigate to the anySIM folder and issue the following command (substitute iphone_ip_address for your iPhone's IP address). You will be prompted for a password (it's &lt;strong&gt;dottie&lt;/strong&gt;). &lt;br /&gt;&lt;br /&gt;You should either uninstall SSH after this process or change both root and mobile passwords. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;scp -r anysim.app root@iphone_ip_address:/Applications/&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;You should have now an additional icon on your iPhone named anySIM. If it doesn't appear, restart the iPhone holding both the lock and home buttons. &lt;br /&gt;&lt;br /&gt;The application couldn't be simpler. Click on it, and slide to unlock. It will take about 5-10 minutes so leave the iPhone on the desk and stay calm. It won't break.&lt;br /&gt;&lt;br /&gt;Once it is unlocked, you just have to activate it. You can do so using &lt;a href=&quot;http://code.google.com/p/independence/&quot;&gt;iNdependence&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;img width=&quot;506&quot; height=&quot;296&quot; alt=&quot;&quot; src=&quot;http://www.gra2.com/images/library/Image/iphone-independence.png&quot; /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Please note that when you activate it, you will jail it again, so if you want to jailbreak it again, you will have to use the Jailbreak tab on iNdependence.</description>
<trackback:ping>http://www.gra2.com/trackback.php/unlocking-an-iphone</trackback:ping>
</item>
<item>
<title>RailsConf Europe 2007: Day Three</title>
<link>http://www.gra2.com/article.php/railsconf-europe-2007-day-three</link>
<guid isPermaLink="true">http://www.gra2.com/article.php/railsconf-europe-2007-day-three</guid>
<pubDate>Thu, 20 Sep 2007 23:39:03 +0200</pubDate>
<comments>http://www.gra2.com/article.php/railsconf-europe-2007-day-three#comments</comments>
<dc:subject>Ruby on Rails</dc:subject>
<description>The third and last day of the RailsConf Europe started with a wonderfully well presented keynote by Cyndi Mitchell of &lt;a href=&quot;http://www.thoughtworks.com&quot;&gt;ThoughtWorks&lt;/a&gt;, called Bring Ruby to the Enterprise, Not the Other Way 'Round, of which I unfortunately can't find an online version. &lt;br /&gt;&lt;br /&gt;The second keynote of the day was about Best Practices, by Marcel Molina and Michael Koziarski, which gave some interesting insights, such as using explicit (and long) names for actions and having small controllers (not more of 5 actions per controller and 5 lines per action), you should use the models for that.  &lt;br /&gt;&lt;br /&gt;After the break, I assisted the Building Rich Internet Applications with Flex and Ruby on Rails by Simeon Bateman, where he presented the possibilities of using Flex to create rich internet applications, supported by Mac, Windows, and (soon) Linux.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt;&lt;br /&gt;Building applications with Flex&lt;br /&gt;&lt;br /&gt;AMV2 open sourced (Tamarin project in Mozilla)&lt;br /&gt;&lt;br /&gt;HTTPService -&amp;gt; connect RESTful interfaces in Rails&lt;br /&gt;&lt;br /&gt;WebORB -&amp;gt; plugin for Rails (themidnightcoders.com)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;RubyAMF &lt;br /&gt;&lt;br /&gt;flex.org/ruby&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The next session, Ruby on Rails Security, by Heiko Webers, while a bit basic at the beginning, gave some interesting insights as well. Some unedited notes follow:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(132, 153, 186); background-color: rgb(225, 240, 218); padding-left: 10px; margin-left: 20px; margin-right: 20px;&quot;&gt;&lt;br /&gt;&amp;quot;An insecure server is like a tunnel into Fort Knox&amp;quot;&lt;br /&gt;&lt;br /&gt;Apache:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - unprivileged user&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - deactivate modules&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - uploads out of DocumentRoot&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - disallow access, allow in particular&lt;br /&gt;&lt;br /&gt;MySQL:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - unpriv. user&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - bind localhost whenever possible&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - independent users for databases&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;Profiling:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - comments!&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - leftover files&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - debug actions&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - robots.txt&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Google Hacking Database ???&lt;br /&gt;&lt;br /&gt;Interpreter Injection&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - OWASP Top Ten&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - User Agent Injection&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - XSS, Browser Injection&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - xssed.com&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;Cookies&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - session_id after auth&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - stolen!&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - sniffing, read document.cookie using code injection&lt;br /&gt;&lt;br /&gt;UA Injection Countermeasures&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Markdown (for mark-up)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - RedCloth (some injection still possible)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Full HTML&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - blacklist filter&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - whitelist filter: WhiteListHelper plugin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - No HTML at all&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - no strip_tags (you can go around and still inject some code)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - use sanitize, SafeERB plugin&lt;br /&gt;&lt;br /&gt;SQL Injection&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Unauthorized reading (without using [] in finds)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Needs ', &amp;quot; or nil + line break&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Conditions hash&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;Interpreter Injection&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - ActiveForm plugin: i.e. validates_length_of, validates_format_of for regexp&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Mass Assignment (modify form names when using arrays)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - Assign individually, use attr_accessible&lt;br /&gt;&lt;br /&gt;Ajax&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Output filters, sanitize!&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Finally, I assisted to the MindMeister Development Study Case by Michael Hollauf. &lt;a href=&quot;http://www.mindmeister.com/&quot;&gt;MindMeister&lt;/a&gt; is a collaborative mind map web application, wonderfully designed and with a lot of potential. He presented us with mostly the business part of the application, usability, and several other aspects of marketing a start-up.&lt;br /&gt;&lt;br /&gt;We were also informed that the RailsConf Europe 2008 will be in Berlin as well. All I can say is I expect to be there next year (and maybe Portland, too), and that I'll be writing a post recapping my impressions on this year's RailsConf Europe, which has been very interesting, and of course, a lot of fun.&lt;br /&gt;</description>
<trackback:ping>http://www.gra2.com/trackback.php/railsconf-europe-2007-day-three</trackback:ping>
</item>
</channel>
</rss>
