A new blogging engine

Code screenshot

My last entry about a blogging software switch was called ‘Keeping up with the times’ and I could have called this one the same. Back then, I finally realized that maintaining my Movable Type installation was a pain as I knew next to no Perl but since I was an established PHP developer the migration to Wordpress was a logical step. Now I’m ‘admitting’ that I slowly transitioned to being a Ruby developer so I’m embracing Jekyll.

So what were the other reasons for the switch?

  • I was getting a little paranoid about Wordpress and the plugins I was using. I wasn’t terribly excited about the perspective that if a security flaw appears and I’m not updating in time (if an update is available at all) my server gets f!@#ed.
  • It takes Jekyll about one minute to generate the whole site but the resulting files are vanilla HTMLs so they’re served much faster than their Wordpress equivalents. I haven’t even configured the web server for this site to include the PHP interpreter. As a note here, while discussing this post with Alex he mentioned that there are caching solutions and even a static site generator for Wordpress too.
  • I wanted to use the gem that I’m a maintainer / co-author of, in a “production” environment. I put quite a few hours of work into it and was very curious to actually see it doing its job.

What are the downsides?

  • Not being a dynamically generated database backed site the comments have to be served by a third party system. There might be self hosted alternatives out there, but I haven’t researched them because I had Disqus integrated with Wordpress for a long while anyway. I’m still not entirely comfortable to give all my comments away to a third party service (up until now, comments were also saved locally by Wordpress).
  • I had my concerns about search, and I thought I’ll have to insert a Google search box, but recently I discovered Algolia which is awesome and a lot faster than the Wordpress search was. See it action!
  • I have to admit, Wordpress’ media manager was great and I’m badly missing it.

Actually the migration began in 2014 when I discovered Jekyll and the majority of the post files were created back then by an import from Wordpress, but they were of sub-par quality with lots of junk in them. So in the last few days I hacked together some Ruby scripts which:

  • Removed useless YAML attributes and converted the ugly binary dates generated by the import.
  • Fixed the formatting of tons of posts. This was due since 2009 when I switched to Wordpress but I thought I’ll do it on a need by need basis as I stumble upon posts with broken formatting. Which I did, but it wasn’t nearly enough. It was the Algolia search that prompted me to do this whole clean-up as my unformatted older posts were generated as one long paragraph and the indexer wasn’t accepting them.
  • Fixed internal dead links. Lots of posts were still containing links to other posts using the old permalink style - /blog/archives/year/month/day/post_name. Now they all point to the correct format - /year/month/day/post-name/.
  • Updated links to assets which were moved to content.rusiczki.net.

Another point that’s worth mentioning is that the generated pages are ran through jekyll-tidy which turns them into deliciously formatted HTML. This tickles my web developer bone the right way. Go ahead, have a look at the source of a page and wonder at the perfect indentation.

Last but not least, the theme I’m using is a lightly customized Hyde, the about page got some long needed updates and to celebrate the launch the site is now secured with a Let’s Encrypt certificate and is served through HTTP/2.

Here’s to many years of static HTML! :)

My adventures in social coding

At the beginning of 2014 I accepted to work on a project for a friend and since it was a simple presentation site I decided to build it in Jekyll1. (Throughout this post I will add explanations for non technical people as footnotes.) By the time I got started on this project I was kind of spoiled by Rails’ asset pipeline2 functionality which was missing from Jekyll, but I quickly found a plugin which promised to deliver this. Taking a closer look at its GitHub repository I noticed that the original author has not touched it for half a year or so and some of the pull requests3 were pretty straight forward so I decided to fork4 the repository and integrate those changes. Thanks to the magic of git and the Internet, I can “retrace” the timeline of what happened to my fork:

  • January 8, 2014 - I start committing code, one of the main tasks being renaming the plugin from jekyll_asset_pipeline to japr (Jekyll Asset Pipeline Reborn).
  • January 14, 2014 - Thanks to my guerilla marketing campaign, which involved leaving comments with links to my repository on the original repository’s issues and pull requests, the first contributions by other people appear on my fork.
  • March 7, 2014 - More contributions by third parties.
  • May 27, 2014 - A contributor adds Rubocop which is a code quality checker that analyzes your code and reports “offenses” where it’s not written as it should be. He also rewrites the code in some places.
  • September 9, 2014 - Even more contributions.
  • … silence for a long time during which my fork goes abandoned and becomes incompatible with the latest version of Jekyll …
  • May 7, 2017 - A kind soul submits a pull request to fix the compatibility issues but due to lack of time I ignore it.
  • November 24, 2017 - While browsing around I notice a fork of my fork with changes that make it compatible with the current Jekyll version - I leave a comment on the author’s fork that if he wants he can submit a pull request…

