środa, stycznia 29, 2014

Programiści są nieważni...

Skąd to wniosek?
Z moich zabaw z datami.
Każdy programista najmniej raz w życiu, a zwykle dużo częściej musiał się zmierzyć z datami.
Z tym, że są lata przystępne, że miesiące nie mają równej ilości dni, że przesuwa się godzinę dla czasu letniego i zimowego, że rok nie dzieli się na taką samą liczbę tygodni, że data i czas są jakby tym samym, ale nie tym samym.
No ogólnie z tym, że daty i czas to coś co mierzymy wg zasad które zaczynają się najmniej w okolicach starożytnego Egiptu...
Było to już źródłem niezliczonej liczby błędów, będzie źródłem jeszcze większej. Każdy rozsądny programista wie co należałoby z tym zrobić.
Zabrać i zbudować nowe, lepsze, bardziej przewidywalne i logiczne, do tego bazujące na jakichś sensownych założeniach...
Ale nie, świat nadal się trzyma uparcie tego reliktu dawno minionych epok...

A czemu? Bo z programistami nikt się nie liczy. Płacą nam dobrze bo po prostu trudno znaleźć szaleńców którzy sami, z własnej i nie przymuszonej woli będą się zajmowali programowaniem.
Ale nie jesteśmy ważni...

posted from Bloggeroid




Podobne postybeta
Czasoprzesunięcie
Czas = uwaga = zainteresowanie ;-)
Egipt, Tunezja, Londyn, whatever, czyli chcem na urlop
Pomysł
Linux umiera?

poniedziałek, stycznia 27, 2014

Spadochronowy atak na Wawel - czyli wolne GWT

Walczę teraz z kodem w GWTP, który ma przykrą właściwość, że jest po oby stronach i po stronie klienta i serwera...
Z tego też powodu co chwile musze wołać:
nice -n 19 mvn clean install && beep

Które buduje mi cały projekt.
Później tylko przerzucić drania do Tomcata i już można działać...
Tylko, że minęły ponad 2 minuty ;-)

Z tego też powodu zajmuje się teraz upiększaniem Wawelu który mam przed biurkiem.

Na razie wygląda to tak:



Widzicie Googlerzy? Przez was dewastuje taką ładną fototapete ;-)

posted from Bloggeroid




Podobne postybeta
BigInteger i liczby pierwsze ;-)
Jak walczyć z gigantycznym kodem w Java'ie, część 1 ;-)
Chciałem popsuć G1 i mi się na razie nie udało ;-)
Może mi ktoś wytłumaczyć po co istnieją GWT i GWTP?
Cywilizacja migających diod i lampeczek ;-)

niedziela, stycznia 26, 2014

Słuchawki bezprzewodowe dobre :-)

W ramach wydania zaoszczędzonych 8 PLN kupiłem sobie słuchawki bezprzewodowe ;-)

To był trochę eksperyment bo nie byłem pewien czy się w ogóle sprawdzą.
Ale okazuje się po 3 dniach używania, że sprawdzają się przednie :-)

Wyglądają tak:


Ich największą zaletą jest to, że można swobodnie łazić po całym mieszkaniu i nadal słyszeć :-)
Szczególnie sprawdza się to w różnych prezentacjach/wykładach z YouTube. Dziś przetestowałem to na wykładzie Gayle L. McDowell, autorki Cracking The Coding Interview.
Zwykle takie rzeczy oglądam z głosem na głośnikach bo tak jest łatwiej (ogólnie nie lubię słuchawek, może przez to że czasem w pracy siedzę w takowych przez 6 godzin gdy mam fazę na ciągłe kodowanie), ale w przypadku czegoś co trwa ponad godzinę słuchawki, szczególnie bezprzewodowe są niezastąpione ;-)


Podobne postybeta
No i są wyniki, ale sondażowe
Jakie by tu zadanie zrobić? ;-)
Ksiązki - nieksiążki ;-)
396 m2 ekranu
Ha! Amazon drukuje książki :-)

