Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

W poszukiwaniu nowych doświadczeń, programowanie w Linuksie

Ostatnio mało piszę, ogólnie inaczej gospodaruję czasem - więcej poświęcam czasu prywatnym sprawom, tak one są na pierwszym miejscu, a na boku staram się robić coś kreatywnego i o tym przeczytacie we wpisie.

Nie od dzisiaj i nie od wczoraj wiadomo, że programuję od dłuższego czasu już w Pythonie, znam także PHP ale aktualnie mało w nim piszę ponieważ skupiłem się na Pythonie i jego kosmicznych możliwościach. No więc czym się tak ostatnio zajmuję bardzo? Przede wszystkim w wolnym czasie poświęconym komputerom staram się wykonywać jakieś kreatywne zadanie i jest nim właśnie programowanie.

Wielu z Was na pewno stanęło nie raz przed dylematem - programowanie, a co ja takiego mogę napisać? Szczerze mówiąc to ja osobiście napisałbym wszystko, na każdym kroku mam pomysł na nową aplikację webową, desktopową czy serwerową tylko zawsze pojawia się problem - nie mam 10 par rąk, czasu ani na tyle podzielności uwagi aby się wszystkim zając dlatego wiele pomysłów idzie do mojego notesiku i nigdy nie ujrzy światła dziennego. Jednak są też takie pomysły na których realizację poświęcam jakiś czas i czerpię z tego doświadczenie oraz satysfakcję.

Czy jestem szalony?

A może by tak napisać coś większego? No więc zaczęło się, zabrałem się za projekt instalatora systemu operacyjnego Gentoo. Tak, wiem - szalony jestem. Mam w planach stworzenie własnego odgałęzienia Gentoo, coś na wzór Linux Mint czyli kilka własnych aplikacji + repozytoria Gentoo + własny livecd z możliwością instalacji.

Dlaczego akurat instalator, co mi da napisanie własnego instalatora? I tutaj mogę Wam z całą pewnością odpowiedzieć na to pytanie. Podczas pisania instalatora człowiek uczy się na prawdę bardzo dużo, potrzeba do tego znajomości całego systemu od podszewki, wszystkich bibliotek od obsługi języków do partycjonowania itp. większość z tych bibliotek i czynności wypiszę Wam w punktach, będzie czytelniej;

  • Implementacja wtyczek/modułów
  • Aplikacja w stylu MVC (pseudo MVC) - jest widok? jest. Kontroler też, front controler także mamy, tylko modelu nie zaimplementowałem ale nigdzie nie piszę, że to ma byc zgodne stricte z MVC po prostu robię tak jest najwygodniej
  • Partycjonowanie - wymaga nie raz operacji na surowych danych oraz używania kiepsko udokumentowanej biblioteki pyparted - nawet autorzy Ubuntu nie podołali zadaniu jednak ja dałem radę ; )
  • Poprzez implementację widoku i kontrolera możliwe jest uruchomienie instalatora z interfejsem tekstowym lub graficznym
  • Zamiast bawić się z GTK+ zacząłem przygodę z QT4 - aby się czegoś nauczyć i było to dobrym posunięciem
  • Ingerencja w konfigurację systemu z poziomu aplikacji - edycja konfiguracji itp.
  • Operacje na bootloaderze
  • Kompilacja jądra, dodawanie go do bootloadera
  • Tworzenie konta użytkownika - czyli używanie poleceń do zarządzania użytkownikami z poziomu aplikacji
  • Wybór języka, ustawianie układu klawiatury - to wszystko wymaga dużego majstrowania w plikach konfiguracyjnych i uruchamiania poleceń generujących odpowiednie pliki systemowe np. locale-gen

To jest właściwie mała, niedokończona lista cech instalatora - rzecz jasna aby to wszystko zaimplementować trzeba mieć odpowiednią wiedzę, jak się tej wiedzy nie posiada to trzeba zajrzeć do dokumentacji. To świetna okazja aby nauczyć się programowania w środowisku Uniksowym.

Problemy zawsze i wszędzie się znajdą

Już na samym starcie zawitały problemy ze sprawdzaniem pojemności dysku twardego.
Wiecie co zrobiłem? Podpatrzyłem instalator Ubuntu - ubiquity i szczerze mówiąc nie ma rewelacji, instalator w Pythonie używający własnego narzędzia napisanego w języku kompilowanym, prostactwo. Ja użyłem libparted poprzez wrapper pyparted do tego używając fdiska do wykrycia listy urządzeń i partycji i wszystko załatwiłem bardzo sprawnie.

