czwartek, 11 lipca 2013

[PL] Czym jest dla mnie praca zdalna ?

Chciałem napisać kilka słów o pracy zdalnej. Jak ją postrzegam z mojego osobistego punktu widzenia.

Schronienie w czasie burzy

Kto mnie zna, ten wie, że w poprzednim oraz tym roku dużo chorowałem, jeździłem po szpitalach i lekarzach, urzędach, doradach, kupowałem mieszkanie, przeprowadzałem się i brałem ślub. Na szczęści, przy pracy zdalnej, nie jest to tak duży problem. W szczególności, jeśli jako cała firma  praktykujemy pracę   w sposób asynchroniczny. Zatem jeśli akurat boli Cię głowa, musisz iść na pocztę, do lekarza, wyremontować dom albo sąsiad wierci. Nie ma sprawy. Dwa słowa "będę później" i cały zespół jest w stanie sobie poradzić.

Oczywiście można to wszystko ogarnąć pracując z biura też. Pytanie na jak długo i na jak często? Jeden wyjątkowy raz? Co jeśli boli Cię głowa przez dwa miesiące codziennie ? Ja tak miałem. Nie wiem co byłbym w stanie w tym czasie zrobić z biura. Chyba bym tylko wszystkim przeszkadzał.

Kultura firmy

Nawet jeśli możesz pracować zdalnie od czasu do czasu, lecz w twojej firmie nie ma odpowiedniej kultury, będziesz mieć wszystko utrudnione. Ominie Cię wymiana informacji, która zamiast odbyć się w Internecie, z możliwością późniejszego zapoznania, odbędzie się w stołówce podczas przerwy obiadowej. Kultura asynchronicznej pracy zakłada, że ustalenia i dyskusje odbywają się głównie przez kanały nieulotne. Nie ważne czy to jest twój bugtracker, pivotal, trello, irc, wiki, czy hackpad. Cokolwiek do czego mogę wrócić i skomentować po dwóch godzinach, w dogodnym dla mnie czasie.

Niestety znam firmy, które teoretycznie umożliwiają pracę zdalną, jednak w praktyce nie są zupełnie do tego przygotowane, w rezultacie pracownicy zdalni napotykają szereg trudności. W szczególności czują się wyłączeni z głównego obiegu komunikacyjnego, czują że omijają ich czasem kluczowe ustalenia, po których nie zostaje czasem żaden ślad.

Praca asynchroniczna nie wyklucza jednak korzystania z komunikacji głosowej. Istnieje spora szansa, że twój komunikator pozwala na nagrywanie rozmów. Wystarczy później udostępnić takie nagranie i już pracownik, który ominął spotkanie może nadrobić zaległości i wypowiedzieć się na innych kanałach na omawiane tematy. Być może kiedy już wszyscy będziemy nosić Google Glass to i spotkania przy lunchu będziemy nagrywać i udostępniać współpracownikom.


Synchroniczna Asynchroniczna
Z biura To co zwykle rozumiemy i wyobrażamy sobie jako praca. Siedzimy i gadamy do siebie. Większość informacji wymieniamy w ten sposób wewnątrz firmy. Na komunikację kanałami elektronicznymi decydujemy się zwykle, gdy musimy wymienić informację z osobami z innej organizacji, klientem albo podwykonawcą. Może być bardzo efektywna dla niektórych rodzajów zadań jednak od każdego wymaga dojazdu do pracy, co zwykle przy moim rodzaju wykonywanych zadań oznacza jednak stratę czasu, energii i większy ślad węglowy. Chyba najrzadziej spotykany wariant. Przychodzimy do biura, jednak czasem się w nim mijamy. Po co więc do niego przychodzimy? Trochę trudno mi to sobie wyobrazić. Być może jesteśmy wśród tych ludzi, którzy mają problem w pracy z domu i potrzebują do pracy innego rodzaju otoczenia. Być może jedynie biuro dostarcza nam jakiś rzadkie narzędzie potrzebne do wykonywanej pracy np. drukarkę 3D.
Zdalna Pracujemy skąd chcemy, jednak musimy być w tym samym czasie dostępni by pracować efektywnie i podejmować decyzje. Często używamy do rozmów jakiegoś linearnego komunikatora, które zwykle mają problem by odnosić się do konkretnych wątków i rozgałęziać rozmowy. Możemy się też komunikować głosowo, ale wymagamy obecności na spotkaniach w konkretnych godzinach i nie nagrywamy takich rozmów. Nie płacimy za biuro. Internet jest naszym biurem, ale wciąż siedzimy w nim wszyscy w tym samym czasie. Pracujemy w dogodnym dla nas momencie. Kiedy uważamy, że jest ku temu odpowiednia chwila, synchronizujemy nasz stan wiedzy z tym co w międzyczasie wyprodukowali koledzy. Kiedy mamy jakieś pytania albo przemyślenia zostawiamy je w miejscu dostępnym dla wszystkich. Przy odrobienie szczęścia są takie momenty w ciągu dnia, że spora część osób i tak jest dostępna, jednak nawet jeśli dzieli nas kilka stref czasowych, to nie problem dla naszej wydajności.

