Posts tagged ‘languages’

Zmiana językowa

2011-12-04 18:23

To nie była łatwa decyzja. Dość powiedzieć, że odwlekałem ją naprawdę bardzo długo. Nie bez związku był tu fakt, że wiąże się ona z nietrywialną ilością dodatkowych rzeczy do zrobienia – a przecież powszechnie wiadomo, że pracowitości raczej nie słynę :) Jestem jednak przekonany, że to już najwyższy czas.

Niniejszym informuję zatem, że oto oficjalnie zmieniam język, w którym piszę tego bloga. Kolejne notki będą już po angielsku. Być może nie absolutnie wszystkie, ale wszelkie wyjątki będą – właśnie tak – wyjątkami. Podobnie będzie też oczywiście z całą resztą interfejsu strony, którą to mam nadzieję stopniowo dostosować w ciągu najbliższych (tygo)dni.

Jeśli w swoich przewidywaniach nie mylę się koszmarnie, to krok ten nie powinien być dla większości czytających żadnym wielkim zaskoczeniem. Mógłbym tutaj rozpisać się na temat uniwersalności języka angielskiego wśród programistów, konieczności jego praktycznej znajomości, i tak dalej. Mógłbym, ale nie widzę w tym żadnego sensu – to są po prostu oczywistości, z którymi nawet nie ma jak polemizować. Dlatego mogę pewnie zaryzykować stwierdzenie, iż “wszyscy” wiedzieli, że i w przypadku tego bloga przejście na angielski jest wyłącznie kwestią czasu.

Istnieje oczywiście jeden główny powód tej zmiany, jakim jest możliwość znacznego poszerzenia grona odbiorców – żeby nie powiedzieć brzydko ‘grupy docelowej’ ;) Z tym zaś wiąże się też szereg pozytywnych konsekwencji, jak choćby o wiele większa swoboda w doborze tematów – zwłaszcza tych najbardziej interesujących, czyli stricte technicznych. Rozumowanie jest tu proste: w przepastnym oceanie światowego Internetu każda porcja praktycznej wiedzy znajdzie swojego odbiorcę. Gdy ograniczamy się do polskiej części sieci, nie jest to już takie pewne.

Drugą ważną przyczyną jest też to, iż pisanie po polsku na tematy okołokoderskie nie jest wcale łatwym kawałkiem chleba. Wymaga to bowiem ciągłego szukania kompromisów między precyzją opisu a jego długością, czytelnością, a często i językową poprawnością. Nierzadko trzeba tu też przecierać szlaki, próbując znaleźć zgrabne (i krótkie!) tłumaczenia dla rzadziej spotykanych pojęć technicznych. Nie w każdym przypadku jest to zresztą możliwe (“shader”?…) i wtedy pozostaje jedynie potraktować daną frazę kursywą. Ostatnio zresztą przytrafiało mi się to coraz częściej.

Ufam, że ta mała rewolucja zostanie przyjęta pozytywnie, albo chociaż z powściągliwym zrozumieniem :) Jednocześnie przepraszam z góry tych, przed którymi buduję właśnie językową barierę – mam nadzieję, że uda wam się szybko ją przekroczyć.

Do zobaczenia po drugiej stronie!

Tags: ,
Author: Xion, posted under Computer Science & IT, Website » 26 comments

Małe kruczki

2010-11-22 8:31