TimeToRead w Chrome Web Store

Wrzuciłem TimeToRead, w wersji 0.0.3 do Chrome Web Store.
Ktoś chce to zapraszam do używania.

Rozszerzenie nie posiada żadnego UI, a jego działanie widać tylko po tym, że artykuły w Pocket dostają tagi mówiąc o tym ile zajmie ich czytanie.


Po wybraniu tagu widzimy tylko artykuły, których czytanie zajmie mniej więcej podany czas lub krócej.
Działa to też w mobile:



Czy pomaga?
Mnie tak :-)
Gdy jadę do pracy lub z pracy i nie chcę utknąć w lekturze, której nie zdążę zakończyć w tramwaju to wybieram sobie 1,2 lub 5 minutówki i jestem w stanie parę obskoczyć przed zakończeniem jazdy.


Podobne postybeta
OAuth pokonany, wersja 0.0.1 TimeToRead gotowa ;-)
TimeToRead 0.0.2 - nowy tag i poprawki ;-)
TimeToRead w działaniu
Archos 101 i zgryz ;-)
Mroczne Materie - polecam, gorąco polecam :-)

piątek, stycznia 24, 2014

Chmura wygody ;-)

TimeToRead działa jak marzenie, ale ma jedną wadę.... Nie jest na serwerze...
Przez to dodaje tagi tylko wtedy gdy mam włączony któryś z komputerów z Chrome i zainstalowanym w nim TimeToRead.
Niestety ostatnie lata przyzwyczaiły mnie do magii ;-) do tego, że gdzieś tam w chmurze siedzą stada małych automatów które czynią mi dobro ;-)
Chwilowy pomysł jest by wrzucić sobie specjalną wersję TimeToRead na Raspberry Pi, a później może na Google App Engine. Choć to ostatnie ma wadę polegająca na ograniczeniach w transferze i mocy obliczeniowej.

posted from Bloggeroid




Podobne postybeta
Ofiara algorytmu
TimeToRead w Chrome Web Store
TimeToRead 0.0.2 - nowy tag i poprawki ;-)
TimeToRead w działaniu
Raz na jakiś czas ;-)

środa, stycznia 22, 2014

TimeToRead 0.0.2 - nowy tag i poprawki ;-)

No to zrobiłem kolejną wersję TimeToRead (wtyczka do Chrome, która taguje artykuły w Pocket tagami mówiącymi ile mniej więcej zajmie przeczytanie danego artykułu).
Dodałem tag "15 minutes or less", bo po zastanowieniu taki się przyda.
Poprawiłem też to, że czasem artykuł mógł dostać 2 lub więcej tagów co wyglądało tak:


Teraz po prostu wysyłana jest najpierw komenda do usunięcia wszystkich tagów wtyczki za wyjątkiem właściwego i dodawany jest właściwy.
Dodałem zamykanie okienka po autoryzacji.

Nadal nie ma żadnego wskazania, że rozszerzenie działa, poza tym że po jakimś czasie w Pocket pojawiają się tagi ;-)

Jak wymyślę jakieś UI to dodam może akcję rozszerzenia i wrzucę je do Google Web Store (jak się dowiem jak jest z limitami API ;-)).

Można zmiany obejrzeć na GitHub, albo pobrać TimeToRead (po pobraniu otwieramy Tools -> Extensions i przenosimy rozszerzenie myszem do rozszerzeń).

Jeśli ktoś miał poprzednią wersję, to nowa zrobi ponownie tagowanie wszystkich artykułów.


Podobne postybeta
TimeToRead w działaniu
OAuth pokonany, wersja 0.0.1 TimeToRead gotowa ;-)
TimeToRead w Chrome Web Store
Przenosimy .NET'a na inny dysk :-)
Nieznane skarby JDK - JConsole :-)

