Archive for the ‘web dev’ Category

Considerazioni che domani sicuramente smentirò.

Monday, October 1st, 2007

Il vero piacere nell’amministrare una piattaforma che funziona a crediti è che l’affermazione UPDATE user SET credits = credits + 1000 WHERE userid = 1 LIMIT 1; fa sempre un certo non-so-ché.

acumulator 6v
constructii interioare
avion paris
boxe de vanzare
coltare
ceas desteptator
curierat cluj
decor cluj
cumpar domeniu
catalog gresie faianta
facultati de farmacie
garduri de fier
ghidul bucurestiului
haine barbati
imprimare tricou
incarcator laptop
incarcatoare laptopuri
litoral bulgaresc
muntii bucegi
articole din piele
masini second hand
top siteuri
traducere autorizata
firma transport mobila

vBulletin plugin: Cambiare “postbit template” a seconda della sezione

Wednesday, September 26th, 2007

Nel vBulletin 3.6.x (e forse anche 3.5.x e precedenti) la scelta del template da usare nelle sezioni che stampano posts ed entries viene delegata alla classe vB_Postbit_Factory (che istanzia la classe Vb_Postbit) il cui scopo è quello di di preparare i dati alla visualizzazione.

Il template utilizzato da tutte le classi che estendono Vb_Postbit è ‘postbit’ o, nel caso in cui valga l’affermazione $this->registry->options['legacypostbit'], postbit_legacy (con le info utente a sinistra, come nella 2.x).

Le classi che estendono Vb_Postbit sono:

  • vB_Postbit_Announcement
  • vB_Postbit_Pm
  • vB_Postbit_Usernote
  • vB_Postbit_External
  • vB_Postbit_Post_Ignore
  • vB_Postbit_Post_Ignore
  • vB_Postbit_Post_Global_Ignore
  • vB_Postbit_Post_Deleted

Ciò significa che con una semplice plugin attivata sull’hook postbit_display_complete sarà possibile forzare il $this->templatename su uno di nostra scelta.

La plugin più semplice che potrò realizzare a partire da queste premesse sarà:

product: “vBulletin”
hook: “hook postbit_display_complete”
titolo: “change postbit template”
execution order: “5″
code:

if(strtolower(get_class($this)) == 'vb_postbit_pm')
$this->templatename = 'pm_postbit';

Nota: in PHP 4 la funzione string get_class ( [object $object] ) restituisce la stringa lowercase col nome della classe dell’oggetto passato come parametro; a partire da PHP 5 la stessa funzione ritorna la notazione originale della classe.
Per ovviare a questo inconveniente, non potendo prevedere la versione del PHP sul quale girerà il vbulletin, sarà bene forzare a minuscolo il nome della classe con una string strtolower ( string $str ).

Finalmente: Wordpress 2.3

Tuesday, September 25th, 2007

Dexter Gordon fu un noto sassofonista nonché un attore con una nomination agli Academy Award.
Dexter Gordon è anche il nome dell’ultima chicca del più noto Matt su Google.

La più recente versione di Wordpress, la 2.3, gode di nuove mirabolanti caratteristiche:

  • Supporto nativo dei tagging
  • Avviso di aggiornamenti, interfacciato con le api.wordpress.org
  • Una più valida gestione dei permalink
  • Un editor WYSIWYG avanzatamente più avanzato
  • Supporto completo ad Atom 1.0
  • Il nuovo JQuery.. ed ho detto tutto..

Riferimenti: “La news del Matt” e “L’area download di Wordpress“.

Simulare una connessione lenta in locale

Wednesday, September 19th, 2007

Realizzando la progress bar di un multiple file upload in ajax (in jQuery, e viene su che è una meraviglia…) mi sono reso conto di non poter debuggare in locale a causa dell’eccessiva velocità di trasferimento.
Ho trovato un proxy che si occupa di catturare le richieste http inviate ad una determinata porta e, stringendo la banda a nostro piacimento, di inoltrarle altrove, ad esempio localhost:80.

Lo scaricate da questo sito: http://www.delight.ch/ -> downloads -> programme -> SpeedLimiter.

Pensieri^7

Wednesday, September 19th, 2007

Se si comprende il contenuto di un array epta-dimensionale nel suo complesso, ma non il motivo per il quale lo si è introdotto, allora - forse - è arrivato il momento di fare un po’ di debugging.

Pop-Corn & Coke!

Friday, September 14th, 2007

Stavo leggendo un bellissimo post su un forum di programmazione JS nel quale si argomentava su quale fosse il metodo migliore per implementare l’in_array così com’è in PHP.

Due, come da programma, si sono messi a flammare di gusto: Popcorn & Coke!

Priceless

Thursday, September 6th, 2007

Non ha prezzo scoprire, quando è ormai troppo tardi, che i bug di script.aculo.us sono molto più gravi di quanto ritenevi possibile che fossero - soprattutto esclusivamente con IE6+.
[Framework in uso: prototype jQuery]

Beata Entropia #315

Tuesday, August 21st, 2007

Qui davanti a me ho 589KB di codice distribuiti tra diversi linguaggi.

Il tutto si gingilla baloccandosi nello stampare a schermo “Hello World” validamente. Brutto mondo il mio.