Przeskakując między wieloma językami programowania, bibliotekami czy frameworkami po pewnym czasie można wyrobić sobie zdolności “uogólniające”, dzięki którym takie zmiany nie są specjalnie kłopotliwe. Jednak nawet jeśli potrafimy płynnie przechodzić od jednego języka do drugiego, to zawsze istnieje szansa, że zapomnimy przy okazji o jakimś szczególe, drobnej rzeczy specyficznej dla konkretnego narzędzia – tytułowym małym kruczku.
A przynajmniej mi się tak nierzadko zdarza. Dlatego tę notkę dedykuję pojedynczym, drobnym a “dziwnym” cechom poszczególnych języków programowania, o których często zdarza mi się zapominać. A są one następujące:

  • W C++ nie dodaje się stałych tekstowych. W dziesiątkach języków programowania (i nie tylko programowania) zapis w stylu "ala" + " ma " + "kota" jest najzupełniej oczywistą konkatenacją trzech napisów. Ale w C++ nie. Ponieważ stałe dosłowne, takie jak teksty w cudzysłowach, są – w przybliżeniu – typu const char*, ich łączenie operatorem + jest interpretowane jako dodawanie dwóch wskaźników. Serio.
    Wniosek: W C++ w takich sytuacjach plus jest zbędny i należy go pominąć "ala" " ma " "kota", o ile oczywiście nie łączymy obiektów klasy string.
  • W Javie łańcuchy znaków porównujemy… inaczej. Otóż Java jest bardzo obiektowa i w związku z tym nawet dla typu java.lang.String nie robi wyjątku i obsługuje go tak, jak każdą inną klasę. A to oznacza, że zwykły operator == działa dla napisów tak samo, jak dla innych obiektów (inaczej niż choćby w C#), tj. porównuje ich referencje w celu sprawdzenia, czy mamy do czynienia z tym samym obiektem. Tym samym, nie zaś takim samym, czyli równym co do wartości – a o to nam zwykle chodzi, gdy pracujemy z napisami.
    Wniosek: W Javie do porównywania napisów korzystamy z metody equals. To pewnie dlatego wciąż nie ma w niej switcha dla napisów ;-)
  • Słowniki w Pythonie domyślnie “iterują się” po kluczach. Żeby oszczędzić nadmiernie rozbudowanych wyjaśnień, rzucę poniższym kawałkiem kodu:
    1. for k, v in dictionary: print k, " => ", v

    który na pierwszy rzut oka wygląda na zupełnie poprawną iterację po zawartości słownika dictionary, w której zmienna k dostaje klucz, a v wartość. Jest on dowodem, że oczami należy rzucać zawsze przynajmniej dwa razy. W istocie bowiem k i v będą kolejno otrzymywały, uwaga, po dwa elementy klucza (potraktowanego jako para). Po prostu konwersja słownik → coś_po_czym_można_iterować daje w Pythonie kolekcję kluczy, a nie par klucz-wartość. Nie pytajcie, dlaczego.
    Wniosek: Albo iterujemy po kluczach i wartość uzyskujemy zwykłym indeksowaniem, albo korzystamy z metody items w celu uzyskania kolekcji par klucz-wartość.

  • W Javascripcie zmienne – nawet te użyte po raz pierwszy w funkcjach – są domyślnie globalne. Nawet nie śmiem dociekać, co jest uzasadnieniem dla tego faktu…
    Wniosek: Pierwsze przypisanie do nowej zmiennej wewnątrz funkcji należy opatrywać słowem kluczowym var.
Tags: , , , ,
Author: Xion, posted under Programming » 7 comments

le srana be la lojban. be’o poi mi na nelci

2010-11-13 21:45

…czyli co mi się w lojbanie nie podoba.

Moje poprzednie notki o lojbanie mogły pozostawić wrażenie, iż przedstawiam go bardzo jednostronnie, celowo pomijając jego wady. Nawet jeśli tak nie było, to siłą rzeczy nie mogłem dotąd poświęcić wystarczająco dużo miejsca różnego rodzaju niedoskonałościom, od których język ten – jak każdy wytwór człowieka – nie jest wolny. A jest ich pewna ilość warta uwagi i nie mam tu wcale na myśli postękiwań z gatunku “przecież to w ogóle jest totalnie bez sensu” :P Mam raczej na myśli uprawnioną krytykę, wskazującą na rozbieżności między założeniami a realizacją. Do tego zaś pożytecznie byłoby wpierw te założenia przypomnieć.
Zgodnie z tym co można przeczytać na oficjalnej stronie lojban.org, język lojban:

  1. został zaprojektowany tak, by być kulturowo neutralny
  2. ma jednoznaczną gramatyką opartą na zasadach logiki
  3. ma fonetyczną ortografię, pozwalającą jednoznacznie zdekodować ciąg dźwięków jako słowo
  4. w porównaniu do naturalnych języków jest prosty i łatwy do nauki
  5. posiada 1300 słów źródłowych, które można łączyć tworząc miliony słów pochodnych
  6. jest regularny i jego zasady nie mają wyjątków

