Loguję tylko adres jak uzyskać sam adres IP:

http://www.commandlinefu.com/commands/view/1908/get-the-ip-address-of-a-machine.-just-the-ip-no-junk.

[JOB / WORK] Rekrutacje i werbowanie kandudatów do pracy

Ostatnio popularnym trendem w procesie rekrutacji jest wyłapywanie programistów dla klientów których nazwa nie jest znana i tym sposobem Twoje CV może trafić do Twojego obecnego szefa. Tak się dzieje pomino tego, że Ty nawet nie wysyłałeś do nikogo swojego CV tylko pytałeś o szczegóły oferty.

Niestety kojeny raz piszą do mnie rekruterzy z propozycją, jak to określają "możliwości" czy "udziału w projekcie" dla naszego klienta, którego nazwy nie podadzą bo takie mają procedury. 

Czy to normalne, jak traktuje się ludzi? To wcale nie jest przyjemne, bo to jak porwanie  z zakładaniem worka na głowę. A później otwierasz oczy i znajdujesz się w mega nieprzyjemniej korporacji, w której jedynymi twoimi prawami to jest praca pod presją i poniżanie Twojej osoby, za to, że czegoś nie wiesz. Gnojenie Cię na każdym kroku, za to, że zwracasz się o Pomoc. Nie wiesz czy z takiej "Radnki w Ciemno" wyjdziesz cały, czy zduszony czy może trafisz na "Piękną księżniczkę". 

Zabawy w ciemno nie są najlepszą formą rekrutacji, ponieważ nie wiesz z kim masz doczynienia. To jak traktowanie ludzi jako przedmiotów, jak nie ten to inny. Ktoś kto naprawdę potrzebuje pracy zagryzie zęby i będzie poniżany i nieszczęśliwy tylko dlatego, że dał się wciągnąć w taką "płapkę".

Zastanawiam się jak to się nazywa, ale jedynce co mi przychodzi do głowy to "łapanka" bo to nie są ludzkie metody. Mało tego, nie dość, że nie wiesz gdzie potencjalnie masz iść to jeszcze nie znasz szczegółów oferty np. co oznacza "udział w projecie"?
Czy to znaczy, że "nie zatrudnimy Ciebie ale zrobisz coś dla nas" ?
Co się kryje pod tym dziwnym światem "wyłapywaczy" i firm, które nie chcą jawnie podawać kim są? 

Firmy takie jak Google, IBM, Amazone, Apple to znane marki i wiesz już, że taki duży światowy gigant, to korporacja, ze swoją strukturą, procesami itp... A w korporacjach w jakich miałem przyjemność pracować, nie było podejścia polegającego na rozwiązywaniu konfliktów czy problemów ale najczęśćiej "spychologia", "gnojenie ludzi" i każdy na każdego donosi swoim szefom o tym, że "Jasiu zrobił kupkę na środku przedszkola, proszę Pani kierowniczko".

Jeśli znasz choć nazwę firmy (klienta) rekruterów, jesteś w stanie już coś powiedzieć na jej temat, choćby poprzez zorientowanie się w działalności danej firmy. W jakiej branży się specjalizują. 

Kiedyś miałem wyobrażenie, że banki to jedne z najstabilniejszych i idących z duchem czasu instytucje - nic bardziej mylnego! 

Banki jako wielkie korporacje, są zakopane w swoich procedurach korporacyjnych, a im więcej ludzi tym więcej problemów i gorzej tym zarządzać, bo każdy ma swoje zdanie. Ile on już tu nie pracuje, ile on ma doświadczenia, jaki on nie jest mądry, nie można go zwolnić, bo jest bardzo cenny, nie podważa się zdania szefa, czy kierownika (choć przez wszystkich może być mylne). "Co wolno wojewodzie to nie Tobie smrodzie". Tak się traktuje ludzi  w wielkich korporacjach w polsce. 

Technologicznie banki pomimo wprowadzenia innowacyjnej technologii zbliżeniowej kart płatniczych, które postrzegane jest jako "innowacyjne" nadal tkwią w starych technologiach, choćby aktualizacja sprzętu wymaga kilka miesięcy akceptacji, instalacji, konfiguracji itp. - jak widać o czas się nie martwią, bo to ludzie muszą się zmieścić w czasie a nie procedury.