DHTML Dropdown Menu accessibile e semanticamente corretto (puntata #2 - scelta della struttura dati)

Friday, May 18th, 2007

Un buon punto di partenza nella costruzione del nostro menù è quello di usare DOM per attraversare l’intero nodo id="navbar" e salvarlo in un’adeguata struttura dati.
Ma quale?

Le più scontate sono:

  • Array
  • Object

La scelta cade facilmente sugli oggetti.

Ora non mi pare il caso di fare una lezione su Javascript Object Oriented, quindi non andrò a spiegare cosa sono oggetti, metodi, proprietà o prototipi: ci sono tante belle guide che spiegano chi, come, dove, quando e perché.

A questo punto mi pare cosa sana e giusta aprire una parentesi su JSON.
La trasformazione di un oggetto nella sua rappresentazione JSON è cosa da poco. Volendo estendere il sistema e sporcarlo con AJAX ci troveremo già con una struttura pronta per essere inviata al server ed elaborata in asincrono.

Un tipico esempio di JSON è il seguente:


 {
    "firstName": "John",
    "lastName": "Smith",
    "address": {
        "streetAddress": "21 2nd Street",
        "city": "New York",
        "state": "NY",
        "postalCode": 10021
    },
    "phoneNumbers": [
        "212 732-1234",
        "646 123-4567"
    ]
 }

Dalla notazione letterale JSON è possibile riottenere un oggetto Javascript con un semplice Object = eval(String):


 var o = eval("(" + string + ")");

DHTML Dropdown Menu accessibile e semanticamente corretto (puntata #1 - studio)

Thursday, May 17th, 2007

Ok, sono quasi le tre, ma ho un po’ di idee in mente.
Se salvo un paio di schizzi su un file nel desktop è come averlo già perso, qui diventa obbligo morale concludere il progettino.
Ho cercato in giro una soluzione che mi accontentasse, ma tra le decine di progetti seri e decenti solamente un paio meritavano di essere notati. Uno costa parecchio, l’altro rientra nelle YUI (Yahoo User Interfaces) ed è fuori scala.

Dev’essere semplice,
che contenga al più una lista di elementi o un nodo al cui interno sono già inseriti gli elementi del menù dropdown. Nel caso più semplice deve essere tollerata la lista pura <ul>...</ul> e nel caso più complesso devono essere tollerati N sottolivelli.

E’ necessario considerare gli elementi interni ed esterni
al blocco che contiene il menù e non dev’essere modificato il loro stile, nè tantomeno va forzato il position, il display o il float del blocco del menù cosicché non collassino eventuali elementi esterni.

La semantica in primo luogo,
altrimenti lo scopo del progetto va a farsi benedire. Tra l’altro che senso ha avere liste annidate N volte se si costringe uno screen reader ad affrontarsi nodi e nodi di DOM?

Una volta stabilita la semantica
più adatta a supportare tale progetto il codice non si tocca più e tutte le modifiche vengono fatte a caldo via DOM.

Il menù dev’essere avviato non appena disponibile
senza dunque essere legati all’evento window.onload.

I fogli di stile devono essere separati
in core (che si occupano di gestire i posizionamenti dei sottolivelli, le visualizzazioni nonché i vari float) e in style (ovvero l’aspetto estetico dei livelli e dei sottolivelli, dai colori ai caratteri, dai padding alla dimensione dei blocchi).

Un sottolivello non è necessariamente una lista,
ma può benissimo contenere immagini, object o altro. Un sottolivello è un blocco, poi sta all’implementatore decidere come utilizzarlo.
Se un sottolivello ha determinate caratteristiche (palesi sotto-sottolivelli) il clientscript si deve occupare di trattare anche lui alla stregua di un parent.

Se la tecnologia degrada (#1)
il sistema degrada armoniosamente. Il che significa che, trattandosi di xhtml si deve prevedere la mancanza di css e di js o di un parziale e potenzialmente dannoso supporto degli stessi.
Javascript, tra l’altro, deve essere di supporto a CSS per gestire DOM laddove CSS3 non è disponibile e per forzare il cross-browser.

Se la tecnologia degrada (#2)
si deve fare il possibile per mantenere gradevole l’aspetto estetico del menù.
Se Javascript esplode c’è ancora CSS.
Se CSS esplode siamo cagati.

Deve girare ovunque,
anche sul mio casio del ‘78. E deve funzionare anche su AMAYA.

Appena ho un po’ di tempo trasformo queste idee in qualcosa di funzionale.
Se qualcuno di voi “del giro” ha idee e suggerimenti da aggiungere non faccia il timido.

Un primo banalissimo esempio di xhtml è il seguente e voglio portare la vostra attenzione sul fatto che i sottolivelli sono blocchi a parte. Notate l’utilizzo degli header e delle ancore per distinguere il menù principale da quelli minori e dedicati ad una sottocategoria.


    <div id="navbar">

      <h2>Menu</h2>
      <div id="mainmenu">

        <h3>Main menu</h3>
        <ul>
          <li><a href="#verdura">Verdura</a></li>
          <li><a href="#pasta">Pasta</a></li>
          <li><a href="#pane">Pane</a></li>
          <li><a href="http://www.playboy.com">Playboy</a></li>
        </ul>
      </div>

      <div id="verdura">

        <h4>Verdure</h4>
        <ul>
          <li><a href="#">Insalata</a></li>
          <li><a href="#">Pomodori</a></li>
          <li><a href="#">Zucchine</a></li>
          <li><a href="#">Cavolfiore</a></li>
        </ul>
      </div>

      <div id="pasta">

        <h4>Pasta</h4>
        <ul>
          <li><a href="#">Tortiglioni</a></li>
          <li><a href="#">Pennette</a></li>
          <li><a href="#">Cellentani</a></li>
          <li><a href="#">Spaghetti</a></li>
        </ul>
      </div>

      <div id="pane">

        <h4>Pane</h4>
        <ul>
          <li><a href="#">Zoccolette</a></li>
          <li><a href="#">Tartarughe</a></li>
          <li><a href="#">Baguette</a></li>
        </ul>
      </div>

    </div>


This blog is protected by dr Dave's Spam Karma 2: 13136 Spams eaten and counting...