Powyższa lista nie jest nawet kompletna (usunąłem z niej punkty w oczywisty sposób niemal sprawdzalne, jak choćby potencjalne zastosowania języka), a i tak wydaje się niezwykle ambitnym zestawieniem feature‘ów. Czy ma ona odpowiednie pokrycie w rzeczywistości? Zobaczmy więc.

Tags: ,
Author: Xion, posted under Culture » 5 comments

Pierwsze kroki w Pythonie

2010-11-06 13:33

Python to już od dłuższego czasu bardzo popularny język do wszelakich zastosowań. Oprócz pisania w nim samodzielnych programów lub aplikacji webowych, jest on też często używany jako język skryptowy rozszerzający możliwości programów, czego chyba najbardziej znanym przykładem jest Blender. Istnieje więc duża szansa, że niezależnie od dziedziny IT, którą się zajmujemy, prędzej czy później przyjdzie nam zetknąć się z tym językiem.
W takim przypadku często dobrze jest wybiec przed szereg i zapoznać się z Pythonem już teraz, co by nie obudzić się potem w wielkim zaskoczeniu ;-) Na szczęście doświadczenie pracy z tym językiem należy raczej do przyjemnych, co oczywiście nie zmienia faktu, że dobrze jest co nieco o nim wiedzieć.

Dlatego też postanowiłem napisać krótką instrukcję paru kroków, które powinny pomóc wszystkim zainteresowanym w rozpoczęciu przygody z Pythonem. Chodzi tu przede wszystkim o przygotowanie kompilatora interpretera, narzędzi pomocniczych oraz środowiska programistycznego. Nie jest to, na całe szczęście, bardzo trudne:

  1. Zaczynamy od zaopatrzenia w sam podstawowy pakiet Pythona, czyli w interpreter i pakiety biblioteki standardowej języka. Jeśli korzystamy z jakiejś użytkownikowo-przyjaznej dystrybucji Linuksa (np. Ubuntu), to pewnie będziemy już takie coś posiadali. W przeciwnym razie wybieramy się na stronę Python.org i wybieramy wersję dla swojej platformy. Jeżeli jest to Windows, to zalecam wybranie wersji 32-bitowej niezależnie od bitowości samego systemu – inaczej możemy mieć problemy ze współpracą z pomocniczymi narzędziami.
    Aktualnie w obiegu są dwie edycje Pythona: seria 2.x i 3.x. W dalszych krokach zakładam używanie serii 2.x głównie ze względu na większą przenośność jej i narzędziowych aplikacji.
  2. Niemal niezbędnym programem pomocniczym przy korzystaniu z Pythona jest easy_install, będący częścią pakietu setuptools. Pozwala on na łatwe instalowanie dodatkowych pakietów, trochę tak jak apt-get na debianowych Linuksach. Jest to bardzo wygodne i skutkuje np. tym, że aplikacje napisane w Pythonie potrafią same rozwiązać swoje zależności podczas instalacji i ściągnąć pakiety wymagane do swojego działania.
  3. Jeśli nie zostało to zrobione za nas, powinniśmy dodać katalog instalacyjny Pythona (zawierający plik wykonywalny interpretera) oraz podkatalog Scripts (zawierający program easy_install) do zmiennej środowiskowej PATH. Ułatwi to między innymi późniejszą konfigurację środowiska programistycznego.
  4. Opcjonalnie możemy zaopatrzyć się w DreamPieshell dla Pythona, który jest o wiele wygodniejszy i potężniejszy niż wbudowany IDLE, że o systemowej konsoli nie wspomnę. Korzystanie z shella jest dość częste; dzięki niemu możemy bezboleśnie sprawdzić działanie funkcji i konstrukcji językowych, używanych w naszych programach.
  5. Wreszcie, czas zaopatrzyć się w środowisko programistyczne, czyli IDE. Tu do wyboru mamy kilka możliwości, zależnie od używanej platformy i preferencji, o czym szczegółowo informuje nas oficjalne wiki. Jeśli przypadkiem używamy już któregoś z dwóch popularnych, uniwersalnych IDE – czyli Eclipse lub NetBeans – możemy użyć wtyczek rozszerzających je o możliwość współpracy z Pythonem (odpowiednio PyDev oraz NBPython). Alternatywą jest użycie samodzielnych IDE do Pythona takich jak PyScripter.