Z pyparted jest ten problem, że nie ma do niego żadnych przykładów, trzeba polegać na dokumentacji dołączonej do kodu - help(parted.moduł) zrobić ls /usr/lib/python2.7/parted i zobaczyć jakie moduły dostarcza parted a następnie helpem przejrzeć dokumentację zagnieżdżoną w kodzie. Twórcy Ubuntu woleli przenieść kod partycjonowania do C/C++ i komunikować się z oddzielnym procesem w jakiś sposób z poziomu Pythona. Jak dla mnie dziwny sposób. Osobiście to nie implementowałbym partycjonowania w samej aplikacji instalatora tylko parsowałbym listę partycji w poszukiwaniu błędów oraz w celu ustalenia punktu montowania a do partycjonowania byłby gparted bądź qparted. Sprawdzone rozwiązanie.

Pierwsze starcie z QT4 też nie było kolorowe, bowiem ta biblioteka w odróżnieniu od GTK+ w domyślnej konfiguracji wyświetla elementy w całkiem innym stylu. Przynajmniej w moim przypadku wszystkie widgety były wiecznie wycentrowane, czyli jak tworzyłem sobie kontener i chciałem w nim postawić przycisk to stał on na samym środku kontenera - a rusz go dziadzie, nie ma takiej opcji, śpi jak po dobrej flaszce. Zaczęło się kombinowanie z alignmentami, odstępami i nieodstępami, rozwiązania okazały się proste ale jak dla nowicjusza w QT to czas do ich dojścia był zdecydowanie za długi.

Powiem szczerze tak - GTK+ jest o wiele łatwiejsze moim zdaniem do ogarnięcia niż QT.
QT daje bardzo dużo możliwości, jest bardziej rozbudowane i bardziej elastyczne, jest także bardziej obiektowe jeśli chodzi o kod biblioteki a nie wrappera i ponoć szybsze.

Polecam mimo wszystko QT4 ze względu na wymienione plusy ponieważ biblioteka QT z samej definicji swojej ma wyświetlać się tak samo niezależnie od systemu operacyjnego. Jest także tworzona o platformach mobilnych w porównaniu do GTK. Trochę wysiłku z początku to wymaga jednak warto z początku się potrudzić by później uzyskać wprawę i tworzyć niesamowite aplikacje dostępne na każdą platformę systemową, mobilną czy desktopową - nie ważne! Będzie działać : )

Podsumowując jak macie czas i chcecie zdobywać wiedzę to spróbujcie własnych sił w tworzeniu jakiegoś projektu, to bardzo uczy i rozwija. Warto zamiast grania w durne gierki zając się czymś bardziej kreatywnym i do tego udostępnić jeszcze swoją pracę tak aby każdy mógł z niej czerpać przyjemność : )

Wiecie co, wyznam Wam szczerze - pozbyłem się wszystkich gierek z komputera jakieś 4 lata temu i od tamtej pory w ramach wolnego czasu, wiem, że jest go często niewiele - po prostu coś tworzę, jest to pasjonujące, uczące i w dodatku inne osoby z tego korzystają oprócz mnie. Coś niesamowitego.

PS Wybaczcie brak ogonka w literce "c" lecz piszę z laptopa na którym ctrl+c oraz alt+c nie działają. Zepsute ustawienia systemowe w Windows 7, próbowałem wszystkiego, nawet założyłem wątek na forum.dobreprogramy.pl ale nikt nie zdołał pomóc. 

linux programowanie hobby

Komentarze

0 nowych
Frankfurterium   10 #1 26.09.2012 00:44

Gratulacje, ciekawa sprawa. Zamierzasz udostępnić kod? Interesuje mnie zwłaszcza sprawa partycjonowania.

  #2 26.09.2012 10:10

@Frankfurterium
Źródła są udostępniane regularnie na GIT (http://github.com/webnull/gami)
Instalator jest udostępniany publicznie pomimo, iż nie jest jeszcze ani trochę używalny - po prostu w razie gdybym nie miał czasu już na ten projekt to ktoś inny mógłby go przejąć.

Cebula REDAKCJA  18 #3 26.09.2012 11:39

@webnull
poprawiliśmy Ci "ć", mam nadzieję, że się jednak uporasz z problemem ;)

Jeśli mogę mieć jedną sugestię, postaraj się na przyszłość o trochę więcej treści we wprowadzeniach. W przypadku zajawki na głównej stronie bloga w ogóle nie wiadomo o czym będzie mowa. To tylko niezobowiązująca sugestia czytelnika :)

Autor edytował komentarz.
dragonn   11 #4 26.09.2012 12:23