Multiplikator w czasie bryzy

Praca zdalna objawia swoje korzyści jednak także, kiedy wszystko idzie w porządku. Może nawet jeszcze większe korzyści.

  • drzemka - od dawna istnieje wiele artykułów naukowych, które potwierdzają pozytywny wpływ popołudniowej drzemki
  • uprawianie sportu - szczególnie jeśli mieszkamy w odpowiedniej ku temu okolicy
  • możliwość przygotowania w środku dnia posiłku zgodnego z własną dietą, szczególnie przydatne dla osób z alergiami i nietolerancjami pokarmowymi.
  • ćwiczenia fizyczne bądź rozciągające
  • zabawa z dzieckiem
Jeśli próbujesz ustalić sobie optymalny harmonogram dnia, który pozwoli Ci efektywnie wykorzystać czas, to praca zdalna może być świetnym rozwiązaniem. Ja w tej chwili pracuję w 5 okresach półtorej-godzinnych, pomiędzy którymi spożywam małe posiłki oraz wykonuję krótką serię ćwiczeń fizycznych oraz relaksujących szyję i kręgosłup. Pozwala mi to zmniejszyć wahania poziomu glukozy we krwi, co jest szczególnie istotne dla osób z insulinoopornością.

piątek, 15 lutego 2013

Rails acceptance testing with Virtual Machines

I often test software on Vagrant virtual machines. Sometimes however they use real browsers and require some X server running. This is often the case when using Cucumber, Capybara, Selenium and Firefox. When everything is running smoothly we usually use at +Arkency  one of this:

xvfb-run -a bundle exec rake cucumber
xvfb-run -a bundle exec cucumber features/name.feature:line_number

It is however sometimes useful to see the tests being executed. For that I use:

Xvfb -screen 0 1280x1024x24 -ac
DISPLAY=:0 ratpoison
x11vnc -display :0
DISPLAY=:0 bundle exec rake cucumber

And connect to the Vagrant machine using Vinagre.

niedziela, 2 grudnia 2012

Retreat


If you know me well then you know that from time to time I try to do something good in my spare time. I speak at Ruby User Group which I love, I try to write Open Source libraries, I was one of the organizers of 1st wroc_love.rb edition and tried to help a little to organize the second edition. But as of today I give up.

I decided to devote all my spare time to fight with my health problems. In last 12 months I was 3 times in hospital, had 2 ear surgeries and as it turned out it was all for nothing. Or at least this is how I perceive it. Because a one tiny infection later and again I am practically deaf in one of my ear.

And that makes me really really sad. So sad that everything requires lot of effort. Working, smiling, everything. And I don't have that much energy when I am sick. I can only imagine how it is to be a healthy programmer. I would have so much time more if I didn't have to fight my illness. And I would love to spend it doing Open Source. I admire everyone who does it. Almost everything that I use for my personal life and in my work is open sourced. Almost all the money I make is earned thanks to solutions built based on Open Source tools. And I always wanted to contribute back. But I've just lost my heart to it. We stand on the shoulders of giants: Ruby, Rails, Postgresql, Redis, Mongodb, ZMQ, Linux, Chef, jQuery, Firefox, Webkit, V8 ... Thank you.

I promise I will be back when it is over. If it is ever over.

piątek, 15 czerwca 2012

Native system notifications in rails applications (development mode)




Let's just say that from time to time you would like to display a notification on your screen of some event that occurred. As an example let's display a request time. The problem occurs when you work in heterogeneous environment and your friends use either linux or mac. In that case you might be tempted to define Gemfile as:


That is not going to work correctly and will lead to problems. Every time you run bundle install on different platform it will resolve dependencies differently and cause problems for your coworkers that are in the second operating system camp. And in worst scenario you will be hit when last Gemfile.lock is committed from Mac but you try to deploy to linux production server using bundle --deployment which is not allowed to recalculate dependencies. You can recognize it by the message "You have modified your Gemfile in development but did not check the resulting snapshot (Gemfile.lock) into version control".

What we basically want to achive is described in Gemfile manual:

"If a gem should only be used in a particular platform or set of platforms, you can specify them. Platforms are essentially identical to groups, except that you do not need to use the --without install-time flag to exclude groups of gems for other platforms."

Except that we want to load different gems depending on ruby platform (that is not the same thing as platform). In other words we want bundler to resolve dependencies considering both libnotify and growl but install only these which are going to work in current environment.


Run once bundle install --without darwin on linux or bundle install --without linux on mac and bundler will store these setings in .bundle/config

Next time you can just use bundle install on your dev machine.

For your production server configure capistrano to skip both of them:


Now we can try to use them in our development mode. We need a way to detect current operating system. There are 2 easy ones that I am familiar with:


I am aware that RUBY_PLATFORM might return "java" but don't care since probably both of them won't work in Java anyway. Finally the small code for displaying a notification on your system which goes into the bottom of config/environments/development.rb so that it is only loaded in development environment (obviously):


Did you like it? Here is what you can do now: