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, 3 tygodnie
Ostatnio widziany
1 miesiąc 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-01-19 15:57:34 Bazy danych - jak zaczynaliście? Jak zacząć?

    Zacznijmy od tego, że bazy danych są środkiem do osiągnięcia celu, a nie celem samym w sobie. Co ze "stworzenia własnej, niewielkiej bazy w MySQL" jeżeli w efekcie jedyne co uzyskamy to "własna niewielka baza" która nic nie robi?

    Co zatem jest celem? Ano, rzecz jasna, tworzenie aplikacji które z baz danych korzystają. I to w tym kontekście należy na bazy patrzeć. Zatem inaczej będziemy się bawić tworząc prostą aplikację do katalogowania własnych książek (tu za "bazę" pewnie wystarczy nam plik XML), inaczej robiąc program do zarządzania budżetem domowym (tu ze względu na dużą ilość operacji wybierania i przeliczania danych przyda się pewnie jakaś baza wbudowana typu SQLite, Firebird czy SQL Server Compact Edition), czy aplikację webową dla wielu użytkowników albo firmowy program typu kadry / płace (gdzie skorzystamy zapewne z bazy typu client/server, takiej jak MySQL, MS SQL czy Oracle).

    To tyle tytułem wprowadzenia.

    Jak ja zaczynałem? Muszę przyznać, że miałem ułatwione zadanie. W liceum (ech, kiedy to było...) chodziłem do klasy informatycznej... to była chyba pierwsza klasa profilowa informatyczna w województwie. Mój nauczyciel informatyki był bardzo sensownym gościem, który umiał nam przekazać podejście do programowania, nauczyć teorii i praktyki. Gdzieś w okolicy 3 klasy liceum (wtedy były 4) umiałem już korzystać z baz klient/server, łączyć je ze swoimi programami, projektować encje, normalizować do postaci 3NF i ogólnie - myśleć w kategoriach operacji na zbiorach danych, nie tylko algorytmicznych jak w tradycyjnych językach programowania.

    Jak zacząć?

    Polecam wymyślić sobie jakiś niewielki temat na aplikację webową albo desktopową, coś co nie będzie wymagało dużych nakładów pracy na interfejs użytkownika, ale wymusi zaprojektowanie struktury bazy, związków między relacjami (dla tych którzy nie wiedzą - w teorii baz danych 'relacja' to tabela, a nie powiązanie między dwiema tabelami), coś co nauczy nas jak korzystać z bazy z poziomu aplikacji - a w szczególności zagadnień typu:

    • Jak zapisać dane wprowadzone przez użytkownika?
    • Jak pobrać z bazy dane, przefiltrowane wg potrzeb, i wyświetlić je w aplikacji?
    • Jak usunąć lub zmodyfikować istniejące dane?

    Przykłady takich aplikacji? Oj, dużo. Prosty blog. Katalog książek i wypożyczeń. Lista zadań do wykonania. Terminarz. To wszytko już było, ale ucząc się właśnie dobrze brać się za takie zadania, bo wiele na ten temat zostało już powiedziane, napisane, jest kogo zapytać.

    Powodzenia :-)

  • 2010-01-28 15:41:34 Na czym pracujecie ???

    Co do zakupu notebooka - DELL i Lenovo, potem Toshiba i HP... Reguła jest prosta - do pracy raczej modele biznesowe. Dużo solidniejsze i rzadziej się zdarza, że zawiodą. Też nie byłem przekonany do HP, też mnie bardzo zawodził, ale potem przez kilka lat pracowałem na modelu biznesowym i sprawował się bez zarzutu.

    Na dzisiaj, nie pracuję na notebooku i nie zamierzam. W ogóle nie rozumiem idei notebooka jeżeli nie ma się wyraźnej potrzeby bycia mobilnym - w takim urządzeniu wszystko jest gorsze, począwszy od wyświetlacza, przez wydajność dysków, po możliwości rozbudowy.

    Odpowiadając na pytanie "Na czym pracujecie" - ja bardzo dużo pracuję w domu, dlatego mój komputer domowy jest także moim narzędziem. Dobry rzemieślnik inwestuje w swoje narzędzia - dla mnie to, że komputer coś robi, powinno być totalnie niezauważalne i nie przeszkadzające w pracy, nie wybijające z koncentracji. Kompilacje jak najkrótsze, baza danych błyskawiczna... itd. No i poza tym jako zaawansowany fotoamator pracuję ze zdjęciami, z obróbką dużych plików RAW, więc siła procesora i ilość pamięci też są bardzo ważne.

    Zatem używam dość rozbudowanej konfiguracji. Quad Core 3 GHz, 16 GB pamięci, dysk systemowy - macierz RAID 0 z dwóch dysków SSD, dysk na dane - macierz RAID10 z 4 dysków Velociraptor, do tego 2 karty graficzne Radeon 3870 i trzy monitory 24". Dwa najtańsze jakie były, środkowy - porządny Eizo do obróbki grafiki, wszystkie regularnie kalibrowane. Jako system - Windows 7, oczywiście 64-bit.

  • 2010-02-02 10:26:13 Jak to jest z tymi błędami i opensource?

    Nie do końca. Wszystko zależy od społeczności wokół projektu. Przy wielkoprofilowych projektach open source, gdzie jest aktywna społeczność, wielu pogramistów - na pewno znalezione błędy usuwane są szybciej. Krótszy cykl wydawania produktów ułatwia też szybkie dotarcie poprawki do użytkowników. Ale takie projekty to jest niewielki ułamek ogólnej liczby projektów open source - w ogólnym przypadku, śmiem twierdzić że oprogramowanie closed source, którym zajmuje się kilka (naście/dziesiąt) osób, którym za to ktoś płaci, jest naprawiane szybciej.

    Ale to dotyczy błędów, które zostały znalezione. Co z samym ich wyszukiwaniem?

    No i tu się pojawia największy mit open source - przypowiastka o większej liczbie oczu patrzących na kod, co ma się przekładać na większą wykrywalność błędów.

    To tak jak z tym, że gdyby wszyscy ludzie byli przyzwoici, to wszystkim by się znacznie lepiej żyło. Możliwe? W teorii tak. Dobre? Jak najbardziej. Wykonalne? W praktyce nie.

    Kto z Was ostatnio, altruistycznie (tzn. nie będąc członkiem zespołu), przeglądał kod aplikacji open source? I to nie z ciekawości "jak to działa", ale na tyle uważnie i z takim zrozumieniem, by wykryć cudze błędy? Poza nielicznymi specjalistami od bezpieczeństwa systemów, którzy takim rzeczami zajmują się zawodowo (i, ciekawostka, pewnie biorą za to pieniądze od instytutu który ich zatrudnia), oraz osobami, które chcą zachować informacje o lukach dla siebie i na swój użytek, mało kto to robi.

    Obawiam się, że większość błędów w projektach open source jest znajdowana dokładnie tak, jak w projektach closed source - przez ich użycie, mniej czy bardziej świadome black box testing.

    Jedyna przewaga projektów open source w kontekście naprawiania błędów - mówię jedyna, ale nie mówię że mała, bo jest ogromna - jest taka, że jeżeli się posiada odpowiednią wiedzę, to po natrafieniu na błąd który nam żyć nie daje można go samodzielnie poprawić i wysłać do autorów patcha, po czym cieszyć się działającą aplikacją nie czekając na oficjalny release poprawki. Sam kilka razy z tej możliwości skorzystałem i przyznaję, daje to sporą satysfakcję... :)

  • 2010-02-04 13:37:32 Trzymanie plików użytkowników na dysku, czy w bazie danych

    Problem z gatunku trudnych. Trzymanie w bazie ma tą zaletę, że pliki są przy danych je opisujących - więc nie ma problemu z synchronizacją jednego z drugim. Ponadto można łatwo wprowadzić mechanizmy zabezpieczeń. Ułatwiony jest backup. Wadą jest to, że bazy danych to raczej nie są przystosowane do przechowywania dużych rozmiarem binariów. Na dłuższą metę - jak przestaje wystarczać jedna maszyna - to się zaczyna robić mocno kłopotliwe. No i obciążenie silnika bazy danych jest znaczne.

    Ja się skłaniam więc ku przechowywaniu tego typu "załączników" niezależnie od bazy. Zalety: możliwość partycjonowania po wielu serwerach, możliwość nawet w przyszłości łatwego przepchania przez sieć dystrybucji treści (Content Distribution Network). Trzeba dobrze przemyśleć mechanizmy wiązania ze sobą plików na dysku i rekordów w bazie danych, ewentualnie na przyszłość - partycjonowania i balansowania tych zasobów na wielu maszynach, ale efekt jest opłacalny, choćby w samym tym fakcie, że takie pliki można serwować po czystym HTTP, bez przetwarzania server side - co za tym idzie, nie obciąża się tak procesora serwera, a w dodatku w razie potrzeby można użyć tanich i mało kłopotliwych w eksploatacji serwerów na same serwowanie plików.

  • 2010-02-15 10:50:10 Generowanie CSS

    Samo dynamiczne generowanie CSS w sumie ma trochę sensu - choćby dlatego, że można wówczas używać choćby i zmiennych, co pozwala na łatwe zmodyfikowanie koloru w kilku miejscach itd...

    Rzuć okiem na ciekawy preprocessor do CSS o nazwie Less - wersja dla PHP jest tutaj.

    Jeżeli zaś chodzi o samo prezentowanie różnych arkuszy stylów dla różnych przeglądarek, to moim zdaniem najlepiej jest przygotować bazowy arkusz dla wszystkich, a potem za pomocą tzw. komentarzy warunkowych dołączać tylko arkusz nadpisujący to, co w przypadku IE modyfikacji wymaga. PHP do tego akurat nie potrzeba. Składnia wygląda tak:

    <!–[if IE 6]>
    <link href=”../ie6.css” rel=”stylesheet” ………. />
    <![endif]–>
    

    Więcej, z przykładami jak rozpoznawać różne wersje IE, tutaj.

  • 2010-01-29 12:06:19 Wybór języka - Java, C# czy może inny?

    Bardzo ładnie nam się Koleżanko przedstawiłaś. Odpowiadając na Twoje pytanie - wszystko jedno. Każdy z tych dwóch będzie świetnym wyborem w kategoriach aplikacji, które wymieniłaś. Ja jestem zdeklarowanym zwolennikiem C# ale to tylko osobista preferencja - nie jestem w stanie Ci podać żadnych naprawdę istotnych argumentów dlaczego akurat mój ulubiony język miałby być obiektywnie lepszy od Javy. Tak naprawdę między tymi dwoma wybór jest prosty - bierz ten, który Ci lepiej "leży pod palcami". C# jest trochę nowszy i pewne rzeczy skopane w Javie poprawił, ma do tego świetną i dobrze uporządkowaną bibliotekę standardową. Java z kolei ma większą bazę użytkowników, i silniejszy ruch wokół tzw. "dobrych praktyk", a także większą ilość dostępnych frameworków i narzędzi open source. Ale dla chcącego nic trudnego w obu przypadkach.

    EDIT: "Przeciętny umysł"? Nie ma czegoś takiego. Są umysły niewyćwiczone albo niezaangażowane. Osiągniesz tyle, ile włożysz pracy. Ile razy słyszę, że mam talent, mam jedną odpowiedź - mam zero talentu, ale włożyłem kupę pracy w ciągu 24 lat. Innej drogi nie ma, niezależnie od wybranego języka.

  • 2010-01-28 19:49:07 Jaka metoda nauki programowania?

    Głównie przez praktyczne programowanie - plus szukanie szczegółów/potrzebnych rzeczy w razie potrzeby. Do tego czytam na bieżąco ok. 200 blogów ludzi z branży, dzięki czemu jestem na bieżąco jeżeli chodzi o najlepsze praktyki, aktualne rozwiązania itd...

    Książki - od czasu do czasu. Na ogół trochę brakuje mi na nie czasu. Jeżeli czytam to częściej coś wysokopoziomowego - o wzorcach, projektowaniu, zarządzaniu projektami - schodzić niżej wolę przez samodzielne ubrudzenie rąk przy kodzie.

  • 2010-01-18 16:47:52 Dobre przykłady/wzorce fluent api w C#?

    To co jak na razie udało mi się znaleźć, może komuś się przyda:

    Teoria:

    Przykładowe implementacje:

  • 2010-01-19 11:12:12 Usuwanie spacji z rekordów

    Jakoś tak:

    UPDATE Tabela SET Kolumna = REPLACE(Kolumna, ' ', '')
    

  • 2010-01-20 13:31:10 Co lepsze - IF-RETURN czy IF obejmujący kod całej funkcji?

    Wydajność tutaj nie ma znaczenia, będzie taka sama. Natomiast pierwsza konstrukcja ma kilka zalet:

    • jest czytelniejsza już na pierwszy rzut oka
    • zmniejsza liczbę zagnieżdżeń / rozgałęzień, czy mówiąc naukowo złożoność cyklomatyczną kodu
    • dobrze komunikuje intencję programisty - od razu na początku funkcji widzimy warunki brzegowe które definiują przecież kontrakt funkcji wraz z jej sygnaturą