Ja się zastanawiam dlaczego Gentoo? Nie że bym kwestionował wybór, ale jeżeli chcesz zrobić coś dla prostego użytkownika to jaka będzie jego reakcja jak się okaże że żeby zainstalować jakiś większy program czy cały system musi czekać parę godzin a sprzęt zamienia się w grzejnik :P. Dla mnie w dzisiejszych czasach Gentoo straciło na sensie, nawet przy najlepiej ustawionych flagach i najwyższej optymalizacji kompilacji ile zyskujemy w wydajność, ~2%?

anakkin   6 #5 26.09.2012 12:41

Jest sposób na ć: shift+tylda, c
Metodza działa na wszystkie litery z ogonkami/kreskami/kropkami
W przypadku ukończenia narzędzia planujesz wrzucenie go do repozytorium gentoo?

Autor edytował komentarz.
webnull   9 #6 26.09.2012 14:00

@dragonn | 26.09.2012 12:23
Chcę po prostu stworzyć sobie system dla siebie i na potrzeby forum.
Głównym celem systemu jest diagnostyka sprzętu - czyli jakieś prościutkie autorskie narzędzia.

oprych   13 #7 26.09.2012 14:03

Kurcze, części nie zrozumiałem, ale i tak ciekawie się czytało :)

dragonn   11 #8 26.09.2012 14:07

@webnull chyba że tak, to zmienia postać rzeczy ;). Może kiedyś napiszesz taki instalator dla Arch :P, bo z tego co wiem większość jego odnóg i tak ma instalator CLI, a w oficjalnym Arch zgodnie z zasadą KISS ostatnio w ogóle wyleciał instalator...

webnull   9 #9 26.09.2012 14:17

@Cebula (redakcja) | 26.09.2012 11:39
Pewnie, następnym razem nad tym popracuję ; )
Wybacz, ale po 23 już nie myślę a zazwyczaj wtedy znajduję czas aby napisać coś na blogu ; )

webnull   9 #10 26.09.2012 14:22

@dragonn | 26.09.2012 14:07
Właściwie to ten instalator jest bardzo modularny i będzie możliwość przepisania tylko kilku modułów aby pasował on do Arch Linux. W założeniach nie było zamykania go tylko dla jednego systemu operacyjnego.

Wiesz, w tym instalatorze będziesz mieć gotowe operacje na bootloaderze, ustawienia językowe itp. a wymieniasz tylko kilka specyficznych dla Gentoo modułów na takie odpowiadające Archowi.

dragonn   11 #11 26.09.2012 14:51

@webnull no to zapowiada się ciekawie ;), będę śledził na bieżąco.

  #12 26.09.2012 16:59

Cześć Webnull, w jakim języku go piszesz ? Pozdrawiam

iluzion   5 #13 26.09.2012 17:34

Podziwiam zapał. Gratuluję wyboru Qt. Jednak nadal nie bardzo widzę sens nowej dystrybucji ;) Pewnie się sporo nauczysz, tylko gdzie wykorzystasz wiedzę o partycjonowaniu itd? Gdybym ja miał więcej wolnego czasu to zabrałbym się za portowanie bibliotek do Pythona 3 ;) Zacząłbym od czegoś stosunkowo prostego jak np. generatory statycznych stron internetowych, np.

Pelican http://pelican.notmyidea.org/en/3.0/index.html
Mynt http://mynt.mirroredwhite.com/

Pozdrawiam

Autor edytował komentarz.
  #14 26.09.2012 17:40

Panowie, czy używacie LibreOffice kosztem MS Office ?

Frankfurterium   10 #15 26.09.2012 17:46

" tylko gdzie wykorzystasz wiedzę o partycjonowaniu itd?"

Wbrew pozorom coś takiego naprawdę może się przydać. Jak webnull pisze, nawet twórcy Ubuntu pominęli ten aspekt i skorzystali z innego języka. Tak samo devowie Chakry ciągle odkładają pythonowe partycjonowanie w swoim instalatorze na później, bo sprawa jest złożona i nie warto się w tym babrać, kiedy mają na głowie inne problemy. Właśnie ich mam zamiar zainteresować tym kodem, kiedy nabierze już nieco wyraźniejszego kształtu.

webnull   9 #16 26.09.2012 17:59

@Frankfurterium | 26.09.2012 17:46
Mówisz mi, że mam zaimplementować partycjonowanie w instalatorze? Kurcze, wymagasz cudów szczerze mówiąc i myślę, że póki co musiałbym odłożyć to na później i póki co wrzucić tam integrację z qpartedem/gpartedem...