wtorek, stycznia 21, 2014

TimeToRead w działaniu

Po mniej więcej 24 godzinach używania TimeToRead (czyli wtyczki do Chrome, która dodaje do Pocketowych artykułów tagi wskazujące ile zajmie przeczytanie danego artykułu) stwierdzam, że to działa :-)
W tramwaju przeczytałem dziś kilkanaście artykułów wybierając te 1 minutowe lub 2 minutowe :-)

Stwierdzam też, że jednak trochę przesadziłem szacując prędkość czytania na 200 słów na minutę ;-) tyle jest dla tekstu na papierze, dla ekranu przyjmuje się 180, a jednak większość tekstów które ma w Pocket jest po angielskiemu... stąd chociaż zwykle trzymam się tej minuty przy tekstach minutowych, to możliwe, że obniżenie tej szacowanej prędkości czytania o 10% byłoby na miejscu.

Na razie TimeToRead zostało pobrane tylko przez kilka osób (chyba palce jednej ręki wystarczą by je policzyć ;-)), było już kilka feature requestów na Google+ ;-)

Jak ktoś chętny to zachęcam do pobierania wersji beta (tutaj jest instrukcja jak zainstalować), można też pobrać źródła, albo je obejrzeć na GitHub (taki hint, GitHub to "sieć" społecznościowa w której mam najmniejszy odzew społeczny ;-))


Podobne postybeta
TimeToRead 0.0.2 - nowy tag i poprawki ;-)
OAuth pokonany, wersja 0.0.1 TimeToRead gotowa ;-)
Bilety w górę, koszty w dół?
TimeToRead w Chrome Web Store
PocketTags 0.0.5 - to działa :-)

OAuth pokonany, wersja 0.0.1 TimeToRead gotowa ;-)

Przewalczyłem sprawę z autentykacją OAuth w Pocket ;-)
Przewalczyłem pobieranie danych z Pocket.
Przewalczyłem wyliczanie czasu czytania dla artykułów Pocket.
Przewalczyłem updatowanie postów w Pocket z tagami, które mówią o czasie potrzebnym do przeczytania postu.

Przy okazji dowiedziałem się, że chyba i tak będę musiał "zbankrutować" w Pocket, bo mam ponad 2300 artykułów do przeczytania i przy czytaniu 200 słów na minutę zajęłoby mi ich czytanie blisko 300 godzin ;-)

Efekt działania efektu mojej walki wygląda tak:


Jak widać każdy post w Pocket wzbogacił się o tag mówiący ile czasu potrzeba na przeczytanie danego artykułu.
Dzięki temu jadąc w tramwaju będę mógł na szybko przejrzeć 1 minutówki ;-)

Jak ktoś chce spróbować to zapraszam do pobrania (instalacja jest skomplikowana, zapisujemy plik na dysku, wchodzimy do rozszerzeń (chrome://extensions/) i przeciągamy rozszerzenie na przeglądarkę. Po czym zwyczajowe "tak zgadzam się" czy jak to idzie.

TimeToRead trafiło także na GitHub'a - TimeToRead w GitHub.
To już kolejny mój projekt w GitHub'ie którego nikt nie forkuje, ani nie klonuje, ani nic w ogóle z nim nie robi ;-)

Rozszerzenie działa tak, że w razie jak jest zautentyfikowane to w momencie startu aplikacji pobiera wszystkie posty od ostatniej zmiany (albo wszystkie posty), po czym "przelatuje je" dodając im tagi.
Później co 5 minut (dokładniej 5 minut po ostatniej operacji) pobiera wszystkie nowe posty i robi im to samo.
Jak na dziecko jakichś 3 godzin to nie jest źle ;-)


Podobne postybeta
Jak zrobić plik OVPN (dla OpenVPN) w wersji unified format?
TimeToRead 0.0.2 - nowy tag i poprawki ;-)
TimeToRead w działaniu
TimeToRead w Chrome Web Store
OAuth mnie denerwuje ;-)

