Kako se izogniti uporabi Flasha pri demo CD-jih

Posted by Krof Drakula on Aug 29th, 2007

Ker trenutno pomagam zbirati in urejati gradivo za Labirint trenutkov in ga lično zapakirati v dinamično obliko, sem se odločil narediti nekaj dokaj neortodoksnega - narediti “Flash” predstavitev brez Flasha.

Kako, porečete? No, ideja je taka - ker zelo nerad programiram in delam v Flashu, se ga rad izognem, ko je le-to možno. In ker sem zelo domač v Javascriptu (ki je neke vrste ActionScript, natančneje “sibling” jezik v grupi, imenovani ECMAScript) in XHTML-ju kot prezentacijskem sloju, se mi je posvetilo - zakaj pa ne bi zadeve naredil kar v XHTML-ju? Glede na to, da so dandanes knjižnice z efekti res dobre (jQuery in maljon vtičnikov za le-tega) in računalniki dovolj dobri za predvajanje JS animacij, zakaj ne bi tega res naredil kot offline XHTML?

Vse lepo in prav, dokler se ne udariš ob eno prepreko - nešteta množica različnih brskalnikov, ki se nahajajo na računalnikih končnih uporabnikov (CD je namenjen distribuciji medijem in sponzorjem), od katerih je najbolj problematičen IE - 5.5, 6.0 in 7.0. Trije brskalniki, ki se med seboj po sposobnostih in funkcionalnosti razlikujejo huje kot različni brskalniki drugih ponudnikov med seboj. Nočna mora - še posebej, kar se tiče podpore JS knjižnic in prikaza strani, pa četudi gre za še najbolj preproste CSS vmesnike.

…in potem, ključni trenutek - kaj pa če bi prisilil uporabnika, da uporabi Firefox? Lame rešitev bi sicer bila ikona na dnu strani (mogoče še celo splash screen pred dejansko stranjo), kjer bi propagiral “Best viewed in Firefox,” ampak vsak spletni oblikovalec in programer ve, da je to formalni no-no. Tega se ne počne že od davnega leta 1997. Seveda bi lahko priložil inštalacijsko kopijo Firefoxa na CD-ju, ampak kaj, če bi s tem povozil kakšne nastavitve in novejše različice brskalnika, ki je že na sistemu (recimo Firefox 1.5-)? Najti je bilo treba boljšo, izolirano in samozadostno rešitev. Rezultat? Portable Firefox!

Seveda pa sama predstavitev zna zavajati ljudi, ker, seveda, gre še vedno za brskalnik v vsej svoji veličini. Še vedno lahko dodajaš zaznamke, vtičnike, uporabljaš multi-tab vmesnik, itd. Pa tudi vsi menuji so še vedno vidni, kar seveda nima mesta v namenskem brskalniku, ki služi le predstavitvi.

Slednje pa lahko, vsaj vizualno (do sem sem trenutno prišel), popravimo s pomočjo userChrome.css datoteke. Le-ta se nahaja v PortableFirefox/Data/profile/chrome, določa pa izgled XUL vmesnika. V mojem primeru sem hotel v prvem koraku izbrisati zgornjo vrstico z menuji, kar sem dosegel z naslednjo vsebino:

@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
#toolbar-menubar, #nav-bar {
  display: none !important;
}

To skrije naslovno vrstico in menu, bookmark toolbar pa sem skril že prej s pomočjo kontekstnega menuja z desnim klikom na sivi prostor med gumbi. Željeno predstavitveno stran pa lahko odprem s preprostim ukazom v smislu PortableFirefox.exe file:///c:/pot/do/projektnega/index.html in voilá! Gecko engine s Flash pluginom in polnim JavaScript VM-jem, z vsemi dobrotami XHTML in CSS.

Sicer je še veliko ostalo - treba je izključiti vse t.i. “acceleratorje” (bližnjice na tipkovnici), ki jih je trenutno še moč klicati (Ctrl+O, Ctrl+B, Ctrl+H in podobno), izklopiti je treba še kontekstni menu pri desnem kliku na “non-input” HTML elemente (torej, vse, razen input, textarea in podobno) in par ostalih bonbončkov.