webnull   9 #17 26.09.2012 18:01

@deniross (niezalogowany) | 26.09.2012 16:59
W Pythonie - jest bardzo wspierany pod Linuksem i wcale nie jest powolny i pamięciożerny więc łatwo w nim napisać jakąś dobrą aplikację w sensownym czasie : )

Frankfurterium   10 #18 26.09.2012 18:02

No to sorry, źle cię zrozumiałem i właśnie dlatego tak się "napaliłem" ;-) Ale spokojnie, skoro nie podołało temu wielu zdolnych devów, i ty nie musisz czuć kompleksów, a ja nie będę przecież wywierał presji.

webnull   9 #19 26.09.2012 18:06

@Frankfurterium | 26.09.2012 18:02
Nie no ja po prostu i tak częściowo zaimplementuję partycjonowanie ale w trybie do odczytu tylko póki co. Później zobaczy się, może będzie czas w przyszłości aby zaimplementować możliwość modyfikacji partycji chociaż nie wiem gdzie ja to bym mógł testować ; o

webnull   9 #20 26.09.2012 18:07

@iluzion | 26.09.2012 17:34
Bardzo ciekawa sprawa, szczerze to myślałem nad takim generatorem statycznych stron już dawno temu - zatem dobrze wiedzieć, że coś takiego już istnieje : )

Draqun   9 #21 26.09.2012 19:14

@webnull
Gratuluje zapału i pomysłu. Czekam na link do distra ;)

PS. aby zrobić polskie literki wystarczy kliknąć raz ~ i potem wybraną literkę ;). Nie odwiedzam forum za często więc nie wiedziałem o problemie ;)

Pozdrawiam.

iluzion   5 #22 26.09.2012 19:30

@webnull

Istnieje i dla Pythona jest tego cała masa. Do wyboru do koloru. Z silnikiem szablonów Jinja2 lub Mako, z obsługą Markdown i reStructuredText, z kolorowaniem składni wstawek kodu źródłowego Pygments, a nawet wykorzystujących Sphinx (chociaż to już może lekka przesada), komentarzy (Disqus), RSS itd itp. Niestety zdecydowana większość nadal jedynie dla 2.x.

Autor edytował komentarz.
webnull   9 #23 26.09.2012 21:53

@iluzion | 26.09.2012 19:30
Dzięki, myślę, że swój blog stworzę w oparciu o takie rozwiązanie : )

  #24 27.09.2012 10:12

pacze pacze, myślę że c++ a tu pajton!
nice ;)

  #25 27.09.2012 10:31

@webnull
polecasz może jakiś tutorial do Qtpython ?

  #26 27.09.2012 12:23

@webnull
polecam od razu zapisywanie stałych, opisów itd w jakimś jednym miejscu - nawet najprostsza klasa - schowek, potem łatwo jest to przerobić na inne języki

webnull   9 #27 27.09.2012 15:22

@tloszabno (niezalogowany) | 27.09.2012 10:31
Może tutaj: http://zetcode.com/tutorials/pyqt4/

panb   4 #28 28.09.2012 21:27

To genialny pomysł!!!
Rozumiem że przy instalacji kompilowało by się jądro i moduły. Z pominięciem "genkernel" Urzytkownik musiałby też odpowiedzieć na kilkadziesiąt pytań o posiadany sprzęt i zastosowanie komputera.
Odnośnie konfiguratora dla Gentoo - Wreszcie!! Ktoś się tym zajmie.
Pomyśl czy nie warto by scalić tego w jedno i dołączyć UI dla emerge i Laymana.
Dlaczego Qt?... dlaczego nie otwarte biblioteki?
Może EFL? Myślę że to ma przyszłość - można by w przyszłości zastosować w urządzeniach mobilnych.
Mógłby być to świetny początek dla łatwiejszej dystrybucji opartej na genialnym Gentoo.
Też kiedyś o tym myślałem, ale nie jestem programistą.
Myślę że jest to szansa na rozpoczęcie poważnego projektu.
Kibicuję :-)

iluzion   5 #29 29.09.2012 10:13

@panb

"Dlaczego Qt?... dlaczego nie otwarte biblioteki?"

Qt i PySide jest na licencji LGPL, PyQt jest na licencji GPL. Wszystkie są otwarte (poza wydaniami komercyjnymi).

"Może EFL? Myślę że to ma przyszłość - można by w przyszłości zastosować w urządzeniach mobilnych. "

Może ma przyszłość, ale póki co to na jednej platformie. Qt na urządzeniach mobilnych ma się dobrze.