Archivi categoria: Nerdaccia

ios

iOS, Pages e WebDAV locale

Chi possiede un dispositivo mobile Apple sa che una delle politiche Apple prevede che per usare alcune funzionalità dai suoi dispositivi o applicativi occorre avere una connessione Internet attiva.

Questo impedisce l’uso offline di alcune funzioni, e questo ci può anche stare se queste sono legate strettamente alla Rete; non lo sono altrettanto se queste funzionalità (vedi l’accesso ad un servizio webDAV) possono essere rese disponibili da una rete locale wifi, isolata da internet anche e non solo per ragioni di sicurezza (come in alcune realtà imprenditoriali o istituzionali).

Continua a leggere

oracle-ecommerce-integration

Velenosissimi problemi di startup

Oracle quando ci si mette fa diventare pazzi di rabbia; ho provato ad avviare una istanza che sapevo configurata (ometto per il momento alcuni passaggi per non rovinarvi la sorpresa):

SQL> startup
ORA-27103: internal error
Linux-x86_64 Error: 2: No such file or directory
Additional information: 101

Ovviamente cerco dettagli su alert.log e altre possibili fonti, compreso il documento ufficiale per gli errori (b14219.pdf, che per errore 27103 mi suggerisce di chiamare l’assistenza!!!!).

Internet neanche a parlarne: tanti errori e (im)probabili soluzioni, ma neanche una traccia di questo errore.

Non vi dico le peripezie e il percorso con cui sono venuto a soluzione. Anche il caso ci ha messo del suo.

In ogni modo devo prima svelarvi il contesto omesso precedentemente: l’istanza risiede in un virtual environment di un container OpenVZ (tecnologia di zoning per Linux).

L’ambiente è stato creato clonando una macchina fisica (su cui l’istanza girava correttamente): la clonazione è avvenuta con la semplice copia del filesystem con un TAR, omettendo quei percorsi legati al kernel sorgente che avrebbero potuto collidere con il kernel della macchina virtualizzatrice (/proc, /dev, /sys, ecc). Tecnica sperimentata in precedenza decine di volte con successo, anche con istanza Oracle presenti.

Ed è stato proprio in /dev il problema: nella ricostruzione di tutti gli i-node standard presenti in questo percorso mi sono dimenticato (e poi fortunosamente ricordato cercando di usarlo nel contesto di un comando che stavo eseguendo per altre configurazioni) del file speciale /dev/zero.

In assenza di questo file Oracle va in pappa e genera l’errore indicato all’inizio, senza altra informazione.

Buon Oracle a tutti

Dependency injection fatta in casa

JavaVisto il moltiplicarsi dei framework per la dependency injection in Java negli ultimi anni (CDI, Guice…), sembra ormai scontato che questo pattern sia fondamentale per la realizzazione di applicazioni enterprise complesse.

Creare un dependency injector, al contrario, è qualcosa di molto semplice. Basta usare un po’ di refection.

Prendiamo un esempio: PrizeManager è una semplice classe che, dati degli utenti e dei premi, assegna questi randomicamente, informando un altro oggetto (MainController) dello stato delle cose.

package it.nerdammer;

import java.util.Collections;
import java.util.List;

public class PrizeManager {

	@Inject
	private MainController mainController;
	
	@Inject
	private List<User> users;
	
	@Inject
	private List<Prize> prizes;
	
	public void assignPrizes() {
		mainController.start();
		
		Collections.shuffle(users);
		Collections.shuffle(prizes);
		
		for(int i=0; i<users.size() && i<prizes.size(); i++) {
			// assegna i premi
			users.get(i).winPrize(prizes.get(i));
		}
		mainController.stop();
	}
}

Il compito del dependency injector è quello di impostare i riferimenti dei campi annotati con l’annotazione @Inject.

Continua a leggere

ios

NSMenu dinamici

Ecco a voi il primo nerdpost al cacao.

Oggi parliamo infatti di un argomento nuovo per nerdammer.it ma che non può mancare: programmazione OSX/iOS , da Cocoa a CocoaTouch.

Iniziamo oggi con una esperienza Cocoa: la classe NSMenu.

In generale è sempre stato un Nib/Xib a trasportare nelle nostre applicazioni la struttura dei menu (grazie a InterfaceBuilder): ma quanti non hanno mai avuto bisogno di costruire un menu totalmente dinamico? Continua a leggere

Cambiare il tipo ad un tag input – Change type of input field (Cross browsing problem)


Problema: Cambiare il tipo (type) di un tag input (es: da sumbit a button) tramite javascript al momento del caricamento della pagina o al verificarsi di qualsiasi altro evento.

La funzione JQuery .attr() non può cambiare l’attributo type dei vari tag per via di un problema che si verifica con le seguenti versioni di Internet Explorer (Note: jQuery prohibits changing the type attribute on an <input type=”text” /> or <button> element and will throw an error in all browsers. This is because the type attribute cannot be changed in Internet Explorer):

IE 6, IE 7, IE 8

Continua a leggere

Input-type: Image

Internet BrowsersChiunque si sia mai avventurato nella giungla della realizzazione di siti web avrà certamente capito che, nonstante tutti gli standard che sono stati definiti negli ultimi anni, ogni browser interpreta il codice html/css a modo suo. Il risultato è che il 60% del tempo di sviluppo di un sito web non si perde nella fase di testing (come diversi teorici dell’ingengeria del software sostengono), ma nel cercare di trovare degli “hack” per Internet Explorer !

Fino a l’altro ieri pensavo che le incompatibilità tra browsers riguardassero solo la presentazione del sito, ma ci è voluto poco a trovarmi di fronte a un problema legato al submit delle form, in particolare, al tag input con immagine incorporata. Che differenza c’è tra i seguenti due campi di input ?

<input type="image" name="pulsante" value="Click" src="img/img.png" />
<input type="submit" name="pulsante" value="Click" />

Continua a leggere

Oracle: Note operative sul FLASHBACK

oracle dbNote operative sul Flashback in oracle.

Testato con: Oracle 10g – 11g

Per poter utilizzare le tecnologia di Flashback è necessario che il vostro db sia opportunamente configurato

Ecco alcune delle principali funzionalità fornite dalla tecnologia Flashback

  • FLASHBACK TO BEFORE DROP -> riporta la tabella allo stato antecedente al drop:
DROP TABLE table_name;
...
SHOW RECYCLEBIN
...
FLASHBACK TABLE table_name to BEFORE DROP;

Continua a leggere