Prawdopodobnie nadal w korporacjach w polsce zastaniesz jako najnowszy system Windows XP, rzadziej ale powoli nadal wdrażany w żłówim tempie Windows 7, bo przecież każdy zna te systemy. 
Korporacje płacą grube miliony za oprogramowanie Microsoftu zarówno licencje na Systemy operacyjne jak i MS OFFICE potrzebny w pracy biurowej. Czy inne serwery, ale pewnie dlatego, że chcą czuć bezpieczeńśtwo, "my płacimy to wymagamy jakości na odpowiednim poziomie". Inną kwestią jest wykwalifikowana kadra administratorów znających technologię Microsoft i wspaniałe "zarządzanie domeną i Active Directory". 


Moim zdaniem:
Łatwiej jest tym co w tym pracują niż tym, którzy mają na tym pracować.

Dlaczego nie dać pracownikowi wolnej ręki ? Dlaczego nie podejść do tematu w sposób taki aby to pracownik powiedział na czym mu się najlepiej będzie pracowało? Dlaczego pracownik jest zmuszony  do pracy na platformie określonej przez jakieś przyjęte normy. Na dodatek czasem trzeba pracować na jednym monitorze 15 czy 17", gdzie kod programu wychodzi poza monitor, bo nikt nie stosował stylu kodowania do 80 znaku.

Dosyć już tego! Nie chodzi o narzekanie ale o wyciągnięcie na jaw brudów, które mogą czaić się gdy nie wiemy z czym mamy doczynienia!

Reasumując, zbyt dużo zła czai się za czymś co nie jest ujawnione, a ja sądzę, że każdą propozycję rekrutacyjną trzeba dobrze poznać, zwłaszcza gdy ma się już pewne wymagania w stosunku do nowego miejsca pracy i bez podania szczegółów takich jak:

1. Miejsce pracy (nazwa klienta  / firmy) (czy korporacja czy mniejsza firma)
2. Technologie wykorzystywane (jakie technologie języki programowania, frameworki)
3. Atmosfera / warunki pracy (jakie sprzęty, jakie systemy, co można a co jest zablokowane przez administratorów, czy ludzie sa na poziomie czy gnoją innych)

Lepiej nie pchać się w rekrutacje, bo nigdy nie wiesz czy twojego CV nie otrzyma Twój szef ;)

[Joke] O programistach javy!

W pracy siedzi dzwóch kumpli aż w końcu jeden  postanowił zapytać drugiego.

- Ej Ty! Po której jesteś stronie ?

A ten odpowiedział:

- Serwera!