Which he did and from this point forward things sprang into motion: I got motivated to fix the outstanding Rubocop offenses, one of them being to write documentation for the classes and modules of the library. While doing this I actually understood the flow of the code - what it does and how it does it, after 3 years of pretending that I’m a maintainer… But better later than never, right? Another ambition got its resolution when I managed to bump the automated test coverage to 100%, which means that each and every line of the library is covered by tests, the risk of inadvertently breaking something without noticing while adding a new feature or fixing something being minimal. After releasing this version, I remember that I had an uplifting feeling while I was walking around town, looking at people and thinking “heh, you might not know, but I just released an opensource library doing some good for the community”. This was a high point of the euphoria roller coaster that followed.

I then researched a little bit and noticed that there at least two more libraries focused on providing the same thing (an asset pipeline for Jekyll) one of them being minimalist and the other, well, the “everything but the kitchen sink” type. This was a low point, but I soon realized that the library I’m maintaining sits somewhere in between them having a medium amount of features.

A few short days later I’m laying in bed one night and after unsuccessfully waiting for sleep to come I decide to open up my phone and I notice an email. Written by the original author of the library I forked, in which he tells me that he noticed that I continued maintaining it and as he doesn’t have the time, he wants to pass on the baton of the original library to a maintainer. I almost screamed a little. The highest point of the roller coaster - and it kind of stayed here from that point forward.

I got into my pre-Christmas mini vacation and after two or three afternoons of work I integrated the changes of my fork back into the original repository. And now I’m happily smiling as an author on the gem’s page. Another bucket list item checked off.

Footnotes

  1. Jekyll is a tool that generates a site based on a template and some post files which contain the actual content of the pages. It sits somewhere between writing your site by hand in HTML and using a full-blown CMS like WordPress.
  2. The simple explanation for an asset pipeline is that it takes a bunch of CSS or JS files, pre-processes them, merges them together, minifies the result, etc. The obvious benefit is that instead of multiple requests there will be one request for CSS and one for JavaScript, easing the load on the server and making the page load faster.
  3. A pull request is a way to propose your changes to a repository of code. Before making their way into the code base these changes have to be accepted by the owner of said repository.
  4. A fork is a copy of a repository of code.

Generația a patra

Samsung Galaxy S, Samsung Galaxy S3, Google Nexus 5, Huawei P10

Nu se poate spune că am fost un early adopter, prin 2008 / 2009 eram convins că nu am nevoie de un telefon deștept, judecând că eram oricum în fața calculatorului toată ziua iar dacă aveam ceva super important de verificat când nu eram o puteam face și de pe Sony Ericsson-ul din dotare. Am avut ocazia să butonez iPhone-uri deoarece patronul firmei de construcții la care lucram pe atunci era obsedat de tehnologie cool și și-a dotat toți directorii cu ele. Nu am simțit însă nevoia să am și eu așa ceva.

