@t[Csak ülök és programozok]~~META:date created = 2008-10-03~~
Ülök a gép előtt, programozok, és arra gondolok, hogy vajon miért csak mi tesszük ezt, „programozók”. Az a ki tudja, hány százezer muki, akinek hozzám hasonlóan szokása – vagy éppen fizetett munkája –, hogy programokat bütyköl össze. Merthogy a többség csak a meglevőket használja, amiket mi csinálunk.
Valaha nem így volt. Aki számítógéphez nyúlt, az programozó volt, mást nem is engedtek oda. Később már csak minimális programozói tudás kellett a géphez, felhasználók tömegei nem ismertek többet a LOAD és a RUN utasításnál, meg esetleg a POKE-nál, amivel közvetlenül a memóriába lehetett írni. Kis cédulákra föl voltak nekik írva [[http://c64.hardwired.hu/extras/cheats/cheats.htm|ilyenek,]] ezeket beírták a játék betöltése után, és örültek. De azért elég sok emberke programozott is.
Ma már nagyon kevesen. 1,4 milliárd ember használja a netet a világon, számítógépet feltehetően még valamicskével többen. Ennek csak elenyésző töredéke programoz.
Pedig tök jó dolog.
Programozói szemszögből kétféle program létezik. Felhasználói szemszögből csak egyféle, mert a felhasználó csak az egyikkel találkozik: a „felnőtt” programmal, ami csinos kis csomagban érkezik, installálásra, bocsánat, //telepítésre// készen, az ikonja megjelenik a Start menüben és az asztalon, kattintásra indul, mindent megcsinál, ha elakadunk, ott a használati utasítás, szóval minden szempontból komplett, forgalomképes piaci termék.
De a programozó a másik fajtát is ismeri. Sokszor csak a sajátjait, mert megírja őket, használja, de soha nem adja tovább, nem is lenne értelme, mert kifejezetten a saját szükségleteire készült, más nemigen venné hasznát. Mint az én programindító programom. A nevét nem mondhatom meg, mert nincsen neki; programot írni sokkal könnyebb, mint a programnak nevet találni, ezért ha nem muszáj, ezzel nem szenvedek.
Programindító programom arra szolgál, hogy elindítsa a programokat. Én nem tartok ikonokat az asztalomon, nem is kotorászok a Start menüben, csak megnyomok egy //hotkey//t és elindul a program. Meg mindenféle programok mindenféle funkcióira is vannak makróim, amik másnak aligha kellenének.
Ilyeneket az olvasó is nagyon könnyen csinálhat. Az [[http://autoitscript.com|Autoit 3]] egy univerzális //scriptnyelv,// amiben Windows alatt szinte mindent meg lehet írni. Komplett programokat is; a website fórumában rengeteget lehet találni. A címlapon levő Download gombbal töltse le az Autoitet (hét mega), indítsa el, és amint az installálás lefutott, írhat programokat. Akár a Jegyzettömbben is. Akarja a programjait egy-egy billentyűkombinációval indítani? Tessék:
hotkeyset("#j", "jegyzettomb")
while 1
sleep(1000)
wend
func jegyzettomb()
run("c:windowsnotepad.exe")
endfunc
Nem kell érteni, csak lemásolni. A piros sor egy hotkeyt, vagyis forró gombot definiál, a Win–J-t (# a Windows gomb jele), amihez hozzárendeli a sárga részt, aminek a feladata elindítani a Windows Jegyzettömbjét (amit Notepad.exének hívnak, és a c:windows könyvtárban szokott lakni). A fehér pedig egy végtelen várakozás, arra szolgál, hogy működésben tartsa a programot, mert enélkül egy pillanat alatt eltűnne és nem lehetne használni. Ez a rész csak egyszer kell.
Akar az olvasó száz ilyen forró gombot? Semmi akadálya. Csináljon mindegyikhez egy példányt a piros sorból és egyet a sárga sorokból. A zöld kiemelőfilccel megjelölt részeket cserélje ki szükség szerint, a kékkel jelöltek helyére mindegyiknél írjon egy szót, mindegy, mit, csak a pirosban egyezzen a sárgával, és ne egyezzen a többi kékkel. Gombok definiálhatók a következőképpen: # a Win gomb, ^ a Ctrl, ! a Shift és + az Alt, ezekből többet is lehet egyszerre, például +!x azt jelenti, Shift–Alt–X. Meg lehet írni olyanokat, mint {f1}, {enter} stb., a teljes lista megvan az Autoit helpjében.
Ha az olvasó megírta a programot, mentse ki //akármi//**.au3** néven, aztán indítsa el, mint egy programot. Egy Autoit-ikont fog kapni a tálcán, s amíg az ott van, a létrehozott forró gombok szépen elvégzik a nekik rendelt feladatot.
Nálam tucatszámra vannak-voltak ilyen programok, Autoitben, a régebbi [[http://autohotkey.com|Autohotkey]]ben, azelőtt más nyelveken. A kilencvenes években például [[http://en.wikipedia.org/wiki/4DOS|4DOS]]-ban építettem magamnak egy bonyolult rendszert, ami rengeteg mindent tudott, többek között azt, hogy a sok-sok apró parancsfile ne foglaljon külön-külön helyet a wincsin (ez akkoriban nagyon fontos volt). Ezek az „egyszer megírom, onnantól használom, ha kell, megváltoztatom” típusú programok.
Vannak „egyszer megírom, felhasználom, aztán elfelejtem” típusú programok is. Egyszer használatos programok. Leggyakrabban arra kellenek, hogy szövegeket átalakítsak valami mássá, aztán az adott probléma többet nem fog fölmerülni, vagy ha mégis, akkor hamarabb megírom újra a programot, mint előkeresem a régit. Avagy nemrég egy számítással akadtam össze, ami túl bonyolult volt ahhoz, hogy számológépprogrammal csináljam, sokszor is volt rá szükség, tehát programot kellett írni rá – de a számításra Palmon volt szükség, Palmon sajnos mindmáig nem tudok programozni, ezért írtam egy programot, ami a teljes értéktartományra elvégezte a számítást, az eredményeket kiírta egy listába, aztán a listát azóta is elfelejtettem átmásolni a Palmra. De megvan és használható.
Hogyan lesz az ember programozó – akár csak olyan amatőr is, mint jómagam? Úgy, hogy megtanul egy programnyelvet, elkezdi használni, programokat írogat rajta, és amikor úgy tartja kedve, nekiáll megtanulni még egy programnyelvet. Választék szerencsére van bőven, tessék egy kimerítő [[http://en.wikipedia.org/wiki/List_of_programming_languages_by_category|lista]] a Wikipédiáról, kategóriák szerinti bontásban. A legfontosabb kategóriák:
//Compiled languages// (lefordított nyelvek). Ezek némelyike (BASIC, C és C++, Delphi, Java, Pascal) alkalmas a legkorszerűbb önálló programok írására. (Önálló program az, aminek a futtatásához nincs szükség az eredeti fejlesztőkörnyezetre, ami egy elég nagy és persze drága szoftver.)
//Interpreted languages// (értelmezett nyelvek). Itt viszont éppen ellenkezőleg, a programot a nyelv folyamatosan olvassa, tehát önálló programot nem lehet írni. (Persze nagyon sok nyelv értelmezővel és fordítóval egyaránt el van látva, fejlesztés közben az értelmezőt használjuk, aztán amikor kész a program, lefordítjuk és most már önállóan is megáll.) Ezek közül az Autoit, a Perl, a Python és a VBScript érdemel fokozott figyelmet.
//List-based languages// (listaalapú nyelvek). Itt található a Logo nyelv, ami nagyon érdekes, egyrészt a Logo védjegyévé vált (bár persze más nyelvekben is ismert) teknőcgrafika miatt, másrészt viszont a nyelv egésze is az.
//Logic-based languages// (logikai alapú nyelvek). Itt találjuk a Prolog nyelvet, ami nagyon különleges, „hagyományos fejű” programozó nem is boldogul vele könnyen. Az összes többi nyelven utasítjuk a gépet: csináld ezt, csináld azt. A Prolog és rokon nyelvei viszont állításokat fogalmaznak meg, amikből logikai láncok jönnek létre, aztán a gép dolga levonni a következtetéseket.
//Macro languages// (makrónyelvek). A Wikipédia ez alatt azt érti, hogy szövegbe ágyazunk végrehajtható programrészleteket – ennek a módszernek legfontosabb képviselője a PHP nyelv. De makrónyelvnek hívjuk azokat a nyelveket is, amiket egy-egy alkalmazás részeként lehet használni. Például a Microsoft Wordnek van egy makrónyelve, amiben nagyon fejlett programokat írhatunk – amik aztán természetesen csak a Wordön belül működnek, de ott bármit meg tudnak tenni. Az ilyen makrónyelveket is érdemes megtanulni: ha az olvasó használ olyan alkalmazást (Wordöt, Excelt stb.), aminek van saját makrónyelve, akkor sokkal hatékonyabban tud dolgozni a programmal.
//Object-oriented languages// (objektumorientált nyelvek). A Wikipédia ezeket még tovább osztja, de ez számunkra most nem fontos. Objektumorientált nyelveken lehet olyan programokat írni, amik például Windows alatt tevékenykednek, ablakokkal, gombokkal, miegyebekkel. A már említett nyelvek közül is jó néhány objektumorientált, vagy van olyan változata, amelyik az, vagy ugyanazt a változatot lehet használni objektumorientált vagy nem objektumorientált módon.
//Scripting languages// (scriptnyelvek). Itt említi a Javascriptet (és az Autoitnek meg az Autohotkeynek is itt lenne a helye). Hasonlítanak a makrónyelvekre.
Azért persze a legtöbb programozójelölt örül, ha //egy// nyelvet megtanul. (Megnyugtatom az olvasót, én se ismerem mindet azok közül, amiket felsoroltam, pláne nem jól.) Melyik legyen az az egy?
Ízlés dolga. Régen a BASIC volt a kezdők egyeduralkodó nyelve, mert minden gépen rajta volt, egyből lehetett tanulni. Ma már ez nem szempont, mindegyiket egyformán le lehet tölteni. Azazhogy egy részüket persze csak megvenni lehet. Lehet egy BASIC-kel kezdeni, amilyen a [[http://pagesperso-orange.fr/panoramic-language|Panoramic]] (nem ismerem, csak látom, hogy van ingyenes változata) vagy a [[http://www.libertybasic.com|Liberty BASIC]] (bár ez ránézésre elég extravagáns). Vagy egy BASIC-szerű nyelvvel, amilyen az Autoit. Esetleg [[http://php.net|PHP]]-vel, ehhez se kell több: az ember letölti, fölrakja a gépére, és kész, futhat. De a Logót is nagyon tudom ajánlani, például a [[http://www.cs.berkeley.edu/~bh|Berkeley Logó]]t, ami nagyon szép, fejlett változat.
Kedvcsinálóként íme legutóbbi programom teljes szövege. Ez egy PHP-ben írt képszín-változtató program; ilyeneket tud csinálni:
{{1897-1.jpg}}{{1897-2.jpg}}{{1897-3.jpg}}{{1897-4.jpg}}
csak annyit kell beírni, hogy ''php.exe imagecolorize.php //képnév piros zöld kék//'' (ahol //piros, zöld// és //kék// a színösszetevők 0-tól 255-ig, hogy melyik összetevőt mennyire kell megváltoztatni). A program kicsit buta, mert csak jpg-kkel boldogul (ami nem nagy baj), és a fekete háttereket is átfesti (ami már nagyobb baj), de kezdetnek megteszi. Íme:
$img=$argv[1];
$i=imagecreatefromjpeg($img);
if($i && imagefilter($i, IMG_FILTER_COLORIZE,
$argv[2], $argv[3], $argv[4]))
imagejpeg($i, str_replace('.', '_recolor.', $img));
@blogf[Palm 4DOS BASIC Logo számtech programozás AutoHotkey AutoIt PHP makró programnyelv]