Co dalej? No cóż, to już zależy od tego, do czego chcemy Pythona używać. W celu znalezienie inspiracji możemy na przykład przeglądnąć posortowane tematycznie drzewko dostępnych pakietów i wybrać coś, co nas interesuje. Następnie możemy zainstalować nowe pakiety za pomocą programu easy_install, podając po prostu nazwę paczki, lub ściągnąć je w postaci archiwum i uruchomić skrypt setup.py z parametrem install.
A co zrobić w celu nauczenia się samego języka?… Jeżeli nie odpowiada nam studiowanie samej dokumentacji, możemy spróbować poszukać w sieci odpowiedniego tutorialu, takiego jak np. dostępna za darmo ksiażka Dive Into Python.

Tags: ,
Author: Xion, posted under Applications, Programming » 5 comments

lonu pilno be loi sucta bei tu’a la lojban.

2010-10-05 23:01

Używanie abstrakcji w lojbanie.

W jednej z wcześniejszych notek na temat lojbanu wspominałem o tym, że często posługujemy się w nim konstrukcjami, które określa się jako abstrakcje. Pojawiały się one kilka razy nawet tutaj. Osobiście uważam je za jedną z ciekawszych cech języka, dlatego też chciałbym dzisiaj opisać ją nieco dokładniej.

Przypomnijmy, że “zdanie” w lojbanie – czyli bridi – to pewna relacja określona na swoich argumentach, zwanych sumti:

lo bolci cu gunro fa’a le vorme
Piłka toczy się w kierunku bramki.

Ta relacja może opisywać jakieś zdarzenie, fakt, właściwość, itp. Dopóki jej argumentami są proste pojęcia (takie jak piłka czy bramka), do jej wyrażenia wystarczają równie nieskomplikowane konstrukcje gramatyczne. Jednak nie zawsze tak jest. Nierzadko chcemy mówić nie tyle o konkretnych obiektach, co właśnie o zdarzeniach, faktach lub właściwościach, które w lojbanie należą do grupy pojęć zwanych abstrakcjami.
Aby to zrobić, należy jedno bridi uczynić argumentem innego. Jest to możliwe przy pomocy tzw. abstraktorów, z których najczęściej używanym jest nu. Zaaplikowanie go do bridi daje w wyniku zdarzenie, które owo bridi opisuje. Zapewne najłatwiej zobaczyć to na przykładach takich, jak poniższe:

mi klama lo zarci — Idę to sklepu.
ti nu mi klama lo zarci — To jest zdarzenie mojego pójścia do sklepu.
lo nu mi klama lo zarci cu pluka mi — Pójście do sklepu sprawiło mi przyjemność.

Ostatnie wyrażenie prawdopodobnie przetłumaczylibyśmy raczej jako: “Cieszę się, że poszedłem do sklepu”, czyli używając pewnego rodzaju zdania złożonego. W lojbanie to samo wyrażamy nieco inaczej, odnosząc się do ‘pójścia do sklepu’ (lonu mi klama lo zarci) w ten sam sposób, w jaki wcześniej odwoływaliśmy się do bardziej konkretnych obiektów. Ten trochę inny schemat myślenia jest według mnie całkiem interesujący.
Oczywiście przy bardziej skomplikowanych wypowiedziach konieczne może się okazać wielokrotne zagnieżdżanie – tak jak w poniższym przykładzie potencjalnej dyskusji po meczu pewnej znanej i lubianej gry strategicznej:

