September 01, 2010

There's one part of my work that really fascinates me on a downright artistic level. It's the sense of excitement I experience each time it occurs to me that my coworker managed to create a system which, at the same time, feels both intuitively correct and as simple as possible. Whenever I'm tasked with modifying such a system, it's always satisfying to remind myself that I do not really have to think much about how to actually perform the necessary changes, since I can instantaneously figure out the couple of places where the edits should occur. And most of the times, I'm right -- the parts of the code I need to change or extend are where I think they should be, and in the shape I expect them to be. If the code lacks some functionality (and it rarely does), that's not a cause for alarm -- when coding, my predecessor had only his particular set of requirements in mind, so he left some parts of the system in a non-flexible state. Now it is my job to add this flexibility, so that the system can encompass the new functionality. I always get a feeling of satisfaction whenever I manage to add new features while increasing the complexity of the whole system by only a minuscule amount.

Granted, both me and Jacek come from more or less the same background -- Linux/FLOSS in general and PLD in particular, and the product we're working on is partially PLD-derived, so a lot of what I've just described actually amounts to figuring out how to integrate new functionality (often in the form of new applications) into a custom-built limited-purpose Linux distribution. And that's something which has very few obvious ways to do it right and a lot of ways to do it very wrong. On top of that, the (brilliant in its intended simplicity) Unix philosophy of separating systems into small discrete applications with clearly defined interfaces is ever present in our job.

However, the true reason for all of the flowery language from the first paragraph is not just that I know how to use RPM proficiently and am such a very happy camper for it. Actually, it's because the very same qualities I try to attain professionally, in particular being able to reduce the complexity of systems to their most simple and beautiful (see, more flowery language) form, managed to heavily skew my general world view. I actually look at the world I live in, or, to be more precise, at the society and its various constructs, in much the same way as I look at my work. In the XXI century, the age of globalisation and interconnectedness, complexity lurks everywhere and each time I encounter it, I have the strong urge to try and reduce it. To attain true simplicity in its most functional form.

I do know of at least one other complex system of written rules designed to govern interactions with the real world, other than computer source code. It's the legal system. I know for a fact that the number of both the national and international laws that govern even my mid-sized country, is increasing by the hour. Without any signs of reversing the trend.

