• OS X’s Terminal: Getting Home, End, PgUp, PgDn to work

    April 21st, 2012 by

    Apple’s Terminal on a Macbook requires a weird combination of fn+shift+left/right, fn+shift+up/down to get Home, End, PgUp and PgDn to work. And that still causes issues in a couple of places.

    Despite maintaining my philosophy of “use defaults wherever possible”, I’ve decided to ditch iTerm and iTerm2 for a simple reason: after quitting from Apple’s Terminal, upon restart in Lion I get a screenful of information from my previous session. Quite handy if I had to restart a machine for some reason, but I don’t want to lose the context!

    Here are two fixes found Francois Planque’s post.

    First part involves fixing the escape sequences sent by the Terminal. Open Preferences (for example, by hitting Cmd+,), and navigate to Settings tab, then for the profile you want to adjust, navigate to Keyboard tab.

    Over there, define the following escape sequences upon pressing home, end, page up and page down:

    home: \033[1~
    end: \033[4~
    page up: \033[5~
    page down: \033[6~

    If you mess up something during input, use your mouse to hit the button “Delete one character”. To get \033 in the dialog box, just press the Escape key instead of typing backslash, zero, three, three.

    After applying this, voila! vim and mc now type these keys correctly.

    But, you’ve just messed up bash.

    Second fix involves editing ~/.inputrc (or /etc/inputrc). Neither of these rc files existed on my machine. From Garret LeSage‘s blog post (and as suggested in a comment on Francois’s blog), I simply copy pasted the following:

    "\e[1~": beginning-of-line
    "\e[4~": end-of-line
    "\e[5~": beginning-of-history
    "\e[6~": end-of-history
    "\e[3~": delete-char
    "\e[2~": quoted-insert
    "\e[5C": forward-word
    "\e[5D": backward-word
    "\e\e[C": forward-word
    "\e\e[D": backward-word
    set completion-ignore-case On
    

    It’s nice to see an OS X-related tech post that’s still as useful in 2012 as it was in 2005. And it’s even nicer to see that it was originally intended for other UNIX and UNIX-style systems.

    By the way: this post’s ID is 2 * 333. Make of it whatever you want. :-)

    Saving PC sales

    February 27th, 2012 by

    So today I’m reading that Dell may be stepping away from the consumer PC arena. What could a prospective PC retailer do to save sales?

    While I’ll be ranting about Canonical, Ubuntu, Linux and GNOME a lot, please note that this is just a mention of a possible platform a device maker could have opted for. Same goes for Dell: I’m talking about them, but it mostly applies to others. And what I’m talking about is that people want an integrated (but powerful) solution that ‘just works’.

    Figure out that people want the sleek and fancy. Steam is fancy. App Store is fancy. iTunes is fancy. Intel AppUp from 2011 was decidedly not fancy, and in fact, it was a prime example of the “old” way of doing things one the PC: let’s just pack random garbage in front of the customer and hope he’ll not only bite it, but happily chew it. (Just remember all the “photo handling” software that shipped with your digital camera, or “antivirus protection” demo software shipping with your shiny new PC.)

    Thankfully, the latest version of AppUp from 2012 is a bit fancier, although still somewhat weird.

    Figure out that people want to do things differently. How happy are users with the operating system you’re shipping? I personally like Windows 7 a lot lately (more on that later). But how integrated it is with your product? What does your product do? Is it just another box? Admittedly, it may be a neat, shiny box, but what does it do? Oh — this thing on it isn’t your product? Uh-huh, so you’re just another box-maker?

    Hint-hint: end users like custom (but usable) stuff. At one point, aforementioned Dell has promoted Ubuntu on its machines. What they haven’t done is sit with Canonical and decide how to make Ubuntu the operating system for their machines. Not only that — they should have thought about how to make Dell’s laptop the machine for running Ubuntu.

    Dell and Canonical could have figured out what exactly people want and how they want it done. In my previous life as a Linux user, I was quite “needy” and I desired customizability, shunning Ubuntu for Debian. But that’s not what people want. People want stuff to “just work”. I want it too nowadays. I also want a company to figure out how the user interface should work, and make it work that way instead of me. I want them to figure out what is the best way for me to achieve my goals.

    And then I want them to proscribe that as sacred rules to developers on their platform. Then I want them to justify why those sacred rules exist. (The way NSDocument class works in Cocoa frameworks has recently allowed Apple to introduce “recent files” list for an application in Lion’s Expose for an application’s windows, as well in the Dock icon menu.)

    I want those sacred rules to be sane and enabling to the developers, instead of arbitrary decisions slapped together by a bunch of monkeys. (And I’m not pointing fingers at a single platform or library here — but pretty much at most platforms and libraries out there.)

    Figure out that people want to do stuff with their machines. After securing a deal with Canonical, Dell should have attempted to secure a deal with, for example, Adobe to port at least their flagship product Photoshop to Linux (or more specifically Ubuntu). There are bound to be many, many hurdles along the way. But instead of toying with The Gimp and waiting for them to actually make a tool that is usable by real people, getting Adobe to bring their product over would make the platform (and products) stand out and appeal to an audience. And if Adobe doesn’t want to cooperate, invest those profits in your long-term gain: look at Photoshop and replicate it under Linux, including keyboard shortcuts and whatnot.

    Go and fix OpenOffice’s interface, or at least lift what you can in designing an office suite that works and looks as an office suite should. Or write your own — Apple surely did with iWork, and they worked on that even before iPhone and iPad were insanely profitable like today. Compared to today, iPhone was only mildly popular.

    Can you see the big picture now? Can you see how a platform could have and should have come together to save, for example, Dell?

    As Apple has built their OS on the strong base of BSD userland and Mach kernel, Dell and Canonical could have delivered integrated products based on GNU userland and Linux kernel. They should have worked on securing partnerships to deliver key products to what was (and is) a nascent desktop environment.

    Apple did not use window compositing to bring you toys like a 3D cube, but to bring you tools to switch between windows and apps. Dell and Canonical should have and could have slimmed down Compiz. GNOME 3′s window manager is a nice experiment in this direction, but on the first look at it, it lifts off of Apple so blatantly in some ways that I can’t help think they should have and could have done better. It could have and should have been better than what Apple does.

    Figure out how to cut the stuff out. As mentioned, I personally like Windows 7 a lot lately, but it hasn’t struck the good balance between exposing whatever a power user needs and hiding anything that a common user doesn’t need. It’s still too complex for a common user, and at the same time, any attempt at simplification and hiding stuff just means the actual stuff you need is now hidden behind menus and behind more menus and behind more menus. See: attempting to configure just slightly more complex wi-fi setup in Windows 7. Something is seriously wrong if it’s easier to change resolution and color depth in Windows 95 than it is in Windows 7.

    Compiz needed to be cut and configured to sane defaults. Or it should have been thrown away and a custom manager should have been written.

    As long as we stick to the UNIX principles wherever possible, I can take your window manager and throw it away. Or I could write my own settings app. But if you do a good enough job, I will not want to.

    I currently am not inclined to go away from Mac, and the amount of customizations I do is minimal. Some people use custom app launchers, I’m satisfied with launching apps through Dock or Spotlight.

    But in case I want to move away, I’m hoping GNUstep takes off and provides a viable way for people to port their OS X apps to other platforms. I hope for a healthy GNUstep ecosystem where people are free to share code, but also to sell the fruit of their labors.

    But I am not really interested in moving away right now, because Apple delivers a good, complete, healthy ecosystem today, along with an integrated hardware+software stack where things like driver issues are rare and shocking events happening mostly to early adopters — definitely they are not common daily appearance for most users.

    To save your sales, deliver a healthy, integrated hardware+platform+applications ecosystem. For a corporation as big as Dell, any investment into their own platform would have been an investment into long term future. It would have been diversification and it would be a way to stay unique long-term. And not doing a good job on creating a platform when you’re a multi-billion dollar company, especially in cases where you can already take other people’s work, should be inexcusable. In fact — I’m not sure if not even attempting to do it may be an even greater sin.

    Make yourself stand out with an outstanding product that “just works”. Half-assed experiments with Linux just because it’s Linux and “free” won’t save you and will flop.

    Delivering a complete product starting with a laptop designed around a platform (which may be based on Linux), and delivering a complete platform designed around your laptop is a good way to start.

    Sloboda

    February 19th, 2012 by

    Nikada prije kao u zadnjih desetak godina nije bilo vidljivija borba između sigurnosti i slobode. Svijet se danas bori s čudovištima terorizma, straha i ekonomske nesigurnosti, a pojedinci prihvaćaju propagandu koja plašenjem protiv terorizma i ekonomske nesigurnosti uspijeva progurati novo čudovište — čudoviše sigurnosti prije svega.

    U svijetu u kojem velike banke potezima koji prosječnom građaninu izgledaju apstraktno i nerazumljivo lako je reći kako je sve to krivica kapitalizma, kako je koncept korporacije problem i kako je nužno “zaštititi” plaće, “zaštititi” građane, “zaštititi” način života, i slično. Takozvani “društveni darvinizam” poprima negativne konotacije, a borba za slobodu načina života pretvara se u uništenja slobode neke druge osobe.

    Pojedine društvene skupine koje smatraju kako je sloboda izvor dobra, a kako je kontrola izvor lošega, bivaju demonizirane. Kao nekakva hidra spominju se upravo velike tvrtke koje bi iskoristile slobodu za povećanje profita i iskorištavanja. Teško mi je izbjeći izraz “liberalizacija”, ali pokušavam – zbog negativnih konotacija, te zbog toga što današnji liberali pokušavaju podmetnuti borbu za prava kao borbu za slobodu.

    Knjiga autorice Ayn Rand nazvana “Atlas slegnu” (Atlas Shrugged), kao i sama autorica, demoniziraju se radi protivljenja zaštiti, radi zauzimanja za slobode. Istovremeno, unutra se nalazi naizgled inverzna formulacija takozvanog zlatnog pravila koje je popularizirao poznati govornik i vjerska figura, Isus Krist. Isto je govorio i Konfucije. Zlatno pravilo glasi: “Čini drugome ono što želiš da drugi čini tebi.” Naizgled inverzno, ali jednakoznačno: “Ne čini drugome ono što ne želiš da drugi čini tebi.”

    Ayn Rand pak postavlja to malo drugačije: “Kunem se svojim životom i svojom ljubavlju prema njemu kako nikada neću živjeti radi drugog čovjeka, niti tražiti drugoga da živi radi mene.” Prejednostavno je iz ovoga izvući potpunu suprotnost zlatnom pravilu. S druge strane, promotrimo to malo drugačije. Nemojmo krenuti od naizgled bitnijeg prvog dijela zakletve, nego krenimo od drugog dijela zakletve.

    “Neću tražiti drugoga da živi radi mene.” Osoba koja uistinu voli drugu osobu neće zahtijevati ništa od te osobe. Osoba koja uistinu voli drugu osobu neće ništa tražiti, ali istovremeno neće pristajati na jednostrane zahtjeve druge osobe. Ovakva zakletva odaje povjerenje u ljudsko poštenje, u ljudsku suradnju. Odaje uvjerenost i neizbježnost ljudske sebičnosti, ali je (kao i ljudsko poštenje) prihvaća i podrazumijeva.

    Svi zakoni i kontrole koje donosimo podrazumijevaju ljudsku sebičnost. Podrazumijevaju borbu protiv nje, ili je iskorištavaju do te mjere da sebičnost koristi jednoj strani. Kao mali ljudi, borimo se za zaštitu svoje sebičnosti od tuđe sebičnosti. Borimo se protiv dijela svoje prirode umjesto da ga prihvatimo i damo mu slobodu. Borimo se protiv onoga što možemo iskoristiti za vlastiti boljitak.

    Podrazumijevamo li Randinu zakletvu danu kroz usta Johna Galta kao suštu suprotnost Isusovoj varijanti zlatnog pravila (“Čini drugome ono što drugi želiš da čini tebi”) lako je ostati šokiran. Ali ono što najviše želimo sebi jest sloboda i uspjeh. Ako želimo slobodu i uspjeh za sebe, trebamo li negativcima dozvoliti da nas povuku za sobom i natjeraju da se borimo samo za sigurnost, ali nauštrb svoje i tuđe slobode?

    Trebaju li postojati zakoni i kontrole? Svakako – to je civilizacijski doseg. Ali kao što ne prihvaćamo sve odredbe Hamurabijevog zakonika u ime zaštite inače svetog privatnog vlasništva (smrtna kazna za provalu, smrtna kazna za krađu iz hrama, trideseterostruka kazna za krađu stoke, …), tako ne bismo trebali nekritički prihvaćati niti sve odredbe uvedene u ime zaštite prava na toleranciju, zaštite radničkih prava, zaštite sigurnosti u prijevozu i slično. Treba raspraviti o svakoj odredbi — a ponajviše o tome da li je uopće potrebna.

    Umjesto isključivo raspravljanja o tome koliko zaštitna odredba koristi, raspravimo i koliko donosi loših stvari.

    Lako je dati argument kako navedene zaštite postoje radi prejakog utjecaja velikih korporacija, i radi zaštite malih ljudi, te da je glas za ukidanje zaštita ustvari glas za oštećenje malih ljudi.

    Pri tome se može zanemariti kako su velike korporacije nastale u uvjetima gdje zaštita postoji, te im očito zaštita koristi. To znači kako velikim korporacijama manjak zaštite ne bi pomogao, nego odmogao te da je velikim korporacijama u interesu borba protiv slobode.

    Kako onda možemo ukidanje zaštitnih odredbi automatikom povezati s borbom za jačanje velikih korporacija?

    Koliko nas košta provođenje svih tih zaštitnih mjera? Nisu li upravo velike zaštitne mjere i velika prava razlog velikim porezima? Ne stvaraju li veliki porezi veći problem opstanku malih tvrtki nego opstanku velikih tvrtki?

    Kad zahtijevate neto plaću od 10.000kn, radi društvenih davanja i poreza ustvari zahtijevate bruto plaću od skoro 20.000kn. Vaš rad za koji zaradite 5.000kn ustvari, znači, vrijedi 10.000kn.

    Nije li teže maloj tvrtki opravdati zaposlenje osobe za 10.000kn nego za 5.000kn? Ukoliko država uzima PDV od 25%, to znači da dodatna četvrtina neto plaće radnika odlazi državi. Zarađeni novac kojim radnik ne može raspolagati penje se na oko 67%. Dakle poslodavac isplaćuje poprilično pristojnu količinu novca, a radnik je nezadovoljan. Onaj tko trlja ruke je država.

    Što tek s ostalim porezima, prirezima i ostalim davanjima? Što s cijenom benzina? Što s cijenom cigareta protiv kojih se, kao, toliko borimo — a ovisnici vrlo lijepo popunjavaju državni proračun?

    Jako je lijepo moći otići u bolnicu i primiti besplatnu njegu. Ako HZZO odluči da pokriva lijek i liječenje, naravno. Ako odluči da ne pokriva, onda smo odjednom šokirani koliko to liječenje ustvari košta.

    Jako je lijepo voziti se gradskim cestama i zanemariti koliko je to plaćeno iz prireza.

    Jako je lijepo nekoliko godina osiguravati studentima i učenicima besplatni javni prijevoz ZETa, umjesto da se borimo za istinski potrebnu optimizaciju usluge javnog prijevoza (primjerice rjeđi tramvaji i busevi, dijeljenje hrpe otkaza) te time smanjenje troškova javnog prijevoza. Ne bismo li time mogli osigurati manju cijenu karte, čime bismo “socijalno” opravdali vrlo potrebno uvođenje češćih kontrola karata?

    Zašto dajemo benefite učenicima, studentima i starijim osobama u vidu jeftinijih voznih karata ZETa — a ne onima koji uistinu financiraju infrastrukturu i saniraju dugove ZETa i Zagrebačkog Holdinga? Dakle — kako možemo društvenom pravednošću nazvati to da su karte najskuplje upravo za one kojima su najpotrebnije: radnicima?

    Socijalna briga i socijalno razumijevanje su potrebni društvu i temelj su civilizacije. Ali socijalna briga, socijalno razumijevanje i borba za svaki oblik sigurnosti (pa time i socijalni) se već godinama pretvaraju u teror nad slobodnim, uspješnim građanima koji moraju financirati borbe protiv neuspjeha ili fantoma opasnosti.

    Upravo socijalnom brigom predvođenom od raznih sindikata i velikih boraca za prava (koji sami ne rade ništa korisno) pretvaramo se ne u društvo poštenja i nagrade za rad, nego u društvo koje živi za drugoga, a nikad za sebe.

    Srednja klasa je pod ofenzivom s vrha i s dna. Velike tvrtke pridonose eroziji sve manje srednje klase, te otežavaju mobilnost niže u srednju klasu. A istome pridonose i takozvani borci za prava radnika koji nauštrb srednje klase i potencijalne srednje klase isisavaju gdje god mogu i što god mogu.

    Trebaju li mljekari tražiti državnu zaštitu? Ili trebaju pregovarati izravno sa svojim otkupljivačem? Trebaju li se boriti za bolju tržišnu cijenu mlijeka i odbiti prodavati mlijeko po cijeni koju ne mogu financirati? Ukoliko prijeti “propast”, ne trebaju li radije pokušati proizvoditi mlijeko za manje novce? Ako uistinu ne mogu — zašto ne bi zatvorili vrata i proizvodili nešto drugo?

    Ako je problem što im je država osiguravala opstanak poticajima i obećavanjem uspjeha odnosno osiguranja, nije li problem upravo to da je država činila takvo nešto umjesto proizvođača mljekarskih proizvoda?

    Promijenimo postavku. Nemojmo smatrati da se netko drugi mora boriti za nas i hraniti nas. Povratimo vjeru u sebe i druge.

    Zarađujmo strahom i poštenjem, a ne krađom i prisilom.

    Umjesto za sigurnost, molim vas, neka se borimo za slobodu da si sami osiguramo sigurnost. Štitimo samo ono što moramo štititi.

    Ron Paul na 51m55s odlično sumarizira.

    ———————————

    Nastavak na pismo vezano za ACTA

    February 15th, 2012 by

    Kako sam naveo u updateu na prethodni post s tekstom pisma, izuzetno me iznenadila pažnja koju je pismo privuklo. Uglavnom sam bio u šoku zbog silne pažnje, te se nadao da nisam napisao nešto što će (uz toliku pažnju) izazvati negativne reakcije.

    Rano ujutro u nedjelju, 12. veljače 2012., sam čak primio odgovor od Predsjednika. Već samim time moja izvorna želja je ostvarena, a to je da nakon što Predsjedniku iznesem i drugačije mišljenje — ono bude i pročitano. Želim istaknuti da u svemu ovome nema političke obojenosti. Iz poštovanja prema privatnoj korespondenciji, odgovor neću objaviti osim na izričit zahtjev pošiljatelja (dakle Predsjednika).

    Osvrnut ću se tek na to da sam izuzetno sretan zbog Predsjednikove otvorenosti prema javnoj diskusiji nasuprot brzom davanju izjave, da sam izuzetno sretan zbog namjere da se detaljno prouče problemi. Postoji i jedna mala negativnost, a to je shvaćanje piratstva kao krađe iz trgovine.

    Mišljenja sam kako se radi o postupku koji pokazuje nekulturu i nepoštovanje prema autoru djela, ali ne i kako se radi o postupku usporedivom s krađom iz trgovine.

    Predsjednik mi je dobro ukazao da pojedine stvari u mojem pismu nisu točne. Zahvalan sam na tome, kao i na upozorenju da bih trebao prvo pročitati sam izvorni dokument. Primjerice, “three strikes” je u aktualnom ugovoru iz svibnja 2011. izbačen (dok se u leakanom dokumentu iz siječnja 2010. i dalje jasno vidi taj prijedlog jedne od država-autora, SAD-a.)

    Nakon detaljnog proučavanja (koliko to moj nepravnički i neekonomistički um može), a iz perspektive kako konzumenta tako i stvaratelja digitalnih sadržaja, i dalje stojim iza toga da je ugovor nastao u štetnom duhu, uz štetne namjere. Iz drafta iz siječnja 2010. vidi se kako samo zahvaljujući upornosti pojedinih država-autora, kao što je Meksiko, ovaj ugovor danas nije još i štetniji.

    Piratstvo je, ukupno, negativna pojavnost. Postoje pozitivne strane: učenje koristeći ilegalni softver, širenje malo poznatog autora koji zatim profitira više na koncertima nego da piratstva nema, i slično. Ipak, u ljudskoj svijesti prečesto je danas stav “sve je ok, ja nikome ne škodim ili dijelim s prijateljem”. Nemam ništa protiv dijeljenja s prijateljima! Dapače. No često se to pretvori u bizarne pojavnosti kao što je tvrdnja da je $0.99 ili $1.99 previše platiti za igru.

    Dragi prijatelji, ako nije problem platiti za kavu, shvatite da čak i iza male (ali ispolirane) igre zna stajati više mjeseci rada. Da, igra za koju ne želite nagraditi autora s manje od jedne kave ($0.99) ili manje od jednog piva ($1.99) ustvari je vjerojatno plod višemjesečnog rada, i to vjerojatno više od jedne osobe, i to najčešće ne nekoga tko vozi Porsche. Mislim, možete procijeniti po igri da li je izrađena po narudžbi megakorporacije ili kao plod želje za stvaranjem nekoliko malih autora.

    No što ACTA ovdje čini? Prvo, shvatimo koliko je ACTA krivo usmjeren sporazum. Ona u isti koš trpa counterfeiting (proizvodnju robe s lažnom robnom markom), piracy (neovlašteno reproduciranje glazbenih, filmskih, književnih i softverskih djela) te patents (sustav za zaštitu izumitelja davanjem monopola na proizvod). Kako ne bih pojašnjavao što je ovdje problem, idemo jednu malu mozgalicu: sjednite i razmislite za sebe koliko je slična prodaja lažne Nike tenisice (koja bi bila tenisica i bez Nike znaka) u usporedbi s kopiranjem pjesme, te koliko su oba primjera slični s proizvodnjom lebdećeg automobila bez izumiteljevog dopuštenja.

    Sad kada vidimo da se radi o različitim problemima s potrebom različitih pristupa (a ako se to ne vidi, molim čitatelja da još malo razmisli) — što ACTA čini? Proglašava velik broj stvari kriminalnim – odnosno kaznenim – djelom. Čuli ste možda za pojam “kino rip”? Znate, kad ekipica prošverca kameru u kino, i snimi film iz publike? E, da, ACTA recimo baš to izdvaja kao veliki problem i kriminalno djelo. Zamislite takvu snimku i recite mi da li je tu išta kriminalno osim kvalitete snimke. A osoba koja će otrpiti gledanje takve snimke ili će poslije otići u kino (makar inače ne bi), ili ne bi gledala u kinu iovako ili onako.

    Ne radi se o tome da li je počinjena loša, amoralna, nepoštena radnja. Jest. (Kao i odnos prema kupcu kad CD i DVD koštaju 50kn-100kn, no nećemo sad o tome.) Ali proglašavati takve stvari kriminalom u vrijeme kada je se u svijetu (a posebice kod nas) kontinuirano događa stvarni kriminal i korupcija je smiješno. Trebamo li se ugledati na SAD gdje je, kroz regulaciju lobiranja, praktički legalizirana korupcija, ali ljudi bivaju osuđeni na plaćanje $1.920.000 radi nedopuštenog kopiranja 24 pjesme?

    Trebam li uopće pričati o tome da je moguće “smjestiti” drugome, čak i printeru, činjenje djela piratizacije? Trebam li pričati o tome da će bilo kakav automatski sustav u principu imati i veliku stopu pozitiva (kao što je mom dobrom prijatelju legalno preuzimanje Ubuntua bilo prepoznavano kao piratizacija)? Trebam li pojašnjavati da ako u kućanstvu imate 10 računala, a jedan izlazni router (i vjerojatno samo 1 IP adresu), nije moguće otkriti koje računalo, a kamoli osoba, je točno počinila djelo?

    Uz takve probleme, treba li riskirati da se potpisivanjem ACTAe obvežemo na prilagodbu zakonodavstva na način da vlastite građane proglašavamo kriminalcima zbog nečega gdje niti jedna osoba nije pretučena i ubijena, silovana, maltretirana, pokradena? Kućni pirati su monstrumi koliko su i obični ljudi monstrumi. Kriminalci? To baš nisu.

    Pa imamo i indikacija o tome da bi ISPovi pod režimom ACTAe mogli radije podleći cenzuri, a korisnici autocenzuri, kako ne bi riskirali infringement ili kršenje prava.

    Bilješke o nekim od ostalih problema pročitajte dolje.

    (Mini update: A umjesto da se borimo protiv piratstva na sve moguće načine, prepoznajmo da je kvalitetne hrvatske i “yu” filmove i serije teško pronaći i kupiti. Kao i hrvatske e-bookove. A bogme isto vrijedi i za strane filmove, serije i e-bookove. Što to govori? Usluga, a ne borba. Mrkva, a ne batina.)

    Za kraj, osim vezano za piratstvo i slobodu govora, posebno je zanimljiva i druga perspektiva, vezano za generičke lijekove, zamjenske autodijelove, zamjenske boje za printer, i slično. Preporučam tekst Radoslava Dejanovića: ACTA ad acta, objavljen na Monitor.hr, a koji je po mnogočemu i kvalitetnije štivo od mojih naklapanja, za koja mi je najbitnije da su malo potakla raspravu.


    Male bilješke o problemima

    Bilješke su nastale iz perspektive programera, jer to i jesam.

    - Članak 27 paragrafi 5, 6, 7 po uzoru na američki DMCA zabranjuje zaobilaženje zaštite protiv kopiranja. To znači da skupo plaćenu dozvolu za preslušavanje sadržaja stečenu kupovinom medija ili digitalnog sadržaja građanin može lako izgubiti oštećenjem medija na kojem je sadržaj spremljen. Naime — zabranjeno mu je zaobići zaštitu radi izrade sigurnosne kopije! Što ćemo sa “zaobilaženjem zaštite” ugrađene u neke mobilne operacijske sustave, a što je jedini način da se u mobilni uređaj unese vlastiti programski sadržaj kojeg pojedini proizvođači ne žele dozvoliti na uređaju?
    - Isti članak 27 sadrži paragraf 8 koji kaže da potpisnica može napraviti izuzetke iz pravila. Da li će se prepoznati istinska kulturna dobra za koja će se napraviti iznimke? Naime, mnoge računalne igre iz 80ih godina spremljene na disketama ne bi se nikada očuvale da nije zaobiđena zaštita koja je ovisila o tim danas efektivno izumrlim medijima.
    - Članak 27 paragraf 4 govori o tome da pružatelj mrežnih usluga mora dati podatke o “sumnjivoj” osobi, o potencijalnom prekršitelju. Dakle, moraju se dati privatne informacije pojedinca, iako je jedno sveučilište izvijestilo kako su uspješno s udaljene lokacije lažirali to da je njihov mrežni pisač neovlašteno preuzimao sadržaje. Znači da je lako nekome “smjestiti”: http://dmca.cs.washington.edu/
    - Članak 14 paragraf 2 pokazuje zašto je loše miješati copyright, trademark i patente. Navodi se iznimka za nekomercijalno prenošenje male osobne prtljage, te kako to ne treba pregledavati. No, za digitalne sadržaje smatra se da se izvoze i uvoze preko granica. Znači, malu količinu sadržaja se neće kontrolirati ako je preuzeta za nekomercijalne potrebe, ali veliku količinu hoće? Na prvi pogled, nepromišljen paragraf.
    - Članak 9 paragraf 1 uvodi “izgubljene prodaje“, dakle “moguću dobit”, kao valjani argument. Neovlašteno proizvedena kopija je rijetko uistinu moguća dobit. Slučaj “Capitol v. Thomas” u kojem je za 24 neovlašteno kopirane pjesme gđa. Thomas-Rasset kažnjena s $222.000, zatim povećano na $1.920.000, pa smanjeno na $54.000, pa povećano na $1.500.000, pa opet smanjeno na $54.000. To znači da mora platiti $2.250 po pjesmi. Ukoliko se ostalo pri $1.920.000, koliko godina bi gđa. Thomas-Rasset morala otplaćivati tih 24 pjesme?
    - Članak 10 paragraf 2 mi izgleda opasan zbog mogućnosti da se uništava oprema korištena za proizvodnju neovlaštenih materijala (vjerojatno samo na counterfeitanje i piratiziranje). Navodi se da se to čini u slučaju da je oprema primarno korištena za proizvodnju neovlaštenih materijala. Tko garantira ograničenje da se u ostalim slučajevima oprema neće uništiti?
    - Članak 5 odjeljak (l) ističe da izraz “nositelj prava uključuje savez ili udruženje“. Zašto se jednostavno nije istaknulo da nositelj prava može biti i pojedinac?
    - Članak 11 omogućuje kršenje privatnosti na temelju “osnovane sumnje”, koja u slučaju piratizacije digitalnim kanalima može, s nekim tehnologijama, biti “osnovana” pod navodnicima, odnosno teško dokaziva.
    - Sekcija 3 fusnota 4: Ukoliko dobro shvaćam, ovo se primarno odnosi na EU i Schengenski režim. Ako članica EU koja je dio Schengenskog režima ne potpiše sporazum, druge članice prema njoj moraju uvesti kontrolu granice (ukinuti Schengenski režim)? Kaže otprilike: “Potpisnice trebaju uvesti granične preglede, ali ne s drugim potpisnicama s kojima su ukinute granične kontrole.” Znači — ako s nekom državom imamo ukinute granične kontrole, ali ta država nije potpisnica ACTA (čime se ne zadovoljavaju uvjeti iz fusnote 4), obvezujemo se imati granične kontrole kako je propisano ostatkom ACTA.
    - Članak 23 paragraf 5: Kazne za “pomagače”. Ako npr. Google pomogne nekome da skine moju igru, neka završe u zatvoru Larry Page i Sergey Brin, a Google neka se ugasi?  Ako T-Portal objavi link na YouTube video s pjesmom, pomažu li u “commercial scale” piratizaciji? Ako TV kuća prenese snimke iz ratne zone bez da zatraži pravo na to od autora, treba li kriminalno goniti autora TV priloga, urednika emisije, te samu TV kuću?
    - Članak 23 paragraf 1 spominje izraz “na komercijalnoj razini” (commercial scale) no ne precizira što to znači. Što jest komercijalna skala? Ukoliko osoba koristi tehnologiju BitTorrent, automatski šalje male komadiće datoteke na potencijalno tisuće adresa. Znači, ukoliko se osobi “smjesti” da koristi BitTorrent (makar ustvari nije ni svjesna da se to događa na njenoj opremi), vlasti mogu automatski protumačiti da je vršena protupropisna redistribucija na “komercijalnoj razini”.
    - Članak 23 paragraf 3 želi kriminalno goniti nekoga tko snima kamerom film u kinu. Kao netko tko nije pravnik pretpostavljam da bi to značilo da osoba ulazi u popis osoba koje su “kažnjavane”. Da se malo našalim, jedino što tu može biti kriminalno jest sama loša kvaliteta tako nastale snimke.
    - Članak 31 potiče potpisnice na širenje protupiratske propagande. Ovo je dobro u umjerenim količinama. Organizacije RIAA i MPAA iznose nebulozne brojke u SAD, i ustvari rade suprotno od kvaitetnog promicanja poštenog odnosa prema autorima.
    - Da se malo odmaknemo od piratstva, i da pogledamo nešto za što smatram da ACTA može uistinu koristiti (a to je proizvodnja fizičkih proizvoda s lažnom robnom markom): članak 20 paragraf 2 kaže kako nije dovoljno ukloniti lažnu robnu marku kako bi se proizvod mogao staviti na tržište. Zar uklanjanjem robne marke taj proizvod nije postao “legalan”? Zar nije dovoljno kazniti proizvođača?
    - Način na koji će funkcionirati “Komisija za ACTAu” je malo čudan i iz nekih dijelova ugovora (članak 36 paragraf 2) proizlazi kao da bi možda, potencijalno, ta komisija mogla nadzirati samu sebe i proširivati ACTA. Čini se kako to nije slučaj u zadnjem draftu, ali da se krenulo od toga, te da su neke potpisnice uspješno uspjele lobirati da se smanji utjecaj odbora. Ipak, članak 42 određuje kako potpisnice mogu predlagati promjene, no ne ograničava se da sam odbor ne može predlagati promjene. Ipak, ovo je samo dojam.

    Otvoreno pismo Predsjedniku RH Ivi Josipoviću: “Vaša podrška ACTA-i”

    February 10th, 2012 by

    UPDATE 16. veljače 2012. 20:30
    Jučer sam objavio najavljeni follow-up.


    UPDATE 13. veljače 2012. 12:50

    Jučer rano ujutro primio sam odgovor od Predsjednika. S obzirom da poštujem privatnost komunikacije, te da nije ničime indicirano kako se radi o pismu namijenjenom javnoj objavi, neću objavljivati tekst odgovora, osim na zahtjev Predsjednika ili njegovog Ureda.

    Ono što ću učiniti je objaviti svoj skraćeni odgovor na odgovor, koji će nastati temeljem Predsjednikovih pozitivnih komentara, ali i kritika nekih stvari koje sam iznio u pismu. Vjerojatno neću objaviti kompletan odgovor koji ću uputiti, nego nešto što će efektivno biti korekcije i dopune originalnog pisma.

    Posljednjih nekoliko dana je vrlo šokantno iskustvo za mene, s obzirom da je ideja bila potaknuti na promišljanje Predsjednika i ograničen skup ljudi koji inače prate moj rad. U trenutku slanja i objave na blogu nisam očekivao veliku pažnju prema pismu, i ostajem u nadi da pažnja neće biti skrenuta na mene osobno. Svakako nisam očekivao veliko širenje teksta po webu, niti toliku pažnju. U najavljenom followupu ću pojasniti neke stvari i manje greške nastale na temelju, između ostaloga, toga da nisam pravnik i da ne pratim izuzetno detaljno međunarodnu politiku.

    I dalje stojim iza temeljne poruke pisma: Problem je loša usluga, a rješenje nije zabrana i agresivna borba.


    Danas sam uputio ovo otvoreno pismo putem e-maila Predsjedniku RH kao izraz razočaranja njegovom podrškom ACTAi.


    Poštovani gospodine Predsjedniče!

    Na pisanje ovog otvorenog pisma potaknut sam neugodnim iznenađenjem kada sam pročitao vijest o tome da ste kao jedan od političara koji se pokušava založiti za građanske slobode dali podršku ACTA-i.

    http://dnevnik.hr/vijesti/hrvatska/uzimanje-s-interneta-jednako-je-uzimanju-hrane-u-trgovini.html

    Kao jedan od sudionika u predivnom procesu stvaranja računalnih sadržaja, kao mali programer za međunarodno tržište na kojeg piratstvo i osobno može utjecati, kao student, ali ponajviše kao osoba koja razumije tehničku i društvenu stranu računalnih mreža, razočaran sam time da dajete podršku ovakvom ugovoru. Još više sam iznenađen kao netko tko vjeruje u potrebu za transparentnim donošenjem propisa, zakona i ugovora – što ACTA svakako nije. Najviše sam iznenađen kao netko tko vjeruje u osobne slobode, te u ljudsku prirodu.

    Morate biti svjesni da u većini slučajeva nije moguće odrediti točnu osobu koja je počinila računalno piratstvo. ACTA se igra s propisima kao što je isključivanje osobe s Interneta nakon tri prekršaja. Velik udio privatnih kućanstava koje imaju bežičnu računalnu mrežu nije zaštićen, ili je neadekvatno zaštićen. Malo tehnički potkovanija osoba može bez problema koristiti tuđu mrežu za čin piratstva, a bez da se tu osobu može identificirati. Drugim sudionicima na Internetu (uključujući i davatelju Internetskih usluga kao što su T-Com, Iskon, AMIS) će proces izgledati kao da vlasnik veze na Internet čini piratstvo. Što ukoliko osoba to čini na računalu u tvrtki? Da li su vlasnici mreža koje su nesigurne zbog tehničke “nepotkovanosti” vlasnika, odnosno tvrtke, odgovorne za ono što pojedinac napravi u njihovo ime? Možemo li i trebamo li zabraniti pristup Internetu?

    Podsjećam kako je u SAD bilo slučajeva da su starije osobe koje imaju računalo isključivo za, primjerice, čitanje vijesti optužene za piratizaciju zato jer je unuk, bez njihova znanja, vršio neovlašteno preuzimanje sadržaja s Interneta. Podsjećam kako su na pojedinim sveučilištima u SAD obavijest o izvršenju neovlaštenog kopiranja dobili — mrežni printeri.

    Kako se uz takvu nepouzdanost identifikacije možemo pouzdati u “tri puta i letiš van” pravilo?

    Kućni pirati također ne oštećuju izravno vlasnike autorskih prava. Ništa nije ukradeno “kao u trgovini”, kako ste Vi izjavili. Vjerujem da ste svjesni kako izradom nove kopije nikome nije uništen original; krađa kruha u trgovini izravno oštećuje trgovinu u smislu da taj kruh ne može prodati nekome drugome. Vlasnici autorskih prava vjerojatno piratu ne bi ikako uspjeli prodati svoj proizvod; rijetke su situacije kada osoba kupi proizvod onda kada ga ne može neovlašteno besplatno preuzeti. Jednostavno odustane, i pronađe alternativni sadržaj koji može besplatno preuzeti.

    Osobe koje piratiziraju i čuju, vide ili isprobaju kvalitetan sadržaj znaju ga i kupiti, makar to ne bi nikad učinili da piratizacija nije pomogla. Piratizacija pomaže malom kvalitetnom umjetniku, izvođaču i programeru za kojeg se inače ne bi čulo — ne bi se čulo jer nema veliku marketinšku “mašineriju” koja bi ga promovirala. Ukoliko vidim piratiziranu igru kod svojeg prijatelja i svidi mi se, možda ću se odlučiti na kupnju. Ukoliko čujem piratiziranu pjesmu ili je čak sam piratiziram, možda odlučim otići na koncert. Ukoliko je nikad nisam vidio, nemam izbora nego opredijeliti se za velike, bogate izvođače i njihove izdavače, neovisno o tome koliko su nekvalitetni. Jedina alternativa mi je ne odabrati ništa. Tko je tada profitirao? Nitko.

    Internet je također slobodan medij. Predivan je zato jer je slobodan. Jedinstven je jer je dvosmjeran. Ukoliko se pirate počne loviti jače nego sada, a bez da se Internet pretvori u ograničeni konzumeristički kanal umjesto u slobodni anonimni komunikacijski kanal, vjerujte mi kad kažem da će se to pretvoriti u igru mačke i miša. Što god se pokuša učiniti kako bi se uništilo bilo koju grupu na Internetu, vjerujte da se sva ograničenja nekako može zaobići. Netko će pronaći rješenje. Već sada postoje tzv. “darkneti”, slobodne mreže koje su “skrivene unutar Interneta”.

    Molim Vas da imate na umu kako Vam sve ovo govorim kao privatna osoba koja se bavi izradom softvera. Molim Vas da imate na umu kako je i vlasnik najveće Internetske trgovine računalnih igara Steam, Gabe Newell, izjavio kako je problem piratstva ustvari problem loše usluge. Koliko puta ste htjeli pogledati kupljeni film s DVDa da bi Vas dočekale reklame? Na VHSu je bilo trivijalno preskočiti reklame — no na DVDu je gledanje reklama često nemoguće zaobići. Ukoliko neka usluga omogući jeftino kupovanje filma bez odlaska do trgovine, bez gledanja ogromne količine reklama, ne znači li to da je lakše platiti kako bih zauvijek i uz garantiranu brzinu mogao preuzimati taj sadržaj?

    Umjesto da zagovarate ACTA, pokušajte zagovarati poboljšanje usluge hrvatskim korisnicima. Pokušajte zagovarati dolazak usluga kao što su iTunes Music Store i iTunes Book Store u Hrvatsku. Pokušajte zagovarati dolazak hrvatskog sadržaja na te i slične usluge. Olakšajte hrvatskim korisnicima da ne budu pirati umjesto da im se prijeti oštrim kaznama, a možda i zatvorom.

    Piratizacija je problem. Ali ACTA nikako nije rješenje za ičije probleme. Rješenje i za ponuđače i za korisnike je to da se jednostavno ponudi bolja usluga na slobodnom tržištu. iTunes Music Store je to dokazao: ljudi su pohrlili kupovati pjesme po cijeni $0.99 jer je izvedeno na jednostavan način, i jer se na jednostavan način moglo pjesme prebaciti na svirač glazbe iPod. Steam je također to dokazao: na bilo kojoj rasprodaji ostvaruju se rekordne prodaje i zarade.

    Možda ste čuli za “Humble Indie Bundle“, ilitiga “Skromni paket nezavisnih”? To su paketi igara napravljeni od malih studija za razvoj računalnih igara. U svakom paketu nalazi se najčešće po 5 ili više igara za tri računalne platforme, te mogućnost doniranja u dvije humanitarne organizacije. Prodaja traje oko dva tjedna. Dosad je bilo, čini mi se, 6 paketa.

    Kupac može unijeti bilo koju svotu novca za kupnju igara. (Za neke male svote transakcijski troškovi koje nameće kartična kuća su zasigurno veći.) Što mislite, kolike su zarade po paketu?

    Svi osim jednog paketa donijeli su više od $1.000.000. Neki su donijeli i više od $2.000.000. Prosječni kupac daje oko $4.50.

    Dakle: usluga je ključ, a ne dodatna zaštita! Zakoni za zaštitu već postoje. Nerealno, nepraktično i implicitno autokratski ih je provoditi na privatnim korisnicima, a ACTA pokušava upravo to. ACTA pokušava nametnuti promjenu ponašanja slobodnim građanima koji nikoga nisu ubili, oštetili ili ozlijedili. Financijska šteta ne postoji, nego neostvarena, moguća, fantomska dobit.

    Podrška ACTAi je podrška ograničenju slobodi. Podrška ACTAi je podrška preuveličavanju štete od piratizacije. Stoga se nadam da je Vaš izraz podrške ACTAi lapsus koji ćete što prije ispraviti.


    Ivan Vučica
    student i programer
    ivan@vucica.net

    NSMutableDictionary without automatic retaining of contained objects

    January 25th, 2012 by

    There may arise a situation where you absolutely can’t do something without either doing ugly hacks with overriding -release (which you should never, ever do), or using non-Objective-C constructs such as C++’s std::map (shudder), or rolling out your own key-value storage data structure (evil NIH syndrome strikes again).

    The Reason

    The only valid reason I can think of for doing this is to avoid a cyclic reference. For example, an object must be stored in a dictionary, but should be automatically removed from it upon being -dealloc‘ed. This is exactly what I’m doing in a game I’m slowly working on in order to cache OpenGL textures. I tried hacking this by overriding -release and monitoring -retainCount. Any Objective-C developer worth the name will know that's a pretty dumb thing to do: -retainCount is a pretty shaky thing to depend on, due to various compiler optimizations, and overriding -release can only cause issues. (Yes, that includes overriding -release to force yourself and your teammates never to destroy a singleton. I actually saw that being done in production code. Pretty nasty stuff.)

    Pretty much invalid reasons are:

    • storing non-Objective-C pointers or data types. If you're making use of NSMutableDictionary, you're probably making use of Objective-C and Foundation. So make use of the reference counting mechanism built into the framework by wrapping the non-Objective-C data type into something that can be swallowed by the framework nice and easy. Create a thin wrapper around this data by subclassing NSObject
    • not wanting to deal with the reference counting system. Oh, so you're one of those people who don't like to use -retain/-release/-autorelease? You find them abhorrent? Go and cry to your mommy; the reference counting system is one of the most powerful mechanisms enabled by Objective-C and provided by Foundation. Shunning it is no good.

    Oh, and if you're one of the ARC-loving pansies developers, sorry; I have no idea what effect this'll have on your funny-colored little world. Because we're about to dive into the mean world of Core Foundation.

    This also, sadly, means I have no idea how this'll work with GNUstep.

    The Explanation

    So you may have heard that Core Foundation equivalents of Foundation classes are "toll-free bridged". What does this mean?

    This means that if you create a CFArray, you can use the resulting pointer as an NSArray, and vice versa. This is pretty handy if you're writing code that interacts with Mac OS X's kernel. When writing something that talks to Bluetooth subsystem (say, a new Bluetooth service), you will use C functions that accept and return CFDictionary instances. Oh, sir, yes they do.

    So to clean up your code of all those nasty CFDictionary*() function calls, and make it look all nice and Objective-C-ish, what can you do? You just pass the resulting CFDictionary pointer as the first thing in the brackets (you know, where you usually put an Objective-C message target?) and you use plain old Foundation message sends to do operations with the dictionary. To get rid of the warning, you can cast it either prior to the message send or in-line when performing the send.

      CFDictionaryRef dict; // same as CFDictionary *
    
      // . . . initialize it here . . .
    
      [((NSDictionary*)dict) valueForKey:@"someKey"];
      // ...or alternatively:
      NSDictionary * theDict = (NSDictionary*)dict;
      [dict valueForKey:@"someKey"];
    

    And you can also do the opposite thing! You can create an NSDictionary and pass it off as a CFDictionary.

      NSDictionary * dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"value", @"key", nil];
    
      // . . . use it here . . .
    
      // now we'd have to do [dict release].
      // or, we could have autoreleased the object right after
      // initializing it.
      // but let's be fancy.
      CFDictionaryRef cfDict = (CFDictionaryRef)dict;
      CFRelease(cfDict);
    

    The Solution

    So how do we actually create a NSMutableDictionary whose objects won't be retained nor released?

    It turns out to be wonderfully simple. You see, CFDictionaryCreateMutable() is a C function. And C doesn't have a concept of reference counting built deep down into its core. So when you create a dictionary for use with C code, in a C-only program, you probably don't want the dictionary to try to send messages to pointers which are not really Objective-C objects.

    And as we have demonstrated each CFDictionary is actually an NSDictionary.

    If you are using a C function, it's a good idea to actually default to C behavior: no retaining and no releasing. It might also be a good idea to allow one to use a third-party reference counting mechanism?

    That's exactly what was done here. When calling CFDictionaryCreateMutable(), you feed it an allocator which can be used to allocate memory instead of the default one, the default capacity (just like -initWithCapacity:), and two pointers which describe just how the dictionary should behave when retaining, releasing, describing, copying, hashing and comparing values and keys.

    First thing I did, and that seems to work quite well, is just pass NULL for the last two pointers. That is, it works quite well when your keys are constant strings which won't be released that easily. I haven't experienced a crash even when they aren't, but let's not risk it.

    So let's see.

    NSMutableDictionary * ourDictionary = (NSMutableDictionary*)CFDictionaryCreateMutable(nil, 0, NULL, NULL);
    

    Good, but let's improve it by passing a pointer to a default structure for copying and releasing keys. Note that NSMutableDictionary also copies its keys. Exploring why it does so should be an exercise for the reader.

    NSMutableDictionary * ourDictionary = (NSMutableDictionary*)CFDictionaryCreateMutable(nil, 0, &kCFCopyStringDictionaryKeyCallBacks, NULL);
    

    Now our keys are copied and released where appropriate, while the values are left untouched.

    Optionally, explore using kCFTypeDictionaryKeyCallBacks in situations where your keys may be other CFType-derived objects. (That is, not just CFStrings/NSStrings.) Don't use this if there is even a remote chance of your key being a mutable object.