În ciuda faptului că dețineam un MacBook care-mi plăcea foarte mult am început în (cred) august 2010 cu Android, mai precis un Samsung Galaxy S copiind-o pe Ioana care și l-a luat să scape de restricțiile de Internet de la serviciu (aceiași firmă de construcții menționată mai sus). Nu am prea vrut s-o cred când mi-a zis de el fiind mirat de prețul foarte mic față de iPhone. În acea perioadă eram la capătul unei ere de freelance / lucrat de acasă gata să mă angajez cu acte în regulă și am profitat de “libertatea” rămasă printr-o escapadă biciclistă în miezul săptămânii documentată prin poze postate live pe Twitter. Nu s-a uitat desigur nici dracu’ dar eu am rămas cu experiența. Ce îmi amintesc despre telefon, în afară că a fost primul meu smartphone, este că mergea oribil de încet și că am încercat să dreg această problemă aplicând tot felul de trucuri pe care le-am găsit pe net. Fără vreun rezultat desigur. După angajare am fost trimis să lucrez 3 luni la Budapesta și acolo am profitat mult de el fiindcă am primit o cartelă de date locală și astfel am avut acces la Internet de oriunde și oricând. O altă aventură a fost când în timpul unei excursii m-am udat leoarcă iar telefonul în loc să-l pun în rucsacul acoperit cu o husă impermeabilă l-am lăsat în buzunar. Evident că s-a stricat (se tot restarta), l-am trimis în garanție și mi-a fost trimis înapoi cu mențiunea că se anulează garanția, aparatul prezentând contact cu lichide. Mă gândeam să profit de asigurarea care o aveam pe el dar l-am pornit de test și a funcționat fără probleme. Se pare că se uscase pe drum. Nu avea bliț, așadar dacă voiai să faci o poză în condiții de lumină mai puțin ideale… ghinion. Nici camera în sine nu era foarte strălucită dar a fost primul meu telefon deștept și știu că așteptam încă cu sufletul la gură să fie convertite una câte una aplicațiile de succes de pe iOS pe Android.

Am rezistat cu el până în decembrie 2012 când mi-am luat un Samsung Galaxy S3 de la o cunoștință. Era “aproape” sigilat. S-a stricat în 1 iunie 2013, într-un mod foarte bizar, practic am observat că pe parcursul a câteva ore nu a mai dat niciun semn mobilul iar când am verificat era oprit și nu a mai vrut să pornească. Aparent o parte din S3-uri sufereau de un așa zis sudden death - și am avut norocul ca telefonul meu să facă parte din această serie. Am găsit după vreo lună de vânat pe OLX pe cineva cu unul identic dar cu ecranul spart și ne-am dus la respectivul prieten de la care l-am și luat, el lucrând la un service de telefoane. S-a făcut transplantul de placă de bază și ulterior am schimbat și camera cu a mea că cea de pe telefonul individului era plină de praf. Ca performanțe telefonul a fost OK la început apoi după al doilea update (cred) a cam încetinit. A avut cea mai bună cameră de până acuma și am făcut multe poze foarte reușite cu el. Funcționează în continuare la cumnat după ce a trecut prin multe alte aventuri.

În toamna lui 2013 mi-am luat o tabletă Nexus 7 și încurajat de performanțele acesteia în 26 iunie 2014 (mersi eMag pentru istoric) am făcut comandă pentru un Nexus 5 care mi-a fost livrat la Cluj în timp ce eram într-o delegație acolo. Am observat din start că la capitolul cameră stătea mult mai prost decât S3-ul dar în rest telefonul se mișca în sfârșit bine. Incredibil de bine pentru un Android. Pe parcurs limitarea care a apărut a fost spațiul de stocare, 16 giga dovedindu-se a fi foarte puțin și în ultima vreme mă luptam constant să eliberez destul spațiu să aibă loc să-și facă actualizările. A cam început să agațe și la aplicații dar e adevărat că aveam Facebook și Skype instalate care se știe că trag de telefon binișor.

Samsung Galaxy S, Samsung Galaxy S3, Google Nexus 5, Huawei P10

De vreun an am început să mă satur de tot de camera foarte proastă și să tânjesc la un cititor de amprentă pentru că folosesc aplicații de internet banking respectiv manager de parole și nu prea aveam chef să-mi tot tastez parolele lungi și foarte sigure. M-am hotărât să-mi iau un iPhone 6S second hand, cu 64 giga stocare dar plimbându-mă prin Media Galaxy mi-a atras atenția logo-ul Leica în zona mobilelor și așa am descoperit Huawei P9. Atras de stand ca o molie de lumină m-am dus și m-am jucat cu el, am admirat viteza dar mai ales am făcut poze de test fără număr până mi-a suflat paznicul de la magazin în ceafă. Mi-a plăcut ce am văzut și le povesteam colegilor de muncă despre cum mi-am schimbat planurile de achiziție când cineva a zis: “păi parcă scot acuma P10-le”… Cum nu era tocmai o urgență upgrade-ul de mobil am pus din nou idea pe linia de așteptare până am primit un mail de la Media Galaxy despre precomanda la P10. Moment în care s-au agitat lucrurile, am început să ma uit serios la review-uri și cam toate vorbeau de bine despre telefon și chiar și cele care găseau probleme de genul că nu e un upgrade destul de mare să se merite trecerea de la P9 sau nu are strat anti mâzgă pe ecran, îi lăudau camera, cuvintele “great” și “excellent” fiind o constantă. În rest, cel puțin pe hârtie telefonul bifează toate dorințele mele.

