Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Istnieje pewna rzecz, pewien szyfr, który każdy kwalifikowany geek musi przynajmniej umieć rozpoznać, a za punkt honoru stawia sobie biegłość w rozpoznawaniu poszczególnych oznaczeń. Mowa o Geek Code, który przez samego twórcę jest określany (zresztą raczej słusznie) jako niewielką część historii internetu. Tutaj opis:
http://www.geekcode.com/geek.html
Problem GC jest dość prosty. Ostatnie wydanie (wersja 3.12) miało miejsce ponad 10 lat temu. Od tego czasu internet jest już zupełnie innym miejscem, nikt już nie gra w dooma 1, niewielu wogóle słyszało o VMS, nikt już nie wstawi znaku P! gdyż perl jest niemal nieodłączną częścią wielu dystrybucji Linuksa, i tak dalej. Słowem, możemy zrobić tylko 3 rzeczy:
->] Zostawić GC na pastwę losu, niech zdycha.
->] Używać GC w obecnej postaci.
->] Stworzyć nowy Geek Code, zrywający ze starymi oznaczeniami (i być może składnią), ale podtrzymujący ducha tajnego, wewnętrznego szyfru pewnej dziwnej, aspołecznej subkultury, który można wklejać sobie do sygnaturek ;]
Opcja 1 mnie nie interesuje. Opcja 2 nie wchodzi w grę, to jak zainstalowanie jądra linuksa z serii 1.x na najczęściej używanej stacji roboczej.
Tak więc, blok GCR (Geek Code Reloaded) niech zaczyna się podobnie jak oryginalny GC:
--------BEGIN GCR BLOCK--------
Następnie umieszczamy oznaczenie wersji:
Version: 4.0R-draft1
(R oznacza Reloaded)
przychodzi miejsce na sam kod, i następnie na oznaczenie końca kodu:
---------END GCR BLOCK---------
No, początek jest. Teraz literki. Wszystkie istniejące do tej pory literki stają się nieważne, i zostaną zdefiniowane na nowo lub zapomniane.
Zmienia się też składnia oznaczeń. GCR jest zorientowany obiektowo ;] i wiele oznaczeń można grupować, tak na przykład używam systemu operacyjnego (OS) GNU (G) z jądrem Linux (L):
OS.G.L
Lub w skrócie, skoro i tak nikt (poza Nami Debianowcami) nie używa nazwy GNU/Linux:
OS.L
Można też dodać na końcu nazwę dystrybucji Linuksa, ale tylko gdy nie pozostawia wątpliwości, na przykład:
OS.G.L.D
Prawie na pewno oznacza Debiana, ale już w wypadku
OS.L.K
czy
OS.L.S
Można się zastanawiać czy chodzi o Kubuntu czy Knoppiksa, Slackware czy SuSE... (można wtedy teoretycznie dodać kolejną początkową literkę swojego distro, np Sl dla slacka a Su dla susełka, ale aby zachować kodowość tego kodu wolno użyć tylko dwóch liter).
Dzięki takiemu podejściu nowe rozszerzenia GCR będzie można dorabiać "w locie". Nie jestem jednak pewien jak poradzą sobie z tym generatory oraz parsery.
Określanie swojego stosunku za pomocą ilości plusów czy minusów jest dla mnie zbyt brainfuckowym podejściem. Jeszcze się zastanawiam nad nowszą notacją. Może po prostu coś w stylu OS.W-3 i OS.B.O+ a może coś mniej oczywistego.
Może tak: jeśli danej kategorii dajemy tylko jedno oznaczenie, piszemy oznaczenie tuż przy kategorii:
OS.U-5
A jeżeli dokładamy kolejne oznaczenia, zamykamy je w nawias, żeby było czytelniej:
OS.W($+5)
(tak byłby w stanie napisać chyba tylko sam bil)
Rzeczy które nas nie interesują najzwyczajniej pomijamy, skracając przez to długość kodu oraz czas parsowania przez ludzki umysł. Jeśli zwisa nam przyszłość Mac OS <= 9, wogóle nie dajemy sekcji OS.M i wszyscy są happy.
Jeżeli chcemy użyć kilku oznaczeń należących do jednej grupy, ale też zaoszczędzić ciutek miejsca, możemy użyć operatora & w następujący sposób. Zamiast:
OS.L(+1) OS.W(+1)
Napisać:
OS.L&W(+1)
Oczywiście zapis ten jest dozwolony tylko w ostatnim oznaczeniu w hierarchii, odpada więc coś takiego:
X.A&B.D-2
Przede wszystkim dlatego, że A i B mogą nie mieć wspólnego oznaczenia D.
Po deklaracji wersji, ale przed samym kodem, można też definiować swoje własne oznaczenia, na przykład zauważywszy że w oficjalnej specyfikacji zabrakło używanego przez nas wariantu Uniksa, zwanego na przykład Foomatix, możemy zdefiniować:
F = Foomatix
Jeżeli nazwa jest rzadka, a jej sens nieoczywisty, można wrzucić ją do którejś kategorii:
OS { F = Foomatix }
lub też
OS.U { F = Fomatix }
Podobnie jak w C, kolejne wpisy można oddzielać średnikiem:
OS.U{F=Foomatix;F6=Foomasex}
A nawet definiować całe struktury:
OS.U{F=Foomatix{F2=Foomatoo;3F=Freefoo}}
Spacje i enterki są dozwolone tylko tam, gdzie nie przeszkadzają w płynnym odczytywaniu kodu. Poniższy zapis jest nielegalny:
OS .U{F =Foomatix }
Ale ten już jest:
OS.U { F= Foomatix }
Jeżeli jakiś skrót wydaje się oczywisty, a trzeba jedynie wprowadzić oficjalnie oznaczenie, można wpisać samo oznaczenie. Zrobiłem tak w (tfu, tfu!) windowsach:
OS.W = Windows { 95 = any windows 95 95a 95b 98 98se }
Można też określić swój stosunek do całej grupy zagadnień, niekoniecznie precyzując co tak bardzo lubimy w sztuce że na niej zarabiamy (np. A($+2)) czy też za co tak nienawidzimy uniksa (np. OS.U-4).
Aby uniknąć sytuacji, w której dziesiątki osób będą musiały deklarować te same oznaczenia na początku swoich bloków GCR, wprowadzam też operatory importu: # i @
Działają one tak: @ importuje oznaczenia z bloku innego użyszkodnika, zaś # z oficjalnej strony z rozszerzeniami (którą założę i którą będę się opiekował). Tak więc jeśli użytkownik "franek" zadeklarował sobie:
OS.U { F = Foomatix }
To użytkownik "benek" użyje znaku importu w taki sposób:
@franek
Wszystkie deklaracje franka są automatycznie deklaracjami benka. Problem pojawi się gdy franek bez wiedzy benka zmieni swoje deklaracje. Cóż, benek będzie musiał mieć na nie oko.
Taki import działa w obrębie jednej domeny w przypadku BBSów i forów, a w usenecie to jeszcze nie wiem (za rzadko tam bywam i za mało znam zasady).
Generalnie ta forma nie jest polecana.
Za to na oficjalnej stronie GCR (Którą Kiedyś Zapewne Założę(tm)) będzie jedna prosta strona, na której będzie zadeklarowany następujący "moduł":
#base { ... }
W miejscu trzech kropek zaś, będzie "oficjalna" lista. Domyślnie, rzeczy zadeklarowane w base będą się odnosiły do wszystkich bloków GCR (w odpowiedniej wersji). Rzeczy zadeklarowane pod innymi nazwami będą opcjonalne:
#rareos { OS.U{F=Foomatix} }
Jeśli ktoś otworzył własne "repozytorium" z deklaracjami GCR, najpierw używa importu na URLu:
#http://www.mysite.org/~franek/gcr.php #rareos
GCR idzie więc z duchem Open Source. Mamy możliwość łatwego ponownego użycia czyjegoś kodu oraz modułowość :D
Aha, w przypadku importu czegokolwiek (czy to z oficjalnego repo, czy z czyjegoś repo, czy z sygnaturki innego usera) liczą się tylko same deklaracje. Jeśli użytkownik "hellmaster" ustosunkuje się na wszystkie możliwe tematy związane z heavy metalem, a zadeklaruje tylko A.M{O=Orchestra}, zaś użytkownik "franek" zaimportuje deklaracje hellmastera, to jedyne co franek zaimportował to właśnie deklaracje. Nie ma sposobu by import, czy to przez @ czy przez # spowodował przekazanie kodu odpowiedzialnego za stosunki do poszczególnych dziedzin.
Poprawny blok kodu może nie zawierać żadnych oznaczeń, tylko same deklaracje, może też nie zawierać żadnych deklaracji ani importów, tylko same oznaczenia. Jeżeli dany użytkownik posiada więcej niż jeden blok, podczas importu wszystkie jego bloki traktowane są jako jedność (chyba że importujemy poprzez #, wtedy wyszczególniamy importowaną przestrzeń nazw, i czasami import nie dotyczy nawet jednego fizycznego bloku).
Jeżeli ktokolwiek od razu ogarnął wszystkie te zasady, żadnej nie czytając dwa razy, niech da mi znać - bo to znaczy że są zbyt proste ;]
Jako iż moja prywatna stronka jest jeszcze w powijakach, nieoficjalne oficjalne deklaracje w base wstawiam w tym temacie.
Jak do tej pory wymyśliłem następujące oznaczenia:
--------BEGIN GCR BLOCK-------- Version 4.0R-draft1 #base { A = Art { M = Music { G = Guitar D = Drums B = Bass guitar K = Keyboards S = Singing } P = Painting D = Dancing } C = Computers OS = Operating Systems { G = GNU Project L = Linux H = Hurd B = *BSD Variants { F = FreeBSD O = OpenBSD Mx = MacOS X } M = Classic MacOS R = ReactOS Be = BeOS Bh = Haiku (BeOS clone) U = Other Unix Variants { S = Solaris U = Ultrix I = Irix M = Minix } W = Microsoft Windows { 1x = 1.x series 2x 3x NT3 = NT 3.x series NT4 95 95a 95b 98 98se me 2k xp 2k3 vt bg = I am Bill Gates and my windows copy is óber! } } } ---------END GCR BLOCK---------
Przykładowy, poprawny blok GCR, który możesz sobie Użytkowniku wkleić do sygnaturki:
--------BEGIN GCR BLOCK-------- Version 4.0R-draft1 @joe #rareos A.M {P=Piano} OS.U.F(-2$) OS.W-5 OS.G.L.D($+3) A+3 A.M.P(+5) ---------END GCR BLOCK---------
Tak poza tym, wszystko ładnie pięknie, pozostały tylko dwie sprawy: skontaktować się z autorem oryginalnego GC w sprawie licencjonowania nazwy GC (jeśli facet się nie zgodzi, trzeba wymyślić własną nazwę :P) oraz wymyślić inne opcje stosunku do oznaczeń, poza +cyfra, -cyfra i $ (zapewne i takie opcje będzie można importować i/lub definiować).
Mi się ten szkic nowego GC bardzo podoba. Jeśli ktoś jest zainteresowany - proszę o komentarze ;]
Offline
Pomysł:
Operator % oznaczający nazwę fizycznego bloku kodu. Jeśli użytkownik "franciszek" umieścił dwa różne bloki kodu, na przykład:
--------BEGIN GCR BLOCK-------- Version 4.0R-draft1.1 %myblock F=Foo{ B=Bar } ---------END GCR BLOCK---------
oraz
--------BEGIN GCR BLOCK-------- Version 4.0R-draft1.1 @franciszek.myblock F.B(S+1) ---------END GCR BLOCK---------
To operator @ powoduje import tylko tego bloku, w którym występuje oznaczenie nazwy użyte z operatorem %.
franciszek "mieszka" w swojej przestrzeni nazw, więc może użyć zapisu:
@.myblock
Jednak pozostali użytkownicy muszą użyć pełnej nazwy, czyli @franciszek.myblock
Ponadto, jeśli jakiś blok jest anonimowy (np został umieszczony w poście, którego autor został usunięty z forum), można się do niego odnieść po "anonimowej" przestrzeni nazw:
@*.myblock
To rozszerzenie nosi numer wersji 4.0R-draft1.1
Offline
sorry moze jestem idiota ale wogole nie pojmuje do czego to wlasciwie sluzy i o co w tym chodzi lol .. chyba jednak nie ejstem geekem :P...
jednym slowem NERD:P
Offline
dobra, zacznijmy od tego, że to nie nazywa się już Geek Code Reloaded, bo nie chcę mieć przykrości w sprawie copyrightsów a nie chce mi się również pisać do autora oryginalnego GC.
na razie najfajniejsza nazwa, która mi do głowy przychodzi to The Net Code:
- nie ma nic wspólnego z GC
- podkreśla fakt, iż dotyczy przede wszystkim istot urzędujących w necie (operatory importu działają przecież na URLach)
- oficjalną specyfikację można znaleźć tylko w internecie (tymczasowo właśnie na tej stronie)
- i tak dalej
tak więc, wszystkie dotychczasowe odniesienia do GCR idą via output redirection do /dev/null, a tymczasem szukam czegoś od LaTeXa bo chcę napisać o tym książkę.
generalnie wszystko co potrzebne by zajarzyć co to jest geek code, jest dostępne tu:
http://www.geekcode.com/geek.html
a wszystko co potrzebne, by znając oryginalny GC również zajarzyć TNC (poprzednio GCR) jest w tym temacie.
wersja "4.0R-draft1.1" GCRu staje się wersją "0.11" The Net Code.
Offline
Jakby ktoś chciał to tutaj jest tłumaczenie.
http://linux.gery.pl/dzialy/geekownia/siec/geekcode
Offline
Time (s) | Query |
---|---|
0.00008 | SET CHARSET latin2 |
0.00005 | SET NAMES latin2 |
0.00095 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.14.246.52' WHERE u.id=1 |
0.00059 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.14.246.52', 1732539493) |
0.00042 | SELECT * FROM punbb_online WHERE logged<1732539193 |
0.00073 | SELECT topic_id FROM punbb_posts WHERE id=55067 |
0.00103 | SELECT id FROM punbb_posts WHERE topic_id=7221 ORDER BY posted |
0.00054 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=7221 AND t.moved_to IS NULL |
0.00005 | SELECT search_for, replace_with FROM punbb_censoring |
0.00205 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=7221 ORDER BY p.id LIMIT 0,25 |
0.00080 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=7221 |
Total query time: 0.00729 s |