[Java + GWT] Horrible

  Jako programista miałem jakieś 1,5 roku temu przyjemność, albo raczej nieprzyjemność (wyjaśnie w dalszej części posta) poznania technologii GWT co oficjalnie oznacza Google Web Toolkit. W wielkim skrócie polega to na tym, że piszemy w większści w javie i raczej nie wiele jest plików jsp css js. Zwłaszcza tych ostatnich ponieważ kod JAVA jest kompilowany do JavaScript. 

  Najcześciej argumentem przeważającym wybór technologii jest między innymi to że w plikach konfiguracyjnych możesz określić na ile silnikow przeglądarek chcesz kompilować. Czas kompilacji jest tym dłuższy im wiecej jest silników przeglądarek.

  Biblioteki takie jak GWT, GXT, framework MVP4G zawierają odpowienio mechanizmy i komponenty ktore mają ułatwiać i szybciej tworzyć aplikacje webowe oparte o GWT.

  Do komponentow tych należą comboboxy (select w html) inputy konkretnych typów takich jak TextField, NumberField, itp. 

  Osobiście na początku nie przeszkadzało mi w tym nic, prócz czasu kompilacji i uruchomienia serwera podczas tworzenia aplikacji z tutoriala.

  Kolejnym dużym zaskoczeniem był czas kompilacji w projekcie dość rozbudowanym nad jakim pracowałem zawodowo. Potem po jakimś czasie zaczęło mi to naprawdę przeszkadzać, a potem już tylko denerwować. Nie znam wszystkich projektów w świecie opartych o GWT, ale te dwa, które poznałem wykorzystują dodatkowo framework Spring. Nie znając innych frameworkow wydawało mi się, że spring jest genialny. Aż przeszedłem do zupełnie nowego i lekkiego projektu opartego o Spring MVC. Byłem mile rozczarowany ile rzeczy można prościej zrealizować.

  Przede wszystkim w tym nowym projekcie było coś co zawsze rozwija i co bardzo lubię. Separacja plikow .css .js .jsp (zawierających html) i .java. Nie chodzi tu o samą separację, bo w projektach GWT też pliki były odseparowane, ale bardziej chodzi mi o to, że zaczynasz mieć większą kontrolę nad kodem który tworzysz a przede wszystkim dotykasz plików, króre w technologiach webowych i wszelkich podstawach tworzenia stron WWW są kluczowe i bardzo rozwijające. Zwłaszcza że tworzymy już w HTML5!

  Uważam za największą przyjemność tworzenie i modyfikcję plików CSS JS HTML osobno, ponieważ efekt zmian jest automatyczy po odświerzeniu przeglądarki co powoduje krótszy czas realizacji oraz daje przyjemność z tego że od razu możesz zobaczyć to co napisałeś i czy działa / wygląda tak jak tego oczekiwano.

  Lubie patrzeć na efekty swojej pracy a nie oczekiwać minuty i godziny na kompilacje a potem jeszcze na np. restart servera tomcat jak to jest w przypadku GWT. Jeśli liczy się czas wykonania zadania uważam, że java i cały Spring jest zbyt ciężkie w połączeniu z GWT albo z wadliwym GXT czy nieźle pojechanym MVP4G. Jeszcze nie miałem okazji poznać Vaadina, ale na samą myśl, że jest to oparte o GWT już mi się źle robi.


Inne nieprzyjemności wynikające z korzystania z GWT to :
  1. Kodu JS skompilowanego przez GWT nie jest sie w stanie wydebugować w przeglądarce. HTML wygenerowany przez GWT jest bardzo skomplikowany i nie jest łatwy w debugowaniu. Chyba ze kazdemu komponentowi przypiszesz id lub klasę. Ale w dwóch projektach z którymi miałem styczność nikt o to nie dbał.

  2. Do debugowania kodu klienta musisz używać devmode jednak wymaga on uruchomieniu serwera a potem podpina sie pod kod.

  3. Zmiana interfacu na klasach wymaga kompilacji. Kolejna strata czasu. (nowe metody, klasy itp.)
  4. Metody komponentów nie działają wedle życzenia. Np. W Comboboxie są chyba metody setValue setFieldValue i setRawValue()
    W tak przygotowanym interfasie nie wiesz ktorej z metod użyć a takich kwiatków jest więcej.
  5. Programując w GXT musisz znać podatawy, że ładowanie do comboboxa danych wywoływane jest asynchronicznie poprzez jakiś loader o ktorym też musisz wiedzieć. Wybranie jednego rekordu z listy wymaga nadpisania metody ładującej bo inaczej domyślny mechanizm nie załaduje Ci opcji z selecta.
    Dlaczego trzeba mieć tak ogromną wiedzę do tego wszystkiego ? Musisz wiedzieć o isnieniu loadera, proxy, Rpc, asyncCallback, Interfaceach servisow i ich implementacji i asynchronicznych wersji interface'u.
  6. W GWT i GXT musisz cały czas liczyć pixele. Bawić się wysokością i znów masz metody setHeight() setSize i setMinHeight() którą z nich wybrać?
  7. Zanika twoja choćby najmniejsza umiejętność pisania w JS i przestajesz sie rozwijać. Tracisz umiejętność lub wiedzę na temat komunikacji z Http, bo wszystko robisz w javie. Nawet jak stworzysz serwlet czy kontroller w springu to i tak nie masz pelnego odwzorowania.
  8. Jeden kod na wszystkie przeglądarki to mit ponieważ są momenty w których musisz stosowac hacki takie jak konstrukcje sterujące if (IE) {...} else if (Chrome) {...} itp.
  9. Często zdarzają się problemy z renderowaniem widoku czy problemy behavioralne z w działaniu aplikacji których przyczyną jest GWT lub GXT nie z winy programisty użytkownika. W takich chwilach trzeba zastosować jakiś workaround albo przegrzebywać klasy GXT i override na metodę, która akurat zapomniała czegoś wykonać.
  10. GWT wymaga sporej mocy obliczeniowej i zajmuje dużo pamięci. Im więcej rdzeni i RAM tym kompilacja i uruchomienie staje się łatwiejsze. Strasznie jest zasobożerne i często trzeba zmagać się z ustawianiem parametrów na tomcacie, w argumentach GWT itp.
  11. Aktualność - tu straszna lipa. Wychodzą coraz nowsze wersje przeglądarek. Np. Firefox, do którego należy instalować coraz to nowszy plugin GWT a często jest tak że najnowszej wersji pluginu GWT nie ma. Jesli potrzebujesz uruchomić devmode to lepiej nie aktualizuj FireFox'a.
   Oto 11 powodów dla którch technologię GWT uznaje za naprawdę uciążliwą. Odradzam wszystkim i już nigdy nie wrócę do tej technologii. Reasumując nazywam to Gówno Wartą Technologią! 

  Z całym szacunkiem do Google, ale naprawdę wydaje mi się to strzałem w stopę. Dziś zamiast aplikacji okienkowej w przeglądarce modny i godny polecenia jest Twitter Bootstrap. Sam go używam zarówno w projekcie zawodowym jak i prywatnym :-)
Osobiście wolę wyrwać sie z Javy i iść w stronę PHP, bardzo przyszłościowym JS, HTML5 i w końcu poznać Pythona ! To są języki którymi warto się zainteresować!
Polecam i jeśli macie jakieś argumenty za i przeciw zachęcam do komentowania :-)

[Tutorial] Jak stworzyć swoją własną subdomenę w serwisie Linode
How to create your own subdomain on Linode.


[ PL ]:
Poszukując informacji na temat stworzenia własnej subdomeny, napotkałem na różne artykuły, posty i fora. Część z nich była lepsza a część moim zdaniem gorsza. Co prawda ktoś nawet stworzył Tutorial stworzenia subdomeny w serwisie Linode, jednak nie wszystko było w tym tutorialu jasne i przejrzyste.

Wiadomym jest przecież, że jeśli ktoś jest znawcą i specjalistą w danej dziedzinie to nie będzie poświęcał się temu by dokładniej przybliżyć pewne terminologie czy czynności, ponieważ wydają się one być oczywiste. Tak - oczywiste, ale dla piszącego, publikującego artykuł, post, tutorial czy wypowiadającego się na forum lub w innej formie prezentacji. Jest to bardzo zgubne podejście, ponieważ zawsze może trafić się ktoś "świeży", ktoś "newbe", ktoś kto do tej pory nigdy tego nie robił a chce się tym zająć. I wtedy jest problem. 

Chcemy, czasem tylko wykonać pewne czynności, bez zastanawiania się co jest w środku, choć może to nie najlepsze podejście, ale gdy znajdziemy więcej czasu, możemy zgłębić interesującą nas tematykę i poszerzyć horyzonty przeglądając dokumentację, książki, blogi, WIKI i inne źródła, które wprowadzą nas w kanwy danej tematyki. 

Gdy czasem szukam informacji na jakiś temat i potrzebuję coś szybko rozwiązać i wykonać, to nie potrzebuję dywagacji na ten temat, tylko listingów z możliwie krótkim komentarzem.

W związku z tym że "Life is too short to write CRUD" zaczniemy szybki tutorial o tym,
Jak stworzyć swoją własną subdomenę w serwisie Linode.

1. Wymagania wstępne:
- Zarejestrowaliśmy się w serwisie Linode
- Postawiliśmy system operacyjny i odpowiednie usługi Apache, PHP, MySQL i inne na maszynie w serwisie Linode.
- Kupiliśmy nazwę dla naszej domeny

2. Czynności: 
  1. Podlinkowanie nazwy domeny i delegowanie domeny do serwisu Linode
  2. Utworzenie przestrzeni nazw dla subdomeny w serwisie Linode
  3. Konfiguracja apache i Virtual Hosts