Končen nabor datotek in komentirana navodila pa bom objavil, če koga zanima takšno početje. ;) Če ne drugega, lahko sedaj res oblikujete brskalnik natančno tako, kot želite.

OMG kaka ezoterika

Posted by Krof Drakula on Mar 1st, 2007

Bentim nad ActionScriptom 2.0. No, sicer je moja napaka, ker se še nisem čisto navadil na prototype-based language. Posledično me je nekaj zaj–alo v zvezi s tem.

Če si v PHP ali v vsakem klasičnem OO jeziku pisal metode znotraj klase in delegiral izvajanje neki funkciji ob eventu, računaš na to, da se kontekst metode nanaša na klaso objekta, na katerem se nahaja. Not so v ActionScriptu. In JavaScriptu, predvidevam, ker sta oba ECMAscript.

V glavnem, problem je takle:

class XMLLoader {
  private var xml_object:XML;
  public function XMLLoader(location:String) {
    this.xml_object = new XML();
    this.xml_object.ignoreWhite = true;
    this.xml_object.onLoad = this.xmlLoaded;
    this.xml_object.load(location);
  }
  private function xmlLoaded(success:Boolean):Void {
    trace(this);
  }
}

// nekje v timeline
var a:XMLLoader = new XMLLoader("myxml.xml");

Bi kdo rad uganil, kaj se izpiše v output oknu? Vsebina XML fajla. Tako je. Ne _level0.a, ampak vsebina XML fajla. Ker nastaviš XMLLoader::xmlLoaded funkcijo kot handler za onLoad event, le ta postane member objekta XML, in tako kontekst ključne besede this pade znotraj objekta XML.

Zabavno, ne?

Update: našel rešitev. Če hočeš izvesti zgornjo kodo, to narediš s pomočjo Delegate klase:

import mx.utils.Delegate;

class A {
  private var xml_input:XML;
  public function A(xml_location:String) {
    this.xml_input = new XML();
    this.xml_input.ignoreWhite = true;
    this.xml_input.onLoad = Delegate.create(this, onLoadXml);
    this.xml_input.load(xml_location);
  }
  private function onLoadXml(success:Boolean) {
    trace(this.xml_input.firstChild);
  }
}

// v timeline:
var a = new A("myxml.xml");

Rezultat je sedaj pričakovano vsebina XML datoteke myxml.xml.

Rabiš zelo majhen SMTP relay za PHP na Windows?

Posted by Krof Drakula on Jan 30th, 2007

Našel rešitev - miniRelay. Zadeva je zelo špartansko narejena in hkrati zelo učinkovita pri tem, kar počne. Torej, če ste se kdaj spraševali, kako na Windows postaviti SMTP relay za PHP (in druge skriptne jezike), je tole rešitev za vas. Aja, pa po privzetih nastavitvah sprejema kot open relay vso pošto samo z lokalnega računalnika, lahko pa ga konfigurirate za rabo na interni mreži.

Moram pa opozoriti, da ni to polni mail server - ne podpira sprejemanje pošte, torej NE podpira POP3 ali IMAP. Kar bi sicer moralo že biti očitno, a vseeno povem vnaprej. Če rabite fully-stacked mail server, se obrnite na tale naslov.

Modeliranje objektov s pomočjo StarUML

Posted by Krof Drakula on Jan 7th, 2007

Danes sem končno našel dobro in uporabniku prijazno orodje za risanje UML klas ter izvozom za XMI format. Zadeva se imenuje StarUML in omogoča preprosto urejanje modelov ter uporabniških zgodb. Continue Reading »

Knjiga Definitive Guide to Symfony kmalu

Posted by Krof Drakula on Jan 3rd, 2007

Kot je bilo že dolgo nazaj obljubljeno, bo knjiga Definitive Guide to Symfony kmalu na voljo v tiskani obliki.

Continue Reading »

Next »

To sem jaz.

  • Krof Drakula osebno.



  • N3rd badge.

G33K!

  • qrcode

Sla.st.no

Google Analytics