Acestea ar fi:

  • camera foarte bună (știu că am tot menționat camera dar ăsta e motivul principal de upgrade)
  • cititor de amprentă
  • viteză foarte bună, nu vreau să văd nici un soi de sughiț
  • apropo de sughițuri, aici ar trebui să ajute și memoria RAM dublă față de cât am acuma
  • baterie care ține o zi și la utilizare intensă (nu pot să zic același lucru despre Nexus 5 care mă cam lasă în miez de zi dacă trag de el)
  • 64 Gb de stocare, expandabil prin SD card

Sacrificiul care a trebuit să-l fac a fost să renunț la experiența stock Android care o aveam pe Nexus, dar asta ar fi fost disponibilă doar pe Google Pixel și încă nu sunt pregătit să-mi vând un rinichi pentru un telefon.

În rest cum se va descurca telefonul și cum o să-mi placă voi vedea pe parcurs.

PS. Da, așa cum se vede în poză încă le mai am toate, cu niște mici asteriscuri: Galaxy S3 e acum al cumnatului iar Galaxy S e de fapt ex-telefonul Ioanei.

Cea mai populară poză de-a mea

Multă vreme am crezut că cea mai populară poză de-a mea e cea cu Lacul Albastru, însă aruncând o privire pe Flickr, am constatat că, de fapt, cea mai vizualizată este fotografia cu drumeții pe Pietrosu (4255 vs 1967). Instantaneul cu Lacul Albastru rămâne oricum, de departe, cea mai furată poză de-a mea. Dar chiar și adunate, vizualizările acestor fotografii par insignifiante față de câte a strâns, în doar jumătate de an, poza mea de pe Google Maps care ilustrează magazinul Dedeman din Baia Mare.

Screenshot Google Maps

Bun, dar câte vizualizări poate avea?

Screenshot Google Maps

80.000 – Optzeci de mii! Urmează pe “podium”, cu aproape 50.000 de vizualizări, a doua cea mai populară poză de-a mea, care ilustrează magazinul Praktiker din Baia Mare. Partea bună e că îmi amintesc cum am făcut ambele poze. Adică nu sunt complet senil și am și două povestioare de scris pe blog!

La Dedeman, făcusem câteva poze prin magazin iar când am terminat cumpărăturile și am ajuns la mașină, aruncând o privire la telefon am observat că m-a întrebat Google dacă nu vreau să le folosesc să ilustrez magazinul. Fiind poze de detaliu, cu produse, mi-am zis că nu au relevanță, dar cum eram parcat într-o poziție faină, am ieșit din mașină și am tras o magistrală poză prin care am reușit să surprind magazinul destul de bine și totodată nu am prins nimic critic de privat cum ar fi oameni sau numere de înmatriculare. În plus, era o zi frumoasă cu lumină bună.

La Praktiker a fost altfel situația, m-am dus cu meșterul care ne făcea finisajele în jurul termopanelor nou montate, să cumpărăm glafuri (pervaze). Și cum Praktiker și-a redus considerabil personalul, a trebuit să așteptăm nu mai puțin de o oră după angajatul care se mișca în reluare, până ne-a debitat respectivele glafuri. Timp în care m-am plictisit și am tras poza.

Cam astea ar fi poveștile din spatele celor mai vizualizate fotografii de-ale mele. Bine ar fi să fac și bani din ele, dar na… Trebuie să mă mulțumesc cu faima.

Update 30 iunie 2017

Screenshot Google Maps

Update 1 februarie 2018 - Dedeman: 188.257 / Praktiker: 94.998

Rusiczki Anna Olívia

Anna Olívia

Cea mai fericită zi a vieții mele? :)