niedziela, stycznia 19, 2014

OAuth mnie denerwuje ;-)

Mam pomysł.

Chcę narzędzia, które "przeleci" wszystkie artykuły, które mam w Pocket, pobierze dla nich liczbę słów i zakładając, że czytam  z prędkością 200 słów na minutę wyliczy czy dany post znajduje się w grupie rzeczy, których przeczytanie zajmie do minuty, do 2 minut, do 5 minut, do 10 minut, do 30 minut czy jeszcze więcej.
Wiedząc do której grupy zalicza się dany post, narzędzie powinno dodać do tych postów odpowiednie tagi.

Nawet "zasugerowałem" przez tweet'a Pocketowi taki ficzer (zróbcie retweeta to jest minimalna szansa, że ktoś w Pocket to przeczyta i może dodadzą taki ficzer ;-))

Ale nie muszę czekać na Pocket'a, w końcu mają API, które ma 2 metody których potrzebuję, jedna to retrieve, która pozwoli pobrać listę postów (a jednym z pól dla artykułu jest words_count), a druga to modify, która  przez tags_add pozwala dodać tagi.
Ale trzeba się zautentykować przez OAuth....

I zamiast zrobić coś w stylu:
list=retrieve();
for (article in list) {
minutes = article.words_count / 200;
tag = "more than 30 minutes";
if (minutes<=1) tag="under 1 minute";
else if (minutes<=2) tag="under 2 minutes";
else if (minutes<=5) tag="under 5 minutes";
else if (minutes<=10) tag="under 10 minutes";
else if (minutes<=30) tag="under 30 minutes";
addTag(article,tag)
}
Muszę się paprać z OAuth....

Ja wiem, że trzymanie usera i hasła jest złe, ale jest też dużo prostsze ;-)

OAuth jest też niewdzięczne bo trzeba machać tymi tokenami straszliwie.

Na razie próbuję z rozszerzeniem dla Chrome, na szczęście kod dla OAuth już jest, Google go napisało, a ja lekko zmieniłem gdy walczyłem z Chrome2Chrome...
Ale z czegoś do odpalenia raz na jakiś czas robi mi się rozszerzenie, które musi mieć ikonkę, jakieś UI....
Ohyda ;-)

Ale, albo to, albo będę musiał ogłosić w Pocket bankructwo i przyjąć, że już nie "spłacę" swojego długu, który zaciągnąłem wrzucając doń ponad 1000 historii, których jeszcze nie przeczytałem ;-)


Podobne postybeta
Ładna piosenka z Buffy :-)
OAuth pokonany, wersja 0.0.1 TimeToRead gotowa ;-)
TimeToRead 0.0.2 - nowy tag i poprawki ;-)
Trudniej jest lepiej... część druga, bohater odkrywa, że da się łatwiej - czyli opowieść o AccountManagerze w Androidzie
Python for Android vs. AppInventor - 2:0 ;-)

sobota, stycznia 18, 2014

120 km/h, czyżby nowe 140 km/h? ;-)

Od paru jazd miedzy miejscem spania, a domem i domem a miejscem spania robię eksperyment.

Zwykle wpadając na autostradę (A4 i A1) po której przejeżdżam około 130 km (z trochę ponad 150 km całej trasy) przyciskałem gaz i rozpędzałem swój pojazd do 140 km/h, by tylko zwolnić w tych miejscach gdzie przepisy mi tego nakazują.
Ale tydzień temu zwolniłem świadomie do 120 km/h i starałem się nie przekraczać 130 km/h.

Cała trasa wydłuża się o jakieś 7-10 minut, czyli zamiast 1:35, jadę 1:43-1:45.
Zważywszy, że wyjście do samochodu, załadowanie się, rozładowanie na miejscu, czasem tankowanie po drodze, oraz czasem gorsza pogoda, powodują, że i tak zawszę liczę, że jazda zajmie mi jakieś 2 godziny.
Stąd te kilka minut nie jest aż tak bolesną stratą.

