michu

Reputacja

3,526

Głosów ogółem

użytkownik głosował za tyle razy
297
Użytkownik głosował przeciw tyle razy
33
  • Popularne pytanie
  • Taksonom
  • Samouk
  • Nauczyciel
  • Organizator
  • Zdyscyplinowany
  • Niezła odpowiedź
  • Komentator
  • Student
  • Autobiograf
  • Patrol obywatelski
  • Cofnął głos
  • Krytyk
  • Wsparcie
  • Redaktor
Prawdziwe imię
Michał Chaniewski
Członek od
7 miesięcy, 4 tygodnie
Ostatnio widziany
1 miesiąc, 1 tydzień temu
Witryna
http://michu3ci...
Miejscowość
Gdynia
Wiek
33

O mnie

Programista od 8 roku życia. Przez pierwsze dwa lata pisałem programy w BASICU na platformie "brulion A4". Przez następny rok rozgryzałem, dlaczego moje programy nie działają po wklepaniu w Atari 65XE. Potem już jakoś poszło...

Motto: "Walking on water and developing software from a specification are easy if both are frozen."

Pytania: 1

Odpowiedzi: 172

  • 2010-02-03 23:46:38 Zarządzanie czasem, freelancerzy?

    Jak dla mnie, GTD jest zbyt skomplikowane. Do zarządzania czasem w skali makro używam Google Calendar + Google Tasks, ale bez żadnych skomplikowanych podziałów itd... a do utrzymywania skupienia i zarządzania zadaniami w skali mikro - metody Pomodoro, która polega, w dużym skrócie, do dzielenia czasu na odcinki po około 25 minut + 5 minut przerwy i do przypisywania do nich konkretnych zadań do wykonania.

  • 2010-02-18 11:56:16 MySQL: kopiowanie pola

    O ile dobrze zrozumiałem, pytanie jest raczej o zmiany w strukturze tabel, a nie o samą replikację danych.

    Tak naprawdę to jest szerszy temat, określany czasem jako zarządzanie konfiguracją (configuration management) - proces którego zadaniem jest utrzymanie spójności systemu w całym jego cyklu życia. W takim najbardziej rozbudowanym zakresie to jest ściśle okreslony proces, składający się ze zdefiniowanych procedur, środowisk testowych itd. Ale nie o tym tutaj, więc tylko sygnalizuję i zachęcam, żeby sobie poczytać.

    Odpowiadając na samo pytanie - ja tego typu rzeczy robię w ten sposób, że każda zmiana na bazie danych jest opisana skryptem SQL. Nieważne czy zaczynam od skryptu pisanego "z palca", czy jest on tworzony za pomocą narzędzia do porównywania struktury baz danych - każda zmiana wersji w moim środowisku programistycznym powoduje powstanie skryptu. Skrypty te zawierają nie tylko instrukcje manipulujące strukturą tabel, ale też np. odpowiednie polecenia update czy insert, które dopasowują w razie potrzeby dane do nowej struktury, czy wypełniają nowo dodane słowniki, itd.

    Taki skrypt ma w nazwie numer wersji, tak zapisany z dopełnieniem zerami, żeby domyślne sortowanie systemu operacyjnego powodowało uporządkowanie w odpowiedniej kolejności (to się przydaje jak musi to przeglądać żywa osoba). Podniesienie bazy danych w środowisku testowym lub produkcyjnym sprowadza się wówczas do wykonania przygotowanych skryptów w kolejności numeracji.

    Do tego dochodzi zapisanie numeru wersji w bazie danych w oddzielnej tabeli - gdy wgrywam nową wersję aplikacji, to porównuje ona wersję bazy danych ze swoją aktualną wersją i automatycznie wykonuje te skrypty wprowadzające niezbędne zmiany.

    Wraz z aktualizacją aplikacji dystrybuuję zawsze wszystkie skrypty przyrostowe począwszy od początkowej wersji bazy danych. To pozwala na aktualizację do najnowszej wersji niezależnie od tego, w jakim stanie, w jakiej wersji znajduje się aktualizowane środowisko.

  • 2010-01-14 18:22:02 Książki programistów :: najbardziej wartościowe i godne lektury

    Hmm, zaczęło się nie od książek, ale od "Bajtków". Ktoś je jeszcze pamięta?

    Koniec podstawówki i początek liceum to była żółta książka o Pascalu, nie pamiętam dokładnie tytułu, ale pamiętam autora - Andrzej Marciniak.

    Potem mój nauczyciel informatyki podsunął mi "Foundations of Computer Science", po angielsku, opasłe tomiszcze omawiające podstawowe algorytmy. Dobra była i sporo mnie nauczyła.

    A potem? Z biegiem czasu nauczyłem się dzielić książki na dwie grupy. Jedne traktujące o temacie du jour, te które były mi potrzebne na bieżąco, do zapoznania się ze szczegółami tego, czym się w danej chwili zajmowałem. Druga grupa, która zaczęła się w tym czasie wyłaniać jest dużo ciekawsza, to są książki zmieniające spojrzenie na mój zawód, wprowadzające nowe paradygmaty, uczące "jak myśleć", a nie jak rozwiązać konkretny problem.

    Krótka lista na szybko, przy czym zaznaczam że są to książki napisane po angielsku - pracowałem jakiś czas jako tłumacz i na ogół męczą mnie nieskładne przekłady pisane przez informatyków, którym niestety nawet najlepszy redaktor nie jest w stanie już pomóc...

    • Coder to Developer, Mike Gunderloy
    • Writing Solid Code, Steve Maguire
    • Design Patterns, GoF
    • Patterns of Enterprise Application Architecture, Martin Fowler
    • UML Distilled, Martin Fowler
    • Pragmatic Programmer, Andy Hunt
    • Peopleware, DeMarco, Lister
    • Working Effectively with Legacy Code, Michael Feathers
    • Ship it! A Practical Guide to Successful Software Projects, Richardson, Gwaltney,
    • The Deadline, Tom DeMarco
    • Refactoring: Improving the Design of Existing Code, Fowler

  • 2010-01-15 00:39:49 Jaki jest Twój ulubiony komiks programistyczny?

    A autor pytania coś wklei? :p

    Oczywiście xkcd... timeout

  • 2010-01-28 19:54:29 Ruby On Rails vs Python [zamknięte]

    Tak naprawdę to jest złe porównanie. Możesz porównywać Ruby z Pythonem, natomiast Ruby on Rails to framework do tworzenia aplikacji internetowych oparty o Ruby - można go porównywać z Pythonem wspartym o Django, na przykład.

    I tu pytanie do znawców - Ruby on Rails implementuje wzorzec MVC z przyległościami. Django nie znam w ogóle, ale z pobieżnego przyjrzenia się dokumentacji mam wrażenie, że tam nacisk jest na widoki i model, natomiast nie dostrzegłem nic co spełnia rolę kontrolerów - więc pytanie brzmi: nie dostrzegłem, czy nie ma? Tzn. jaki konkretnie model programistyczny implementuje Django?

  • 2010-01-18 12:34:16 mod_rewrite - jak sprawdzić obecność z poziomu PHP

    Jakoś w ten deseń:

    <?php
     if( ! function_exists('apache_get_modules') ){ phpinfo(); die; }
     $result = false;
     if(in_array('mod_rewrite',apache_get_modules())) $result = true;
    ?>
    

  • 2010-01-19 08:45:33 Czy używacie słowa funkcja w środowiskach obiektowych?

    Do niedawna nie rozróżniałem, używałem zamiennie. Od czasu jak się zainteresowałem językami funkcyjnymi, zauważyłem że jakoś tak samoczynnie zacząłem używać pojęcia funkcja do "czystych funkcji", tzn. deterministycznych metod bez skutków ubocznych, a pojęcia "metoda" - do wszystkich pozostałych. Nie było to jednak świadome rozróżnienie, przynajmniej z początku.

  • 2010-01-19 21:59:11 Domyślne sortowanie tabeli w MySQL

    Domyślny porządek sortowania zależy od implementacji tego, jak są przechowywane rekordy. Standardowo (tzn. dla tabel MyISAM), jeżeli na tabeli nie było nigdy żadnych operacji DELETE albo UPDATE, to SELECT bez ORDER BY zwróci rekordy w kolejności wstawienia. Jeżeli coś się zmieniało, rekordy fizycznie zmieniały położenie w pliku bazy danych, albo powstawały dziury które były potem zapełniane, to kolejność może być nieco zamieniona i to jest chyba to, co obserwujesz w swoim przypadku.

    W przypadku tabel InnoDB, które używają indeksów klastrowanych dla klucza głównego (a zatem klucz główny wyznacza fizyczny porządek rekordów na dysku), SELECT bez ORDER BY zawsze da uporządkowanie wg klucza głównego. Ale to wynika jedynie ze szczegółów implementacyjnych, nie jest żadną regułą w sensie ogólnym.

  • 2010-01-21 13:34:31 Lepiej zwracać pustą kolekcję czy null?

    Jak to mówią, są dwie szkoły gotowania na gazie - Otwocka i Falenicka.

    Otwocka w tej sytuacji mówi - zwracaj pustą kolekcję, to nie będziesz musiał się później troszczyć o sprawdzanie czy nie dostałeś czasem nulla, po prostu się przebiegniesz po kolekcji. Jak będzie pusta to się nie przebiegniesz. Mniej kodu, mniej warunków logicznych, przejrzyściej. I nie musisz wiedzieć jak działa Twoja metoda wywołując ją - spodziewasz się kolekcji i zawsze ją dostaniesz.

    Falenicka mówi tak - zwracaj nulla, bo po co tworzyć zbędne byty. Prosty warunek po stronie konsumenta rozwiąże problem. W rezultacie mniej będziesz obciążał pamięć, zyskasz na czasie inicjalizacji obiektu kolekcji itd.

    Ja się zdecydowanie skłaniam ku pierwszej opcji. Jest przejrzystsza, stwarza mniej szans do wprowadzenia błędu do kodu, a zysk wydajnościowy jest tak niewielki, że w ogóle nie usprawiedliwia kodowania które każe Ci się troszczyć częściej o więcej.

  • 2010-01-24 17:55:55 Pytania z rozmów kwalifikacyjnych

    Ogólnie, ludzie nie potrafią rekrutować na stanowiska techniczne. Więc raczej się spodziewaj pytań "miękkich" - o poprzednie projekty, o szczególne osiągnięcia, o umiejętności. Mnie osobiście zadziwia jak rzadko się zdarza wypytywać kandydata o to, co jest meritum jego przyszłego stanowiska - tzn. kazać mu rozwiązać jakiś konkretny problem programistyczny. Mam za sobą około 10 różnych firm i 15 rozmów kwalifikacyjnych i jedynie raz czy dwa musiałem się popisać rzeczywistymi umiejętnościami - a nie tylko "zdolnościami komunikacyjnymi i dobrym PR". Szczerze mówiąc wkurza mnie to już... obiecałem sobie że jeżeli będę kiedyś jeszcze zmieniał pracę, to następny pracodawca będzie musiał przejść przez "moje interview" - tzn będzie mi musiał udowodnić, że wie jak się ocenia ludzi na stanowiska techniczne. Chociaż na razie się nie zanosi, bo jestem więcej niż zadowolony ze swojej aktualnej pracy...

    Aha, jeden merytoryczny test pojawia się dość często - rozmowa po angielsku. Ale to nie zmienia faktu, że tylko dwa razy w życiu pisałem kod lub rysowałem diagramy na tablicy w czasie rozmowy o pracę...