lonu mi fliba cu jalge lonu lerci fa lonu mi zbasu le .ekspo
Moja przegrana była wynikiem tego, że spóźniłem się z budową expa.

Jak widać to, co lojban wyraża jednolicie za pomocą abstraktora nu, w języku polskim wymaga fraz typu ‘to, że’ albo rzeczowników pochodzących od czasowników – jak ‘przegrana’ czy ‘budowa’.

Jak można się domyślić, nu nie jest jedynym abstraktorem, a zdarzenia nie są jedynym rodzajem abstrakcji w lojbanie. Innym często spotykanym słówkiem tego typu jest du’u, którego używamy, dyskutując o faktach, opiniach czy wiedzy, gdyż jest to abstraktor stwierdzenia:

mi djuno lodu’u la berlin. raltca lo dotco — Wiem, że Berlin jest stolicą Niemiec.
la robert jdice lodu’u litru lo fraso — Robert zdecydował się na podróż do Francji.

W końcu jest też abstraktor ka, wskazujący na właściwości lub cechy. Jego użycie jest już trochę bardziej wyrafinowane, ale typowym przykładem są porównania analogiczne do stopniowania przymiotników. Wówczas właściwość jest “skalą” lub kryterium porównawczym:

do zmadu mi loka nelci lo grute — Lubisz owoce bardziej niż ja.
mi sisku loka xunre lo’i karce — Szukam czerwonego samochodu (wśród innych).

Jak widać skalą może być “czerwoność” (loka xunre), “lubienie owoców” (loka nelci lo grute) i w zasadzie cokolwiek, co tylko możemy sobie wymyślić i jest poprawnym bridi. Możliwości są tu więc bardzo, bardzo duże.

Istnieją też oczywiście inne, rzadziej używane abstraktory, jak ni czy si’o. Zainteresowanych odsyłam do odpowiednich źródeł :)

Tags: ,
Author: Xion, posted under Culture » 1 comment

ta’i ma la lojban. bangu fi lo na’e satci

2010-08-28 21:58

Jak w lojbanie można wyrażać się nieprecyzyjnie?

Każdy, kto zetknie się z lojbanem, najczęściej szybko dowiaduje się, skąd pochodzi jego nazwa. Źródłem jest określenie logji bangu, czyli język logiczny. Logika sugeruje zaś dokładność, jednoznaczność i precyzję. Sugeruje to, że w lojbanie nie można wyrażać się niejasno, mgliście czy metaforycznie. Gdyby tak było rzeczywiście, to trudno byłoby to uznać za jego siłę, skoro aspiruje on do miana języka, którym mogą się posługiwać (także) ludzie.
Można więc podejrzewać, że to nieprawda – i tak jest istotnie. Dzisiaj chciałbym pokazać kilka przykładów na to, że mimo swojej “logiczności” lojban jak najbardziej dopuszcza przenośnie, niedopowiedzenia, skróty myślowe i inne tego rodzaju niuanse.

Więcej: nie tylko je dopuszcza, ale wręcz do nich zachęca – między innymi za pomocą pojęcia kontekstu, które samo w sobie nie jest precyzyjnie określone. Nietrudno jednak zrozumieć je intuicyjnie. Kontekst to po prostu… no cóż, kontekst :) Przyjmuje się, że gdy coś z niego wynika, to jest to mniej lub bardziej oczywiste zarówno dla nadawcy, jak i odbiorcy wypowiedzi.
A z kontekstu może w lojbanie wynikać bardzo wiele. Za każdym razem, gdy opuścimy jakieś miejsce w zdaniu, to właśnie kontekst je uzupełnia – lub pozostawia nieokreślone:

mi jinvi lodu’u ba carvi ca le cabdei
Sądzę, że dzisiaj będzie padać deszcz.