Zyskuję na tym, że  mniej się denerwuję. Jazda jest luźniejsza.
Dodatkowo może się na to nałożyć mniejsze spalanie ;-) (tak o jakieś 10%) a to przełoży się też na niższą emisję CO2, co też nie jest do pogardzenia ;-)

Stąd wnioski są takie, że obniżenie prędkości ma sens.
Teraz tylko pytanie czy wytrwam w tej obniżonej prędkości? ;-)


Podobne postybeta
Autozdrada ;-)
Cena benzyny w górę, wydatki na paliwo w dół ;-)
Myślenie = Szybka jazda
Przemyślenia autostradowe
"Demon" prędkości

czwartek, stycznia 09, 2014

100 dni z Linuksem ;-)

OK, jak policzyłem dziś mija 100 dni od kiedy w pracy używam Linuksa, dokładniej Ubuntu 12.04.

Jakie wrażenia?

Jest nieźle, coraz częściej w domu na Windows 7 łapię się, że chcę użyć czegoś czego używam w pracy na Ubuntu ;-)

Co ciekawe najbardziej przydatną rzeczą, którą ma Linux a nie ma Windows jest dla mnie jedne z ficzerów Linuksowego pulpitu...  chociaż nieraz głosiłem, że desktop na Linuksie umarł ;-)

Tym ficzerem jest możliwość posiadania kilku pulpitów. Mam ich 4 i mogę się do nich dostać przez CTRL-ALT-strzałki, a okna przenosić między nimi przez CTRL-ALT-SHIFT-strzałki.

Strasznie mi tego ficzera brakuje w Windows.

Unity, którego się bałem i uważałem po paru zabawach na VM za coś szalonego działa, chociaż praktycznie go nie widzę.
W pracy używam tylko: Chrome, Eclipse'a, TortoiseHG, Spotify i terminala, w którym odpalam Midnight Commandera, Tomcata i Mavena. Czasem z rzadka jeszcze użyję DoubleCommandera.

Są rzeczy, które ssą bo są inne niż w Windows, albo ssą bo są po prostu do bani ;-)

WiFi.... Włączam hotspota w telefonie i czasem po chwili go widzę na liście sieci WiFi, a innym razem go nie widzę. Dopiero rozłączenie z aktualną siecią pokazuje mój hotspot.
We Windowsach można odświeżyć listę punktów dostępowych.

VPN, albo dla danego VPNa nie ma softu z GUI (stąd pracowego muszę odpalać pisząc junipervpn w terminalu ;-)), albo tak jak OpenVPN robi jakąś krzywdę sieci przez co teraz na moim netbooku gdzie też mam Ubuntu 12.04 jak się połączę z siecią to jeśli ją zmienię to nie działa routing ;-)
Btw. jak odpalę VPNa (tego z terminala) to mi znika ikonka sieci...

SSD + RAM... jak odpalę mavena, który zjada dużo pamięci kompilując kod (głównie GWT)  to czasem (tak można zaryzykować, ze raz dziennie) komputer popada w katatonię. Czasem udaje się go uratować przechodząc do jednego z tekstowych terminali (pod ALT-F1 do F6 chyba) gdzie można przeczekać, albo zabić mavena (nie zawsze się to udaje). Duża zajętość RAM i duże obciążenie CPU robią coś dziwnego maszynie.

Do teraz nie rozumiem logiki stojącej za ALT-TAB ;-), najdalej jak dotarłem to, że pokazuje mi najwyżej leżące okienko danego programu, jak chcę inne to muszę poczekać na tym okienku, albo je wybrać i użyć ALT-tylda. Nadal miewam z tym problemy.

Brakuje mi też programów. One tam zwykle gdzieś są, ale trzeba wiedzieć czego szukać, do tego niektóre nie są takie fajne jak te pod Windows, a inne jeszcze cierpią z powodu istnienia KDE/Gnome/Whatever i np. dziwnie fonty renderują.

Mimo tego jednak coraz częściej mnie nachodzi myśl by może na moim "głównym" laptopie zainstalować Ubuntu ;-)
Bo te głupie parę rzeczy z desktopa, jak przerzucanie pulpitów czy CTRL-ALT-T, a nawet ALT-tylda sprawiają, że PC daje się wygodniej używać.
Do tego wtyczka do compiza, która pozwala na płynne zoomowanie ekranu, na którym ciągle można coś robić....

Dla mnie Ubuntu z Unity to godny następca Windows 7. MiSie powinny pójść w tą stronę, a nie w jakieś kafelki i "typograficzny" interfejs wzorowany na oznaczeniach kolejki podmiejskiej....

Już prawie na 100% mój następny komputer będzie od urodzenia z Linuksem ;-)
Te 100 dni pokazują, że tego się da używać i nie tylko da, tego się przyjemnie używa. Tak przyjemnie, że komputer momentami staje się niewidoczny :-)

Czyli Linuksie przybywam.... No chyba, że się przestawię na Mac OS X.... w pracy się taka możliwość pojawiła ;-) plotka głosi, że jest praktycznie wszystko co w Linuksie, a na dodatek z ładnym pulpitem ;-)


Podobne postybeta
Dwa tygodnie z Linuksem - na razie na 4-
OS X po tygodniu - tak sobie
5 lat z macOS w domu ;-)
Windows 8 Preview - koszmar to za mało....
Macbook Pro Retina i OS X po 24 godzinach

środa, stycznia 08, 2014

Robimy krzywdę GWT ;-) czyli przekazujemy wartość z serwera do klienta, bez RPC ;-)

Robiłem dziś straszną rzecz w GWT ;-)

Cel był taki, chcę przekazać z serwera do klienta pewną wartość, ale nie chcę tego robić przez RPC.
Idealnie by było gdyby ta wartość była już w JS pobieranym przez stronę w trakcie ładowania.

Najpierw użyliśmy ciasteczka, ale z różnych powodów trzeba było z niego zrezygnować.

Stąd rozwiązanie jest taki ;-)

Robimy sobie servlet, może być nawet zwykły JSP, który nazwijmy sobie someValue.jsp treści mniej więcej takiej:

<%
String someValue = "Some value to pass to client";
%>
var someValue = <%=someValue %>

W miejscu zaś gdzie to musimy odczytać, np. w EntryPoint mamy:
private native String getSomeValue() /*-{
return $wnd.someValue;
}-*/;

Teraz tylko w HTMLu który mamy jako punkt startowy aplikacji wstawiamy:

<script src="someValue.jsp"></script>

I wszystko ;-)

Jak chcemy to zrobić ciut bardziej elegancko to można sobie pewnie popełnić servlet, który pobierze wygenerowanego za wczasu JS'a i przekaże go z doklejoną na początku naszą wartością.... (ale to nie fajne jest bo z cachem mogą być problemy).

Zapewne istnieją metody "bardziej po bożemu", ale przyznam, że szukałem trochę po sieci i nie znalazłem.


Podobne postybeta
Może mi ktoś wytłumaczyć po co istnieją GWT i GWTP?
Goto Go ;-)
Linki, czemu nikt nie używa linków?
Złe architekty ;-)
ToDo od Trello jako "oddzielna aplikacja"

poniedziałek, stycznia 06, 2014

Przez kaizen do minimalizmu ;-)

W kaizen jednym z istotnych elementów jest to, że nawet najmniejsza zmiana na lepsze jest dobra.

Minimalizm zaś mówi o tym, że posiadanie mniejszej ilości rzeczy jest dla nas dobre.

Ale by zostać minilalistą trzeba się pozbyć całej masy rzeczy..... A to jest trudne.

I tutaj pojawianie kaizen, że swoim pytaniem "co mogę dziś zrobić najmniejszego by zbliżyć się do celu?"

A gdyby tak raz na dzień, a jak to za często to raz na tydzień, albo i miesiąc wyrzucić, oddać albo nawet sprzedać jedną rzecz?

Nawet na początku, gdy się ma duże opory nie wyrzucić, a po prostu schować do pudełka i zamknąć w tym pudełku?
Jeśli przez tydzień, miesiąc czy 3 miesiące nie wyjmniemy tej rzeczy z pudełka to raczej nie jest potrzebna, a na dodatek przez czas trzymania tej rzeczy w pudełku i tak jakbyśmy jej nie mieli...

Wtedy można wyrzucić, oddać czy sprzedać. Z czasem pozbywania się niepotrzebnych rzeczy powinno stać się mniej bolesne, a więc i prostsze.

No i może staniemy się minimalistami? Albo chociaż odzyskamy trochę miejsca na nowe rzeczy ;-)

Ja chyba spróbuję.
posted from Bloggeroid



Podobne postybeta
"Fizyczny" projekt, jak zacząć?
Sprzątanie kaizen ;-)
Wyrzuć codziennie jedną rzecz - reedycja ;-)
Wegetarianizm kaizen - czyli ja bywać wegetarianinem bez zbytniego wysiłku ;-)
Cywlizacja? ;-)

sobota, stycznia 04, 2014

Trudne USB...

Kiedyś miałem problem przy podpinaniu urządzeń USB.
Bardzo często musiałem próbować dwa razy, a czasem i trzy by w końcu podpiąć pendrive do PC albo telefon do ładowarki.

Później życie stało się prostsze bo ktoś mi wytłumaczył, że niepotrzebnie się męczę, bo przecież zgodnie z zasadą, a może i standardem jest tak, że kabel wpinamy tak by rysunek na kabelku był u góry.

Świat stał się wtedy prostszy....

I byłby taki nadal gdyby nie jedno "ale" ... Rzeczywiście to z obrazkami u góry działa, ale powinno mieć jeszcze gwiazdkę, a gwiazdka prowadzić powinna do dopisku "tylko w przypadku używania kabla dostarczonego z urządzeniem" ;-)

Bo okazjuje się, że kabel dostarczony z urządzeniem, np. z Kindle Classic z tymże kindlem działa tak jak w opisie i rysunek jest u góry, ale gdy próbujemy go użyć do ładowania telefonu to już nie musi działać zasada "obrazek u góry"....
Tutaj to przez to, że złośliwce robiące Kindle montują złącze na odwrót niż producenci telefonów czy tabletów (tych, które mam).

Na szczęście po stronie kabla wpinanej do komputera jest jakby więcej konsekwencji ;-)

posted from Bloggeroid




Podobne postybeta
Małe USB jest wielkie :-)
Prawdziwie przenośny komputer ;-)
Flaker
Maszyny które robią BEEP :-)
Coraz bardziej zapomniany gadżet - USB Stick aka pendrive

czwartek, stycznia 02, 2014

Refactoring bez testów to proszenie się o problemy ;-)

W Bloggeroidzie mam sobie klasę, która służy do przechowywania danych o blogu.
Klasa nazywa się Blog.
Ma 4 pola i settery oraz getter... znaczy miała, teraz już nie ma setterów.
Bo czytając ponownie Effective Java postanowiłem przerobić Bloga w klasę, którą buduje się Builderem.

I wszystko OK, ale mam też klasę BloggerWrapper, która gada z Bloggerem.

Jest tam sobie mały parser SAXowy, który parsuje odpowiedź Bloggera. Do niedawna wyglądała metoda endElement tak:


 public void endElement(String uri, String localName, String qName) throws SAXException {
if (localName.equals("id") && blog!=null) {
blog.setBlogId(sb.toString());
} else if (localName.equals("title") && blog!=null) {
blog.setBlogName(sb.toString());
} else if (localName.equals("entry") && blog!=null) {
list.add(blog);
blog=null;
}
super.endElement(uri, localName, qName);
}

Ale po wprowadzeniu Buildera już blog nie ma setterów więc kod zmienił się w:


public void endElement(String uri, String localName, String qName) throws SAXException {
if (localName.equals("id") && blog!=null) {
blogBuilder.setBlogId(sb.toString());
} else if (localName.equals("title") && blog!=null) {
blogBuilder.setBlogName(sb.toString());
} else if (localName.equals("entry") && blog!=null) {
list.add(blogBuilder.build());
blogBuilder=null;
}
super.endElement(uri, localName, qName);
}
Wszystko cacy....
Jednak tak się składa, że blog to też nazwa zmiennej w metodzie owijającej klasę anonimową parsera....
Więc blog jest dostępny w tym kodzie i tak się składa, że jego wartość to null....
Więc cała banda ifów nigdy się nie wykonuje....

Poprawny kod, w miejsce blog!=null ma blogBuilder!=null.

Chciałem sobie porefactorować, żeby kod był ładniejszy, ale testów nie mam (do tego akurat testy też nie są najprostsze, chociaż można je zrobić) no i dostałem po zębach ;-)
Dawno tak fajnego błędu nie zrobiłem ;-)

Gdyby nie czujny użytkownik Bloggeroida to mógłbym tego nie zauważyć przez najbliższe parę tygodni i dziwiłbym się czemu dostaję słabsze oceny....


Podobne postybeta
Dalsze walki Androidowe
Niecne wykorzystanie refleksji... czyli jak poszukać tekstu w drzewie obiektów? ;-)
Jak zostać wrogiem wolności słowa ;-)
Umiejętność programowania pomaga :-)
Sztuczki tropiciela błędów, part 2 ;-)

środa, stycznia 01, 2014

Czy jesteś już post-PC?

Odpowiedz na te pytania:

1) Czy ostatnio instalowana aplikacja była instalowana na Twoim telefonie/tablecie, czy PC?
2) Częściej nowe, świeże aplikacje próbujesz na telefonie/tablecie, czy PC?
3) Częściej organizujesz ekran startowy swojego smartfona/tabletu, czy PC?

Jeśli masz więcej niż 1 odpowiedź, że na telefonie/tablecie to już jesteś post-PC ;-)

Nie przekonuje Cię to?

To odpowiedz na pytania:

1) W ciągu ostatnich 12 miesięcy widziałeś/widziałaś najbardziej nowatorską aplikację na telefonie/tablecie, czy PC?
2) Jeśli rozmawiałeś/rozmawiałaś ze znajomymi o jakiejś aplikacji, to była to aplikacja na telefon/tablet, czy PC?
3) Najważniejsze wyszukiwanie w ciągu ostatniego roku, takie które pozwoliło Ci uniknąć problemów, rozwiązało je, albo zaoszczędziło najwięcej czasu (bo np. na mapie było od razu widać gdzie jest ten budynek, który Cię interesował), miało miejsce na telefonie/tablecie, czy PC?

Jeśli nadal wychodzi Ci PC, to teraz dodatkowe pytanie, czy częściej próbujesz nowe aplikacje okienkowe, czy rozszerzenia do przeglądarki/aplikacje webowe? ;-)


Podobne postybeta
Nexus 7 sprzedaje się jak świeże bułeczki :-)
Jak zyskać dodatkowy miesiąc wolnego w roku?
Sprawdź godzinę wschodu i zachodu Słońca na komórce ;-)
Wiele desktopów i lupa - czemu Windows tego nie ma?
A jednak Pythona warto ;-)