<?xml version="1.0" encoding="utf-8" ?>
<rss version="1.0">
    <channel>
        <title>Revolution blahg</title>
        <link>http://mapleoin.bluepink.ro/</link>
        <description>mapleoin's rambling blahg</description>
        <language>en</language>
        <pubDate>Tue, 27 Jul 2010 12:55:10 +0300</pubDate>
        <generator>pyBlee!</generator>
        <item>
            <title>The late Fedora Summer coder</title>
            <link>http://mapleoin.bluepink.ro/perma/the-late-fedora-summer-coder</link>
            <author>mapleoin@bluepink.ro (Oin Maple)</author>
            <description>  &lt;p&gt;I started my &lt;a href="https://fedoraproject.org/wiki/Summer_Coding_2010"&gt;Fedora Summer Coding&lt;/a&gt; last week. Although most people started almost two months ago, I chose (and was allowed to &amp;#8211; Yay, &lt;acronym title="Fedora Summer Coding"&gt;FSC&lt;/acronym&gt;!) a different schedule because I just finished college last week.&lt;/p&gt;
&lt;p&gt;This summer I&amp;#8217;ll be working on a new project for Fedora &amp;#8211; &lt;a href="https://fedoraproject.org/wiki/Category:Copr"&gt;Copr&lt;/a&gt;. Fedora Copr will allow any Fedorian to have their own package repository with packages built and hosted by &lt;a href="https://fedoraproject.org/wiki/Infrastructure"&gt;Fedora&amp;#8217;s Infrastructure&lt;/a&gt;. My mentor this summer will be &lt;a href="http://anonbadger.wordpress.com/"&gt;Toshio&lt;/a&gt;, I&amp;#8217;ve always enjoyed working with him and this summer will be no different. &lt;a href="https://fedoraproject.org/wiki/Summer_Coding_2010_proposal_-_Copr_TG_app"&gt;Here&lt;/a&gt; is my actual &lt;acronym title="Fedora Summer Coding"&gt;FSC&lt;/acronym&gt; proposal. Although the things written in that proposal are turning out to be a bit inaccurate, it&amp;#8217;s still a good bird&amp;#8217;s eye view of what I&amp;#8217;m going to do this summer. &lt;/p&gt;
&lt;p&gt;So about the first week. Things started really slow. I did a lot of orientation, certainly more than I thought I would. I hadn&amp;#8217;t used TurboGears2 before, though I had worked with TurboGears 1.x on &lt;a href="https://admin.fedoraproject.org/pkgdb"&gt;Fedora&amp;#8217;s pkgdb&lt;/a&gt;. When I started out I had only a TG2 automatically generated skeleton app &amp;#8211; well it&amp;#8217;s mostly the same now, though at least I now know a lot more about what&amp;#8217;s in there. The fact that I had to start it up myself meant I had to learn a lot of things about TG2 that I would&amp;#8217;ve normally just copied from other parts of a fully-functional project. And that was a great experience. In a way it&amp;#8217;s fulfilling to be able to &lt;em&gt;pioneer&lt;/em&gt; things in this way ;). I&amp;#8217;m trying to only ask my mentor questions about designing the actual app and solve my &amp;#8220;How do I &amp;#8230; in TurboGears/Python?&amp;#8221; questions elsewhere. My mentor has always given me a lot of independence when working on things and that feels really good, though at times I feel inexperienced. There&amp;#8217;s the thought that the project I&amp;#8217;m working on will be used by a lot of technical users and I&amp;#8217;m really not sure what my decisions&amp;#8217; impact will be on the whole project.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m mostly on time with my &lt;a href="https://fedoraproject.org/wiki/Summer_Coding_2010_proposal_-_Copr_TG_app#Timeline"&gt;mock-up schedule&lt;/a&gt; because I had set the first week for orienteering. I also wrote the DB schema for Coprs, though that was on the second week. That doesn&amp;#8217;t mean I&amp;#8217;m ahead of schedule however, because I&amp;#8217;ll probably have a lot to work on the Copr controllers, and a lot of documenting and designing.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m proud that I setup testing after a day of wading through the scattered documentation of TurboGears2 testing. There&amp;#8217;s mostly no documentation on testing on the &lt;a href="http://www.turbogears.org/2.0/docs/toc.html"&gt;TurboGears2.0 docs website&lt;/a&gt;. So I went to the &lt;a href="http://somethingaboutorange.com/mrl/projects/nose/0.11.2/"&gt;python nose&lt;/a&gt; webpage. But they don&amp;#8217;t have any info on the TurboGears2 web helpers which I needed to use. So I went to &lt;a href="http://pylonsbook.com/en/1.1/testing.html"&gt;pylonshq docs about testing&lt;/a&gt;, but they use a slightly different syntax because they&amp;#8217;re using paste.fixture. I finally found the &lt;a href="http://turbogears.org/2.1/docs/main/Testing/index.html"&gt;TurboGears2.1 testing docs&lt;/a&gt; which was what I really needed. It turns out that TurboGears 2.x uses &lt;a href="http://pythonpaste.org/webtest/"&gt;WebTest&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So now I have testing. My project is not supposed to have any web interface at this point, so writing tests is the easiest way to prove that things are actually working.&lt;/p&gt;
&lt;p&gt;This next week I&amp;#8217;ll probably get some work done on Copr controllers. Implementing the ability to &lt;span class="caps"&gt;CRUD&lt;/span&gt; Coprs and Repos.&lt;/p&gt; </description>
            <pubDate>Sun, 25 Jul 2010 14:00 GMT</pubDate>
        </item>
        <item>
            <title>Cum să actualizezi metadatele yum în mod automat</title>
            <link>http://mapleoin.bluepink.ro/perma/actualizare-automata-metadata-yum</link>
            <author>mapleoin@bluepink.ro (Oin Maple)</author>
            <description>  &lt;p&gt;Unul dintre lucrurile care mă enervează cel mai tare ca utilizator desktop la yum e că de fiecare dată când vreau să caut sau să instalez un pachet, trebuie să aștept câteva secunde bune până își actualizează metadatele pentru toate depozitele active. Astăzi am avut timp să caut o metodă de a scăpa de neplăcerea asta și a fost destul de simplu de găsit.&lt;/p&gt;
&lt;p&gt;Rezolvarea nu este să dezactivăm complet actualizarea metadatelor, pentru că am putea încerca să instalăm pachete a căror dependințe au fost actualizate și a căror versiune exactă nu se mai găsește în depozit =&gt; &lt;em&gt;dependency hell&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Se pare că există un program &lt;em&gt;yum-updatesd&lt;/em&gt; (&lt;code&gt;su -c &amp;#34;yum install yum-updatesd&amp;#34;&lt;/code&gt;) care poate actualiza automat metadatele.&lt;/p&gt;
&lt;p&gt;După ce l-am instalat, putem modifica &lt;code&gt;/etc/yum/yum-updatesd.conf&lt;/code&gt; dacă vrem să facem lucruri dubioase, cum ar fi să îl lăsăm să instaleze actualizări automat &amp;#8212; pentru că trăim într-o utopie în care actualizările nu strică niciodată nimic &amp;#8212; sau, mai puțin dubios, doar să le descarce.&lt;/p&gt;
&lt;p&gt;Acum că am terminat cu setările, putem porni serviciul cu:&lt;/p&gt;
&lt;div class="Bash"&gt;&lt;div class="highlight"&gt;&lt;pre&gt; &lt;span class="nv"&gt;$ &lt;/span&gt;su -c &lt;span class="s2"&gt;&amp;quot;service yum-updatesd start&amp;quot;&lt;/span&gt;
 &lt;span class="nv"&gt;$ &lt;/span&gt;cacamaca
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Și îl putem pune să se pornească automat la fiecare boot:&lt;/p&gt;
&lt;div class="Bash"&gt;&lt;div class="highlight"&gt;&lt;pre&gt; &lt;span class="nv"&gt;$ &lt;/span&gt;su -c &lt;span class="s2"&gt;&amp;quot;chkconfig yum-updatesd on&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt; </description>
            <pubDate>Thu, 18 Mar 2010 14:00 GMT</pubDate>
        </item>
        <item>
            <title>Cum să peticești un rpm (patch rpm)</title>
            <link>http://mapleoin.bluepink.ro/perma/cum-sa-peticesti-un-rpm</link>
            <author>mapleoin@bluepink.ro (Oin Maple)</author>
            <description>  &lt;p&gt;O să vă descriu cum am aplicat un petec pentru unul dintre pachetele pentru care sunt responsabil la fedora: calibre, în timp ce așteptam să-mi vină pizza http://www.fedoraproject.ro/am-lansat-fedora-12-avans . Petecul este răspunsul la un bug report: https://bugzilla.redhat.com/show_bug.cgi?id=537525 . Calibre verifică de fiecare dată când este pornit dacă pe situl oficial a apărut o nouă versiune și dacă a apărut, îl anunță pe utilizator printr-un pop-up că trebuie să actualizeze aplicația. Cum fedora are propriul management al pachetelor și deci și al actualizărilor, este recomandat ca pachetele noi să fie instalate folosind yum; deci mesajul trebuie eliminat.&lt;/p&gt;
&lt;p&gt;Mai întâi trebuie să descărcăm sursele actuale ale rpm-ului (în momentul în care am scris patchul, în repo-uri cea mai recentă versiune era 0.6.21-1, acum ar trebui să fie una cu patchul deja aplicat):&lt;/p&gt;
&lt;pre&gt;
  $ yumdownloader --source calibre
&lt;/pre&gt;
&lt;p&gt;și să le despachetăm:&lt;/p&gt;
&lt;div class="Bash"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;  &lt;span class="nv"&gt;$ &lt;/span&gt;rpm -ivh calibre-0.6.21-1.fc12.src.rpm
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Comanda va crea un nou director rpmbuild, cu subdirectoarele &lt;span class="caps"&gt;SPECS&lt;/span&gt; și &lt;span class="caps"&gt;SOURCES&lt;/span&gt;. În &lt;span class="caps"&gt;SPECS&lt;/span&gt; avem fișierul care ține toate informațiile despre cum se va construi pachetul: calibre.spec, iar în &lt;span class="caps"&gt;SOURCES&lt;/span&gt; avem sursele pachetului și toate patchurile pe care le-am creat până acum:&lt;/p&gt;
&lt;pre&gt;
  $ tree rpmbuild/
  rpmbuild/
  |-- SOURCES
  |   |-- calibre-0.6.21-nofonts.tar.gz
  |   |-- calibre-cssprofiles.patch
  |   |-- calibre-manpages.patch
  |   `-- generate-tarball.sh
  `-- SPECS
  `-- calibre.spec
&lt;/pre&gt;
&lt;p&gt;Mai avem de făcut un pas, ca să putem umbla prin sursele programului. Trebuie să dezarhivăm arhiva calibre-0.6.21-nofonts.tar.gz. Următoarea comandă dezarhivează și aplică patchurile pe care le avem deja:&lt;/p&gt;
&lt;pre&gt;
  $ cd rpmbuild/SPECS
  $ rpmbuild -bp calibre.spec
&lt;/pre&gt;
&lt;p&gt;Au apărut mai multe directoare după comanda asta:&lt;/p&gt;
&lt;pre&gt;
  $ ls rpmbuild/
  BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS
&lt;/pre&gt;
&lt;p&gt;Cel care ne interesează este &lt;span class="caps"&gt;BUILD&lt;/span&gt;, în care au apărut sursele peticite ale programului.&lt;/p&gt;
&lt;p&gt;Atunci când e pornit, dacă există o versiune mai nouă, calibre va afișa următorul mesaj în fereastra pop-up:&lt;/p&gt;
&lt;p&gt;calibre has been updated to version 0.6.24. See the new features. Visit the download page?&lt;/p&gt;
&lt;p&gt;Ca să aflăm din ce fișier vine fereastra de pop-up putem să căutăm pur și simplu o parte din textul de mai sus în sursele calibre:&lt;/p&gt;
&lt;pre&gt;
  $ cd rpmbuild/BUILD/calibre/
  $ find .|xargs grep &amp;#34;has been updated&amp;#34;
&lt;/pre&gt;
&lt;p&gt;Dacă ignorăm fișierele de localizare, vom afla sursa pop-up-ului:&lt;/p&gt;
&lt;pre&gt;
  ./calibre/src/calibre/gui2/main.py:                    _(&amp;#39;%s has been updated to version %s. &amp;#39;
&lt;/pre&gt;
&lt;p&gt;Mergând în fișierul respectiv vedem că acel cod face parte dintr-o funcție numită update_found:&lt;/p&gt;
&lt;div class="Bash"&gt;&lt;div class="highlight"&gt;&lt;pre&gt; 
  def update_found&lt;span class="o"&gt;(&lt;/span&gt;self, version&lt;span class="o"&gt;)&lt;/span&gt;:
  &lt;span class="nv"&gt;os&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;windows&amp;#39;&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;iswindows &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;osx&amp;#39;&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;isosx &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;linux&amp;#39;&lt;/span&gt;
  &lt;span class="nv"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;http://%s.kovidgoyal.net/download_%s&amp;#39;&lt;/span&gt;%&lt;span class="o"&gt;(&lt;/span&gt;__appname__, os&lt;span class="o"&gt;)&lt;/span&gt;
  self.latest_version &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Ne interesează ca modificarea pe care o vom aduce să fie cât mai lizibilă pentru cei care vor modifica pachetul nostru mai târziu și să fie cât mai ușor de revenit la versiunea nemodificată. Dacă ne uităm mai atent în main, găsim următorul cod:&lt;/p&gt;
&lt;div class="Python"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;opts&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;no_update_check&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;update_checker&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CheckForUpdates&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="n"&gt;QObject&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;update_checker&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;SIGNAL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;update_found(PyQt_PyObject)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;update_found&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;update_checker&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Codul verifică dacă programul a fost pornit cu opțiunea no_update_check. Ar complica prea mult lucrurile dacă am modifica programul în așa fel încât să pornească de fiecare dată cu opțiunea asta așa că mai bine comentăm codul aici, ca să nu mai verifice opțiunea și deci să nu mai caute niciodată update-uri. E soluția cea mai simplă.&lt;/p&gt;
&lt;p&gt;Ca să facem un petec ca la carte, vom face așa:&lt;/p&gt;
&lt;p&gt;Facem o copie a fișierului main.py:&lt;/p&gt;
&lt;pre&gt;
  $ cd ~/rpmbuild/BUILD/calibre/src/calibre/gui2/
  $ cp main.py main.py.no_update
  După care modificăm *fișierul inițial* și comentăm codul respectiv așa:
  # if not opts.no_update_check:
  #     self.update_checker = CheckForUpdates()
  #     QObject.connect(self.update_checker,
  #             SIGNAL(&amp;#39;update_found(PyQt_PyObject)&amp;#39;), self.update_found)
  #     self.update_checker.start()
&lt;/pre&gt;
&lt;p&gt;Ca să generăm petecul vom folosi gendiff din directorul de deasupra directorului rădăcină:&lt;/p&gt;
&lt;div class="Diff"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;    $ cd ~/rpmbuild/BUILD
    $ gendiff calibre .no_update
    diff -up calibre/src/calibre/gui2/main.py.no_update calibre/src/calibre/gui2/main.py
    --- calibre/src/calibre/gui2/main.py.no_update	2009-11-16 14:21:55.200387171 +0200
    +++ calibre/src/calibre/gui2/main.py	2009-11-16 14:22:10.400510757 +0200
    @@ -221,11 +221,11 @@ class Main(MainWindow, Ui_MainWindow, De
    self.latest_version = &amp;#39; &amp;#39;
    self.vanity.setText(self.vanity_template%dict(version=&amp;#39; &amp;#39;, device=&amp;#39; &amp;#39;))
    self.device_info = &amp;#39; &amp;#39;
    -        if not opts.no_update_check:
    -            self.update_checker = CheckForUpdates()
    -            QObject.connect(self.update_checker,
    -                    SIGNAL(&amp;#39;update_found(PyQt_PyObject)&amp;#39;), self.update_found)
    -            self.update_checker.start()
    +        # if not opts.no_update_check:
    +        #     self.update_checker = CheckForUpdates()
    +        #     QObject.connect(self.update_checker,
    +        #             SIGNAL(&amp;#39;update_found(PyQt_PyObject)&amp;#39;), self.update_found)
    +        #     self.update_checker.start()
    ####################### Status Bar #####################
    self.status_bar = StatusBar(self.jobs_dialog, self.system_tray_icon)
    self.setStatusBar(self.status_bar)
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Totul arată bine, deci putem să-l punem în surse:&lt;/p&gt;
&lt;pre&gt;
  $ gendiff calibre .no_update &amp;#62; ~/rpmbuild/SOURCES/calibre-no-update.patch
&lt;/pre&gt;
&lt;p&gt;Acum trebuie să modificăm spec-ul, adăugând un nou petec, incrementând release-ul, menționând motivul pentru petec și scriind modificarea în Changelog:&lt;/p&gt;
&lt;div class="Diff"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;  @@ -1,6 +1,6 @@
  Name:           calibre
  Version:        0.6.21
  -Release:        1%{?dist}
  +Release:        2%{?dist}
  Summary:        E-book converter and library management
  Group:          Applications/Multimedia
  License:        GPLv3
  @@ -18,6 +18,7 @@
  Source1:        generate-tarball.sh
  Patch0:         %{name}-cssprofiles.patch
  Patch1:         %{name}-manpages.patch
  +Patch2:         %{name}-no-update.patch
  BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
  BuildRequires:  python &amp;gt;= 2.6
  @@ -72,6 +73,9 @@
  # don&amp;#39;t append calibre1 to the name of the manpages. No need to compress either
  %patch1 -p1 -b .manpages
  +# don&amp;#39;t check for new upstream version (that&amp;#39;s what packagers do)
  +%patch2 -p1 -b .no-update
  +
  # dos2unix newline conversion
  %{__sed} -i &amp;#39;s/\r//&amp;#39; src/calibre/web/feeds/recipes/*
  @@ -239,6 +243,9 @@
  %{_mandir}/man1/*
  %changelog
  +* Sat Nov  29 2009 Ionuț C. Arțăriși 
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Gata. Asta a fost tot :). Acum putem reconstrui pachetul cu noile patchuri:&lt;/p&gt;
&lt;pre&gt;
  $ cd ~/rpmbuild/SPECS/
  $ rpmbuild -ba calibre.spec
&lt;/pre&gt;
&lt;p&gt;Și putem reinstala noul pachet:&lt;/p&gt;
&lt;pre&gt;
  $ su -c &amp;#34;yum localinstall -y --nogpgcheck ~/rpmbuild/RPMS/x86_64/calibre-0.6.21-2.fc12.x86_64.rpm&amp;#34;
&lt;/pre&gt; </description>
            <pubDate>Mon, 30 Nov 2009 12:00 GMT</pubDate>
        </item>
        <item>
            <title>The Productive Programmer</title>
            <link>http://mapleoin.bluepink.ro/perma/productive-programmer-review</link>
            <author>mapleoin@bluepink.ro (Oin Maple)</author>
            <description>  &lt;p&gt;Today I read &lt;a href="http://www.amazon.com/gp/product/0596519788?ie=UTF8&amp;amp;tag=httpmapleoinb-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0596519788"&gt;The Productive Programmer&lt;/a&gt; .&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve already got a bunch of books piled up and waiting to be read, some of which I&amp;#8217;ve reached the middle of and some of which I&amp;#8217;ve read only the introduction to. I was bored today and this looked like an easy read that I could drop at any time. It is an easy read, but the fact is, it&amp;#8217;s very catchy. It draws you in and doesn&amp;#8217;t want to be let go. It&amp;#8217;s a great way to spend half a day.&lt;/p&gt;
&lt;p&gt;This could have been another one of those &amp;#8220;94 things you need to know&amp;#8221; books, but I think this title is way better. The tips are divided into 2 big sections and a few separate chapters within each one, giving the book some structure. One of the strange things about it is that its advice spans across 3 different platforms (*nix, OS X and Windows) and they&amp;#8217;re all mingled together in the same chapter. I was put off by this at first, but after I&amp;#8217;d gotten into the book a bit I realized that it is, in fact, a good idea. The whole theme of the book is programmer productivity and the reason it has this title and not a cheesy title with numbers like &amp;#8220;94.3 productivity tips for programmers&amp;#8221; is that the tips aren&amp;#8217;t what&amp;#8217;s important. The book is there to hit people in the head with and open their minds. You aren&amp;#8217;t supposed to just use the tips provided, that&amp;#8217;s unimportant. What&amp;#8217;s important is that you have a shock and realize that you&amp;#8217;ve been the wrong kind of lazy as a programmer. You&amp;#8217;ve stopped automating, you&amp;#8217;ve become a machine; in the author&amp;#8217;s own words, computers have started &amp;#8220;getting together late at night to make fun of their users&amp;#8221;. As soon as I realized what this book was really about, I started reading the Windows tips as well. I also stopped a few times to look in my distro&amp;#8217;s repository for tools that I had known of, but never used before, only now understanding their true purpose. There are many applications that seem just trendy at first, until you realize that even a small productivity boost is a big productivity boost. (Go check out &lt;i&gt;gnome-do&lt;/i&gt; , I&amp;#8217;d heard about it years ago, but never tried it until now).&lt;br /&gt;The book contains tips ranging from application launchers, Firefox&amp;#8217;s magic address bar, bash scripting commands to office productivity tips for killing distractions. Once again, the mindset is important, not the tips themselves. The big take-away from this book is beginning to constantly judge everything you do as a programmer. This isn&amp;#8217;t new advice (at least for those who have read &lt;a href="http://www.amazon.com/gp/product/020161622X?ie=UTF8&amp;amp;tag=httpmapleoinb-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=020161622X"&gt;The Pragmatic Programmer&lt;/a&gt;&amp;#8221;, which by the way is mentioned several times in this book), but I find it&amp;#8217;s better emphasized in this book. At one point in the book, the author explains how it took his team one hour to devise a Ruby script to automate some simple task that would&amp;#8217;ve required 10 minutes if done manually and finally only needed doing 5 times. One could say there was a loss in productivity, but as the author points out, one would be wrong. Those 50 minutes would&amp;#8217;ve been spent with the brain turned off, whereas the hour writing the script was spent &lt;i&gt;learning&lt;/i&gt;, focusing, practicing, gaining knowledge that can later be used on a different project. Some of us would probably have gotten bored in those 50 minutes and fallen into procrastination. That doesn&amp;#8217;t happen when you&amp;#8217;ve got a complex problem to solve.&lt;br /&gt;That was the first part of the book, &lt;i&gt;Mechanics&lt;/i&gt;. The second part, &lt;i&gt;Practice&lt;/i&gt; is a bit harder to read, as it&amp;#8217;s not just disparaged tips on very different applications. They&amp;#8217;re quite two separate books actually. The majority of the examples in Part IIare java (they&amp;#8217;re mostly readable even for someone who doesn&amp;#8217;t speak the exact dialect of &lt;span class="caps"&gt;OOP&lt;/span&gt; that java uses) and this part is mostly about software &lt;i&gt;construction&lt;/i&gt; as &lt;a href="http://www.amazon.com/gp/product/0735619670?ie=UTF8&amp;amp;tag=httpmapleoinb-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0735619670"&gt;Steve McConnell&lt;/a&gt; would say, but it&amp;#8217;s also about Java. I learned a new acronym: &lt;acronym title="You Ain’t Gonna Need It"&gt;YAGNI&lt;/acronym&gt; which basically means that thinking ahead is bad. This is probably one of the advices that I feel the least guilty about, but which I sometime observe in people around me. Never program a feature you don&amp;#8217;t urgently have a need for.&lt;br /&gt;One of the good points of this book is the originality with which the ideas are expressed. Most of these ideas aren&amp;#8217;t new, especially to anyone who&amp;#8217;s read other software engineering books. The text is spiced up with little narratives of different adventures from the author&amp;#8217;s experience as a consultant and there is also an &lt;i&gt;Ancient Philosophers&lt;/i&gt; chapter and an explanation of the PacMan game&amp;#8217;s way of functioning (although I didn&amp;#8217;t understand how that&amp;#8217;s supposed to make the game less enjoyable).&lt;/p&gt; </description>
            <pubDate>Fri, 18 Sep 2009 14:00 GMT</pubDate>
        </item>
        <item>
            <title>Beginning packaging for Fedora</title>
            <link>http://mapleoin.bluepink.ro/perma/packaging-for-fedora</link>
            <author>mapleoin@bluepink.ro (Oin Maple)</author>
            <description>  &lt;p&gt;With &lt;span class="caps"&gt;GSOC&lt;/span&gt; now over, which I should write a blogpost about soon, I&amp;#8217;ve taken a break from pkgdb and web programming and started developing another skill.&lt;/p&gt;
&lt;p&gt;The fact that &lt;a href="https://admin.fedoraproject.org/pkgdb/users/packages/mapleoin"&gt;this page&lt;/a&gt; is empty has been bugging me for too much time, so I set out to fix it. I also wanted to find out more about the packaging process and the road of a package before it gets accepted into fedora&amp;#8217;s official repos which is a bit complex. This knowledge would also help me better understand the parts of pkgdb which packagers interact with.&lt;/p&gt;
&lt;p&gt;It was not my first time trying to make a package for fedora. I think this is actually my third time. I&amp;#8217;d given up before, scared by all the different tools and scattered documentation. In a previous life, I had made some &lt;a href="http://aur.archlinux.org/"&gt;AUR&lt;/a&gt; packages, but the experience is a lot different. I&amp;#8217;m now starting to get used to all the different tools that I was scared of before, like mock and rpmlint and I can now find my way around the fedora wiki for package related information. There is a wealth of information in the wiki, but you need a lot of patience.&lt;/p&gt;
&lt;p&gt;I started slow, with quite a complex application to package: &lt;a href="http://calibre.kovidgoyal.net/"&gt;Calibre&lt;/a&gt;. Having all those different distros is great when you&amp;#8217;re a packager, because you have somewhere to look for help and the Debian package of calibre helped me a lot. It took me about two days to get a somewhat acceptable version of calibre packaged, which I then posted to redhat&amp;#8217;s bugzilla. The following days I found more small apps to be packaged and it became easier and easier for me to do it. Last night for example, I was just browsing &lt;a href="http://news.ycombinator.org"&gt;Hacker News&lt;/a&gt; as usual when I found a link to &lt;a href="http://developers.facebook.com/news.php?blog=1&amp;amp;story=301"&gt;facebook&amp;#8217;s opensourcing of their web server framework&lt;/a&gt; . I just rushed to the download and installation instructions page and I quickly got it packaged. I&amp;#8217;m not saying it&amp;#8217;s perfect, it probably needs a lot of improvement, but it was fun to do. It&amp;#8217;s fun to think that you&amp;#8217;re making things easier for someone and learning a lot at the same time. I now have 5 packages waiting to be reviewed and I&amp;#8217;ve found someone willing to sponsor me into the &lt;strong&gt;packager&lt;/strong&gt; group. Anyone in a package-review mood? ;)&lt;/p&gt;
&lt;p&gt;My journey into the packaging world has been enlightening so far and the good thing is I&amp;#8217;m just beginning. There&amp;#8217;s a whole new world to be discovered out there and also another part of the fedora community. &lt;/p&gt; </description>
            <pubDate>Fri, 11 Sep 2009 10:00 GMT</pubDate>
        </item>
        <item>
            <title>Emacs la Ceata</title>
            <link>http://mapleoin.bluepink.ro/perma/emacs-in-ceata</link>
            <author>mapleoin@bluepink.ro (Oin Maple)</author>
            <description>  &lt;p&gt;Să folosesc blogul ăsta și altfel decât până acum.&lt;/p&gt;
&lt;p&gt;Dacă mă are cineva în feed reader și vrea să meargă la o mică (o juma&amp;#8217; de duzină de oameni) prezentare emacs în politehnică, cu oamenii din &lt;a href="http://ceata.org"&gt;Ceata&lt;/a&gt; (probabil e stricat situl în momentul ăsta), știți cum să mă contactați. Întâlnirea va avea loc mâine probabil după ora 18 în sediul Cetei din unul din căminele din Poli.&lt;/p&gt;
&lt;p&gt;Ceata e o organizație de studenți din Politehnică interesați de tehnologii libere.&lt;/p&gt; </description>
            <pubDate>Tue, 18 Aug 2009 19:40 GMT</pubDate>
        </item>
        <item>
            <title>FUDCon Berlin</title>
            <link>http://mapleoin.bluepink.ro/perma/fudcon-berlin</link>
            <author>mapleoin@bluepink.ro (Oin Maple)</author>
            <description>  &lt;p&gt;I just got back from this year&amp;#8217;s &lt;acronym title="Europe, the Middle East and Africa"&gt;EMEA&lt;/acronym&gt; &lt;acronym title="Fedora Users and Developers Conference"&gt;FUDCON&lt;/acronym&gt; in Berlin with &lt;a href="http://nicubunu.blogspot.com"&gt;Nicu&lt;/a&gt; . I didn&amp;#8217;t have time to write anything while I was there because so much was happening all the time.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://fedora.nicubunu.ro/photos/fudcon2009berlin/613-img_1477.jpg.medium.jpeg" alt="" /&gt;&lt;/p&gt;
&lt;h3&gt;FUDCon and LinuxTag&lt;/h3&gt;
&lt;p&gt;LinuxTag wasn&amp;#8217;t really the purpose of our visit, but we got free tickets so I checked the place out for a while. There were lots of booths and some speeches (mostly in German). There were also some activities, but I really didn&amp;#8217;t get to any of them since most appeared to be German-only. I was a bit disappointed, &lt;a href="http://mapleoin.bluepink.ro/perma/eLiberatica-aftermath"&gt;eLiberatica&lt;/a&gt; had way better talks and guests.&lt;/p&gt;
&lt;p&gt;FUDCon was nice. The first day was a little slow to start, but the BarCamp session the next day was very interesting and diverse. More of that would&amp;#8217;ve been nice. Some of the cool topics I enjoyed were: koji at &lt;span class="caps"&gt;CERN&lt;/span&gt;, git for hackers, Fedora &lt;span class="caps"&gt;EKG&lt;/span&gt; and UI Design. The last day was mostly random hacking by people who already had something to work on. I did a bit of pkgdb hacking on my own and then went Berlinxploring.&lt;/p&gt;
&lt;h3&gt;Berlin&lt;/h3&gt;
&lt;p&gt;The city was awesome. I haven&amp;#8217;t been to a lot of different countries, but right now Berlin is my favourite. Its public transportation is awesome, the people are polite, friendly and everyone can speak English. There were a lot of trees everywhere, the temperature was really cool and there were wild bunnies in the parks! I separated from the crowd two times to go visit the city and I got to see some stuff I would&amp;#8217;ve missed otherwise. It was also cool because what I did was basically ride the train and get off whenever I would see something interesting. I went to the Brandenburg gate and the Governmental district and also got a closer look of the bombed church. I also went to a cool flea market.&lt;/p&gt;
&lt;h3&gt;German Beer&lt;/h3&gt;
&lt;p&gt;The best part of the whole conference were the nights out at the restaurant, I think. I and Nicu were lucky to tag along to a few people from Red Hat before the majority of people had arrived. We got to see some nice places that way, especially thanks to Jesse&amp;#8217;s iphone. I got to eat indian food, assembly line sushy and we were also at the local Zoo. I soon found out that my English was a bit slow and so I couldn&amp;#8217;t keep up with their constant witty joking so I sort of gave up and switched into listening mode.&lt;br /&gt;The nights-at-the-restaurant got better and better as more people arrived. We went to a small restaurant right under the railways for free pizza (thanks Red Hat!) where I met a few of the newly arrived people and had some interesting chats mostly about fedora and Red Hat.&lt;br /&gt;The next day we went looking for a Sudanese restaurant, but ended up at a Cuban restaurant with cool waitresses. I got to taste the first real German beer and socialised with some of the other European guys which was really fun. &lt;br /&gt;The last night was the best night. We had interesting discussions about fonetics(!), German beer, the Dutch language and &lt;span class="caps"&gt;RMS&lt;/span&gt; among other things. They also had the greatest dark German beer, which I forgot the name of. Real traditional German beer really doesn&amp;#8217;t compare with any other beer. It&amp;#8217;s a whole different beverage and an awesome one.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Overall I think it was a great experience. I got to meet a lot of interesting and smart people from all over the world who all shared a passion for their work and for Fedora.&lt;br /&gt;So these are sort of the words to &lt;a href="http://fedora.nicubunu.ro/photos/fudcon2009berlin/"&gt;Nicu&amp;#8217;s photos&lt;/a&gt; which explain the rest, only better.&lt;/p&gt; </description>
            <pubDate>Mon, 29 Jun 2009 20:20 GMT</pubDate>
        </item>
    </channel>
</rss>
