Archive for the ‘Програмирање’ Category

Скоро 50% веба је у Уникоду

петак, јануар 29th, 2010

Гугл је на свом званичном блогу недавно објавио да се Уникод приближава 50%-ој заступљености на вебу. Ту је и график који показује како је нагао његов раст:

Слика: Гугл

Слика: Гугл

Мада су се појавили коментари да је „кривац“ подразумевано подешавање сервера̂, а велики део садржаја је и даље уствари ASCII, по мени је чак и то добро: кад год неки Амер буде имао потребу за é или нечим сличним, користиће Уникод (а не ISO-8859-1). А драго ми је и што видим да људи имају мозга да учине Уникод подразумеваним подешавањем :) Превласт Уникода ће значити и да ће се појављивати и више алата за рад са Уникодом… Добра вест, из сваког разлога :)

Још једна занимљива ствар која се може видети са графика је да „егзотични“ кодни распореди (где спада и ћирилица) опадају спорије него ASCII или ISO-8859-1. Претпостављам зато што се опадање због Уникода поклапа са растом коришћености.

(Овде сам хтео да напишем „иначим растом коришћености“. Постоји ли уопште подесна реч која би се могла употребити на овај начин?)

Л-системи

петак, октобар 16th, 2009

AlgaЛ-систем илити Линденмајеров систем је формална граматика, најкоришћенија за моделирање раста биљака. Употребом Л-система̂ могу се добити веома реалистични прикази биљака применом веома једноставних правила. Уосталом, слика говори више од речи: ова „алга“ добијена је једноставним правилом F F +[ + F - F - F ] - [ - F + F + F ].

Шта му је ово F F + …? Једноставно: F исцртава линију одређене дужине у тренутном смеру (на почетку – право на горе); - окреће смер у ком ће се линије исцртавати за одређени број степени на десно; + исто то али на лево; док [ и ] памте тренутни смер и положај исцртавања (кад се исцрта све између заграда, исцртавање се наставља као да тога између није ни било). Кључно је да се ово правило примењује више пута тако што се на сваку линију која би иначе била исцртана примењује цело правило. Можда звучи мало компликовано, али ево појашњења на једном још једноставнијем правилу F [ + F ] F:

У првом кораку,

  • F исцртава линију право на горе;
  • [ памти положај и смер;
  • + окреће смер за 45° на лево;
  • F исцртава линију у том смеру, дакле 45° на лево;
  • ] се враћа на упамћени положај и смер;
  • F исцртава линију право на горе.
У другом кораку се све ово понавља, и то тако што се цело правило понавља за сваку линију која би била исцртана у првом правилу.
У трећем кораку…

Кад сам их се пре неки дан подсетио, направио сам и једну имплементацију Л-система у јаваскрипту (пошто користи уметнути СВГ, не ради у Експлореру). Могуће је задати са̂м систем, дужину линије, угао закрета, и „дубину“, број поновних исцртавања (овде, пажња: све веће од 3 или 4 ће вероватно заглавити бровзер). Имплементација је сразмерно једноставна (сам ко̂д је наравно видљив у, јел, изворном коду стране), рекурзивно пролази кроз ниску правила и исцртава систем; међутим кад сам је завршио сетио сам се да је могло и много једноставније: више пута применити обичан нађи/замени унутар ниске и линеарно прећи коначну ниску исцртавајући… но, то би било варање :)

Осим ова два, ево  још неких занимљивих Л-система:

  • F+F–F+F, угао 60 (Кохова крива)
  • F+F-F-F+F, угао 90 (такође Кохова крива)
  • F+F-F-FF+F+F-F, угао 90 (Кохово острво)
  • F[-FF]+[FFF]-FF[+F], угао 15
  • F[-F]F[+F][F], угао 60
  • F[-F][+F]F, угао 90 „табла“

а ако откријете још неки леп, приложите га у коментару.

Могуће је имати и много комплексније Л-системе: пре свега, оне који користе више од једне променљиве; затим, параметризоване, у којима се унутар правила наводе различити углови и различите дужине линија (као и дебљине, боје…); па „ослучајене“ у којима постоји више правила од којих се једно бира по случајном избору; тродимензионалне… О свему томе у неком од следећих бројева.