Ad. 2.1. Podlinkowanie nazwy domeny i delegowanie domeny do serwisu Linode
  • Najpierw logujemy się na serwis "Linode"
 
  • Wchodzimy w zakładkę "DNS Manager"  
  • Następnie wybieramy "Add domain zone"
  •  Wypełniamy dane z ekranu:

 Gdzie:
- Domain - nazwa twojej domeny
- SOA Email - email do admina, np. : root@twojaDomena.abc

  • Klikamy Add Master Zone 
  • Zostajemy przekierowani na stronę:


 Ad. 2.1. Utworzenie przestrzeni nazw dla subdomeny w serwisie Linode
  • w sekcji "A/AAAA Records" dodajemy linkiem "Add a new A record" przestrzeń w postaci nazwy subdomeny.
  • W ekranie wpisujemy wartości jak na poniższym zdjęciu:
 Gdzie:
  • Hostname - nazwa naszej subdomeny (przestrzeń nazewnicza)
  • IP Addres - adres IP naszego serwera
  • Zatwierdzamy przyciskiem Save Changes.
 I widzimy już w tabeli z poprzedniego widoku nasz rekord z przestrzenią subdomeny (przedrostkiem) naszej głównej domeny.

W tym widoku zostały zamieszczone istotne informacje w sekcji NS Records. Są to serwery DNS serwisu linode dzięki którym będzie można zarządzać domeną.

W tym celu logujemy się do dostawcy nazwy domeny. W moim przypadku jest to portal "nazwa.pl"
  •  Wybieramy zakładkę "Panel klienta":
  • Przechodzimy w do "Twoje usługi"

  • Następnie wybieramy z "Listy domen" interesującą nas domenę:

  • i klikamy "konfiguruj"
  • Wybieramy następnie opcje "Zewnętrzne serwery DNS"
  • Uzupełniamy danymi z Linode dane z sekcji NS Records
  • Zatwierdzamy. Od tego momentu możemy w pełni zarządzać naszą domeną w serwisie Linode.

Ad 2.3 Konfiguracja apache i Virtual Hosts [ Gentoo ]

  • W tym celu logujemy się na nasz serwer z konsoli:
 root@localhost: ssh root@111.22.333.333

  • lub jeśli mamy wygenerowany klucz:
 root@localhost: ssh -i .ssh/key root@111.22.333.333

  • Po zalogowaniu przechodzimy do katalogu "/etc/apache2/vhosts.d"
 root@localhost: cd /etc/apache2/vhosts.d/

  • W tym katalogu stworzymy sobie plik test.pl.conf, oraz plik subdomain.test.pl.conf za pomocą edytora vi
# test.pl.conf


        ServerAdmin root@test.pl
        ServerName test.pl
        ServerAlias www.test.pl
        DocumentRoot /var/www/localhost/test/
        
                Options Indexes FollowSymLinks
                AllowOverride All
                Order allow,deny
                Allow from all
        

        ErrorLog /var/www/localhost/test/logs/error.log
        CustomLog /var/www/localhost/test/logs/access.log combined

~          

# subdomain.test.pl.conf


        ServerAdmin root@test.pl
        ServerName subdomain.test.pl
        ServerAlias www.subdomain.test.pl
        DocumentRoot /var/www/localhost/subdomain/

        
                Options Indexes FollowSymLinks
                AllowOverride All
                Order allow,deny
                Allow from all
        

        ErrorLog /var/www/localhost/subdomain/logs/error.log
        CustomLog /var/www/localhost/subdomain/logs/access.log combined

~          

  • Uwaga !!! należy utworzyć katalog logs w katalogu /var/www/localhost/subdomain !!!
  • mkdir -p /var/www/localhost/subdomain/logs
  • Pozstało nam wykonać ostatnią czynność:
# polecenie w konsoli ponownie ładujące konfigurację. 
root@test.pl: /etc/init.d/apache2 reload
  • KONIEC! nasza domena i subdomena działa pod osobnymi adresami.
Jeśli zauważyłeś brak lub coś zostało pominięte napisz w komentarzu!
Pozdrawiam Maveius