And blindly increasing complexity is not progress, but a certain path to a catastrophe. For example, each time I come across the statement, that ignorance of law does not excuse the offender, I'm reminded of the sheer absurdity of it. In a western society it's physically not possible for a human to navigate reality with the full knowledge of all the rules and regulations that he might or might not be breaking at any given time. For a potentially eye-opening presentation of how many pitfalls await citizens in a legal system, I strongly suggest viewing the first part of this talk (it's based on the U.S. legal system).

I'm of the opinion that each individual, considering how different our experiences might be, has the potential to give a unique and at least partially useful solution to any problem he has given serious thought to. Having said that, I also believe that people rooted in the "IT mindset" might (just might), on average, have more insight to offer than most, solely due to the nature of our profession. The more ambitious of us try to learn new ways of approaching and solving problems on a regular basis. The very core of our job is to create tools that enable people to take control of the enormous complexity found in the world. One can't send probes to Mars with just pen and paper. Or run a nation's electricity grid. Or its banking system. Or any one of the many millions of extremely complex tasks. Computers and their software are a necessity.

As often is the case in life, I unfortunately have no idea what to do with this knowledge. Yes, the legal system is very complex and yes, if performed correctly, its simplification might be beneficial to society. Also, it's true that IT deals with handling complex problems and has, over the years, developed tools and methodologies for that very purpose. However, my actual understanding of even my own country's legislative process is extremely limited, so I have no real idea how to even try to approach the problem. I do, for example, think that it would be extremely cool to have all of Poland's laws be developed using a central SVN-like repository, I do not however know how to (a) solve such a problem on a technical level and (b) make politicians adopt such a system, once it is ready.

I have tried to write a system that would extract the legislative data from the current sources, figure out which is the next version of which and then present a mercurial repository out of it, but failed miserably. Even trying to compile a list of sources proved to be too daunting a task. Extracting meaningful data (projects of new law) out of those sources would require writing unique code for each source and would be very hit or miss. PDFs are meant for printing, not extracting text from.

Unfortunately I apparently do not possess the sheer will power of an RMS (or an Eben Moglen for that matter), in order to perform such a feat on my own. Instead, I'm kind of hoping that a leader will emerge with a clear vision and the skills necessary to make that vision a reality.

In the past year I have "toured" parts of the NGO landscape of Warsaw and I can't say anything bad about it. Motivated people trying to change reality by doing the things they think are important. However, I can't say that I've met anyone with a clear vision of how to achieve far-reaching fundamental changes, accompanied by the skills and motivation required to focus purely on realizing that vision, without getting distracted by "lesser" goals.

I'm still young and optimistic however. Sooner or later someone like that will emerge and I'll find him. I'm really hoping for sooner, though :)

P.S. Thanks to riddle and Jubal for proof reading. Unfortunately my grasp of the English language is not sufficient for me to be able to express my thoughts in a manner as simple, as I would like.

(Photo: Alcoa Composite One, mikeyexists CC)

August 26, 2010

Od prawie trzech miesięcy (12 czerwiec 2010, Katowice) jestem szczęśliwym mężem wraz z kochaną żoną Emilką. Fakt ten został uwieczniony na fotografiach. Z tego miejsca przepraszam wszystkich którzy mogą czytać ten blog, a którzy byli z nami wtedy i nie dostali jeszcze od nas zdjęć..... niedługo nadrobimy tę karygodną zaległość, jak tylko obrobimy się z naglącymi sprawami natur różnych. Jakoś tak się zrobiło że spraw się zebrało bardzo dużo, po kolei odhaczamy kolejne, czas się skrócił i bardzo przyspieszył.





Dziękujemy wszystkim którzy byli z nami w tym dniu.

Wolę jednak krótsze formy komentowania otoczenia: soup.hakore.com.
Aktualizacja 26.08.2010: usunąłem soup.hakore.com

August 25, 2010

Wczorajszy przedruk w Ars Technice pokazuje ciekawe zjawisko. Im bardziej użytkownicy są przekonywani o poufności i bezpieczeństwie swoich danych, z tym większym trudem przychodzi im owe dane podać.

Jeśli się nad tym jednak zastanowić, okazuje się, że jest to związane z całkiem normalnym funkcjonowaniem mózgu. Ktoś pamięta skecz o pilotach w wykonaniu Monty Pythona?

— Tu mówi wasz kapitan, nie ma absolutnie żadnych powodów do paniki.

— …

— Skrzydła wcale się nie palą!

Najistotniejszą rolę odgrywa tutaj sam fakt wspomnienia o niewystąpieniu określonego czynnika. Czy ktokolwiek z was jest sobie w stanie wyobrazić lunapark z kolejką górską, przy której stoi poniższa tabliczka?

Inspekcja techniczna zapewnia, iż w wyniku korzystania z kolejki nie zginiesz powolną śmiercią, miażdżony przez tony giętych z potwornym zgrzytem rur i rozcięty na pół blachą opatrzoną logo naszego parku rozrywki.

„Dlaczego w ogóle miałbym o tym pisać?” Brzmi idiotycznie, prawda? „Z pewnością nikt rozsądny nie zrobiłby nic podobnego!”

Tymczasem każdego dnia wystawiamy swoje małe tabliczki:

Nasz serwis jest wyjątkowo bezpieczny. Nikomu nie udostępnimy twojego adresu e-mail. Ani żadnych innych twoich danych. Postaramy się działać akurat wtedy, kiedy będziesz nas potrzebował. A w razie czego mamy kopie zapasowe.

A potencjalny klient czyta i… zamyka okno przeglądarki.

Nie zrobię ci nic złego © Patryk Zawadzki, Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Poland.

August 23, 2010

W zeszły piątek, zajrzałem na stronę ryanaira, co zakończyło się rezerwacją biletów do Londynu na ostatni weekend listopada. Lot z Bydgoszczy do Londynu kosztował 5 zł ze wszystkimi opłatami, natomiast powrotny aż 66 zł, również ze wszystkimi opłatami. Łącznie 71 zł. Jak tu nie rezerwować? Wylot w piątek, po pracy, powrót w poniedziałek. Czyli weekend w Lądku Zdrój, znowu. ;-) Hotel jak poprzednio, F1 w Barking. Bardzo przyjemne miejsce, obok Tesco. ;-) Mam nadzieję, że tym razem uda się spotkać! Być może będzie nas więcej! A wpis tradycyjnie powstał pod natchnieniem spotkania z Kasią K.

Ku pamięci:

  • Firefox¹ ignoruje line-height.

  • Firefox¹ dodaje własny element z dwupikselowym paddingiem i pikselowym borderem:

    button::-moz-focus-inner {
        border: 0 none;
        padding: 0;
    }
    
  • Wszystkie przeglądarki domyślnie wliczają ramki i padding do rozmiarów elementu:

    button {
        box-sizing: content-box;
        -moz-box-sizing: content-box;
        -ms-box-sizing: content-box;
        -webkit-box-sizing: content-box;
    }
    
  • IE7 i starsze nie radzą sobie z automatyczną szerokością przycisków:

    button {
        overflow: visible;
        width: 0;
    }
    button[type] {
        width: auto;
    }
    

¹ Dotyczy ogólnie produktów Mozilli.

Button kontra przeglądarki © Patryk Zawadzki, Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Poland.