Tutaj nie musimy na przykład troszczyć się o wypełnienie drugiego miejsca carvi (powierzchni, na którą pada) lub trzeciego (źródła deszczu), bo kontekst mówienia o pogodzie aż nadto wystarcza, żeby wywnioskować, co mamy na myśli. Na tej samej podstawie możemy często pomijać zaimki osobowe, nawet mimo tego, że lojban nie ma odmiany czasowników (że o samych czasownikach nie wspomnę ;P):

ju’i do’u klama le zarci .i xu kansa
Hej, idziemy do sklepu. Idziesz z nami?

Pomijanie czasów (przeszły/teraźniejszy/itd.) jest z kolei tak powszechne, że wyjątkiem są raczej te sytuacje, gdy potrzebne jest ich użycie. Wówczas też chodzi bardziej o określenie punktu odniesienia (ca le cabdei – dzisiaj) niż o wymagania samej gramatyki.

Powyższe przykłady pokazują, jak pomijanie niektórych części wypowiedzi nie musi wpływać negatywnie na jej zrozumiałość. Innym mechanizmem wprowadzania “niejasności” jest tanru, czyli metafora. Polega on na połączeniu dwóch predykatów tak, że pierwszy modyfikuje znaczenie drugiego. Szczegóły tej modyfikacji nie są dokładnie określone i jest tak by design. Użycie tanru wprowadza więc pewną nieprecyzyjność jako cenę za skrócenie wypowiedzi:

mi xabju lo barda zdani — Mieszkam w dużym domu.
mutce xamgu fa lonu cilre fi la lojban. — Uczenie się lojbanu jest bardzo pożyteczne. (;P)
ko sutra bajra klama fa’a mi — Biegnij szybko w moją stronę.

Jak widać odpowiednikami tanru w innych językach są m.in. połączenia rzeczowników z przymiotnikami, a także stopniowanie tych drugich. Da się więc tutaj zauważyć pewne schematy użycia, ale w gruncie rzeczy możliwości tworzenia tanru są nieograniczone – podobnie jak możliwości ich interpretacji.

Takie stwierdzenie może nieco dziwić wobec często podkreślanej jednoznaczności lojbanu. Trzeba jednak pamiętać, że dotyczy ona wyłącznie gramatyki i objawia się tym, że poprawny tekst w lojbanie jest parsowalny zawsze w dokładnie jeden sposób. To zupełnie inaczej niż w typowych językach naturalnych, czego często przytaczanym przykładem jest “angielskie tanru“:

pretty little girls school

W zależności od “nawiasowania” może ono znaczyć: szkołę dla całkiem małych dziewczynek, całkiem małą szkołę dla dziewczynek, małą ładną szkołę dla dziewczynek – i jeszcze kilkanaście innych kombinacji. Lojbański odpowiednik (milxe cmalu nixla ckule) jest z kolei zawsze odczytywany od lewej do prawej i jednoznacznie wyraża pierwszą interpretację.

Tags: ,
Author: Xion, posted under Culture » 4 comments

le ba’urtadji be lo valsi be fi la lojban.

2010-07-20 15:51

Wymowa słów w lojbanie.

Moje trwające już kilka miesięcy zainteresowanie lojbanem pewnie nie przetrwałoby tak długo, gdyby był on czymś w typie esperanto – a tym, jak wiemy, na pewno nie jest. Przeglądanie jego “formalnej definicji” (czyli The Lojban Reference Grammar) sprawia raczej wrażenie czytania dokumentacji języka programowania, biblioteki lub innego API. Jest to więc całkiem przyjemna lektura :)
Nie zapominajmy jednak, że lojban jest mimo wszystko pomyślany jako język (również) dla ludzi, i to także do – szok! horror! – mówienia. Posiada więc również określone reguły wymowy wyrazów. Są one zresztą określone bardzo dobrze, gdyż niewielki poziom ich skomplikowania nijak ma się do złożonych i nie zawsze jasnych niuansów wymowy języków naturalnych. Można to łatwo zauważyć, kiedy przyjrzymy się im z bliska.

Tags: ,
Author: Xion, posted under Culture » 6 comments
 


© 2017 Karol Kuczmarski "Xion". Layout by Urszulka. Powered by WordPress with QuickLaTeX.com.