[Google Search] Too big font in Google search results

Google probably testing new layouts in Google search site, but header results are too big for me. I found the solution: In Chrome: install StyleBot addOn and insert the css from http://stylebot.me/styles/5083 In Firefox: install Stylish addOn and insert the css from http://stylebot.me/styles/5083 If You prefere other font size than 16px and 14px, You can change font size as you wish. Enjoy!

[SOLVED] Java, Hibernate and, @ManyToMany annotation - no results from one of Entity

I have an odd problem with relation
@ManyToMany
. In my case I had a Set as collection. The problem was my collecion of Bars element returns 0 rows. My exaples class was like this:
/**
 * Foo is NOT owner of relation
 */
class Foo {
  @ManyToMany(fetch = FetchType.LAZY, mappedBy = "foos")
  Collection bars;
}

/**
 * Bar is owner of relation
 */
class Bar {

  @OneToOne(fetch = FetchType.EAGER, mappedBy = "bar", optional = false, cascade = CascadeType.ALL)
  private RequiredFieldA requiredFieldA;

  @OneToOne(fetch = FetchType.EAGER, mappedBy = "bar", optional = false, cascade = CascadeType.ALL)
  private RequiredFieldB requiredFieldB;

  @OneToOne(fetch = FetchType.EAGER, mappedBy = "bar", optional = false, cascade = CascadeType.ALL)
  private RequiredFieldC requiredFieldC;

  @ManyToMany(fetch = FetchType.LAZY)
  @JoinTable(name = "BAR_FOO",
            joinColumns = @JoinColumn(name = "BAR_ID"),
            inverseJoinColumns = @JoinColumn(name = "FOO_ID"))
  Collection foos;

}

Solution:
1. I tried change
FetchType
from LAZY to EAGER - it works but I must save LAZY.
2. I decided to check what query Hibernate generated when
FetchType
is LAZY.

Results:
In my Bar entity I have required fields but in my Database i haven't got it. But the most odd is that hibernate generated INNER JOIN with only one (only first) field. This returns 0 rows becouse my first required field has no row in database for entity Bar.

The question is:
- Why FetchType.EAGER has no problems with required fileds?
- Why FetchType.LAZY INNER JOIN with ONLY ONE of required fileds (and join with only the first field)?

[SOLVED][ORMlite + Android Studio] Problem: "Could not find raw directory which is typically in the res directory"

W części tutoriala pod linkiem http://code.google.com/p/bazy-danych-2-projekt/wiki/LiteTworzenieTabel znajduje się instrukcja jak wygenerować plik konfiguracyjny dla ORMLite w środowisku Eclipse na wykorzystywanej tam wersji androida. Jednak problem pojawia się gdy korzystamy z najnowszej wersji android SDK + Android Studio v. 0.4.0 (opartego na produkcie JetBrains InteliJ IDEA ) po utworzeniu i uruchomieniu klasy DatabaseConfigUtil może zdarzyć się, że otrzymamy błąd podczas procesu kompilacji co uniemożliwi wygernowanie pliku.
Komunikat błędu jest oczywisty: "Could not find raw directory which is typically in the res directory", co oznacza, że w metodzie nie możemy dostać się do katalogu res oraz raw w tym katalogu, ponieważ takie foldery nie istnieją. Zgodnie z nową strukturą katalogów nasze zasoby mogą nie znajdować się w tym samym katalogu co zdefiniowany katalog domyślny dla naszej klasy DatabaseConfigUtil w związku z tym należy wykonać następujące kroki:

1. Wchodzimy w ustawienia konfiguracji uruchomieniowej naszej klasy DatabaseConfigUtil

2. Następnie szukamy sekcji "Working directory" i wpisujemy lub wybieramy właściwą ścieżkę do katalogu głównego, w którym znajduje się katalog zasobów "res"


3. Zatwierdzamy zmiany poprzez "OK"
W tym momencie możemy utworzyć katalog raw w katalogu res jeśli wcześniej nie został stworzony albo zlecić utworzenie katalogu jeśli nie istnieje metodzie main klasy DatabaseConfigUtil
4. Teraz możemy wrócić do tutoriala.