Category Archives: Featured Articles

Backflips Studios guadagna 500.000$ al mese solo dalla pubblicità in-game

So che gli sviluppatori che riescono a mantenere le loro applicazioni nella top 10 su App Store, fanno un sacco di soldi, e con l’espandersi sempre più degli iPhone, “piccoli” sviluppatori possono fare i soldoni.

La software house sviluppatrice di giochi Backflip Studios ha comunicato che riesce a fatturare oltre 500 mila dollari di pubblicità in-game al mese! E questo è in assoluto uno dei più proficui risultati per quanto riguarda le vendite dei giochi.

Alla radice di tutto le 47,5 milioni di copie gratuite che Backflips è riuscita a piazzare sul mercato di iOS. Tutto ciò, porta una vastissima rete per la pubblicità, che ha fornito dei bei “gruzzoletti” di denaro all’azienda.

Lo sviluppatore riesce ad avere fino a 800 milioni di impression al mese solamente sui titoli gratuiti. I ricavi sono aumentati in modo vertiginoso – in marzo la società aveva tirato su un milione di dollari (solo negli ultimi sei mesi). Con una buona idea di marketing e una buona pubblicità, si può trovare il lavoro di una vita. Non è forse così?

Mac App Store darà nuova linfa vitale alle applicazioni per Mac OS X

Il Mercoledì sera Apple ci ha colti di sorpresa, annunciando non solo Mac OS X Lion, ma anche il Mac App Store, che sarà disponibile entro 90 giorni per tutti gli utenti Mac OS X Snow Leopard. E’ chiaramente un momento eccitante per essere uno sviluppatore Mac, con la nuova piattaforma di distribuzione che offre un grande potenziale per raggiungere facilmente di utenti. Per il momento i dettagli che si conoscono, sono presenti in questa pagina del sito ufficiale Apple.

In poche parole molti sviluppatori si stanno muovendo per proporre le proprie applicazioni anche sul Mac App Store per il giorno del lancio. Con il nuovo App Store che offre agli utenti un’esperienza estremamente user-friendly nella fornitura del software, gli sviluppatori sarebbero dei pazzi a non essere presenti anche li. La configurazione delle licenze sul Mac App Store potrebbe non funzionare in tutti i casi, ma per la maggioranza della comunità Mac significa che non ci si dovrà più occupare dell’organizzazione della vetrina online, i dettagli di fatturazione, le conferme via e-mail, la generazione dei numeri di serie e dei processi di installazione, che ormai sono solo una cosa del passato. Ciò non può che essere una buona cosa!

Personalmente penso che tutto questo sia la miglior cosa che Apple potesse fare per rimettere in pista Mac OS X. Negli ultimi due anni sono state molte le mosse che hanno portato Apple ad essere criticata sul fatto che ormai ci si concentra solo ed esclusivamente sul mondo mobile, abbandonando i Mac a se stessi. Ma è pur vero che con questa mossa il “vecchio” Steve Jobs ha voluto incoraggiare tutti gli sviluppatori e gli utenti con un messaggio chiaro e ben in evidenza: <<siamo qui, e stiamo lavorando per voi>>.

Apple ha prima rivoluzionato il mondo della musica con iTunes Store, e ha portato avanti questo progetto. Ha poi fuso iTunes Store con App Store, rivoluzionando il mondo delle applicazioni su piattaforma mobile (in particolar modo influenzando tutti i concorrenti a fare lo stesso), e ora è tempo di Mac App Store, ciò che secondo me porterà i Mac ad essere una presenza sempre più dominante nel campo dei personal computer. Avrà lo stesso successo di App Store per iPhone, iPad e iPod Touch? Lo sapremo tra 90 giorni circa.

Linear Search in unordered array [with source code written in C and video example]

In computer science, linear search or sequential search is a method for finding a particular value in a list, that consists of checking every one of its elements, one at a time and in sequence, until the desired one is found.[1]
Linear search is the simplest search algorithm; it is a special case of brute-force search. Its worst case cost is proportional to the number of elements in the list; and so is its expected cost, if all list elements are equally likely to be searched for. Therefore, if the list has more than a few elements, other methods (such as binary search or hashing) may be much more efficient. Linear search is usually very simple to implement, and is practical when the list has only a few elements, or when performing a single search in an unordered list. When many values have to be searched in the same list, it often pays to pre-process the latter in order to use a faster method. For example, one may sort the list and use binary search, or build any efficient search data structure from it.

This is an implementation of Linear Search in C Language, with Main structure.

Source Code


// © Codeido - www.codeido.com - Developed by Paolo Musolino

//Ricerca sequenziale in un array disordinato
#include <stdio.h>

int ricerca_Sequenziale(int a[], int n, int chiave)
{
	int i=0;
	
	while ((a[i]) && (i<n))
		   {
			   if (a[i]==chiave) 
			   {
				   return i;
				   
			   }
			   
			   if (i==n-1) 
			   {
				   return -1;
			   }
			   
			   if(a[i]!=chiave)
				   i++;
			   
		   }
	
}



int main ()
{
	int a[14]={5, 10, 11, 9, 7, 8, 4, 5, 7, 2, 45, 1, 4, 20};
	int ris_ricerca;
	ris_ricerca = ricerca_Sequenziale(a, 14, 20);
	printf("\n");
	
	if (ris_ricerca==-1) {
		printf("L'elemento cercato non è presente all'interno dell'array\n");
	}
	
	if (ris_ricerca>=0) {
		printf("L'elemento cercato si trova nella posizione %d ", ris_ricerca);
	}
	
	return 0;
}

Non-uniform probabilities
The performance of linear search improves if the desired value is more likely to be near the beginning of the list than to its end. Therefore, if some values are much more likely to be searched than others, it is desirable to place them at the beginning of the list.
In particular, when the list items are arranged in order of decreasing probability, and these probabilities are geometrically distributed, the cost of linear search is only O(1). If the table size n is large enough, linear search will be faster than binary search, whose cost is O(log n).[1]

Linear and Binary Searching

Studio dell’indice di condizionamento su alcune classi di matrici, rispetto alla norma 1 [FORTRAN 77]

Il condizionamento in matematica, in particolare nel calcolo numerico, riguarda il rapporto tra errore commesso sul risultato di un calcolo e incertezza sui dati in ingresso. Un problema è ben condizionato quando la soluzione del problema con delle piccole variazioni, non differisce molto dalla soluzione del problema originale; al contrario, un problema mal condizionato è un problema dove le soluzioni sono molto sensibili a piccole perturbazioni dei dati iniziali. In questo programma, scritto in FORTRAN 77, viene studiato l’indice di condizionamento delle matrici di Toepliz, Henkel, Vandermonde e Wilkinson rispetto alla norma 1.

Source Code:

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
c 			  Realizzazione a cura di: 												   
c 			- Paolo Musolino			
c 			- Maria Emanuela Aricò
c 			- Armando Ruggeri
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

	PROGRAM main

	PARAMETER (n=4)
	REAL h(n,n), t(n,n), k(n,n), v(n,n), w(n,n), z(n,n), cond
	cond=0

c PREMESSA
	WRITE (*,*) '****************************************************'
	WRITE (*,*) 'Studio indice di condizionamento delle matrici'
	WRITE (*,*) 'di Toepliz, Henkel, Vandermonde e Wilkinson per la'
	WRITE (*,*) 'norma 1'
	WRITE (*,*) '****************************************************'
	WRITE (*,*)

c CREAZIONE MATRICI
	CALL hilbert(h, n)
	CALL toepliz(t, n)
	CALL toepliz2(z,n)
	CALL henkel(k, n)
	CALL vandermonde(v, n)
	CALL wilkinson (w, n)

c CALCOLO  E STAMPA CONDIZIONAMENTO
 	WRITE (*,*)
	WRITE (*,*) 'Indici di condizionamento' 
	CALL condz(h, n, cond)
	WRITE (*,*) 'Hilbert      :     ', cond
	CALL condz(t, n, cond)
	WRITE (*,*) 'Toepliz d.d  :     ', cond
	CALL condz(z, n, cond)
	WRITE (*,*) 'Toepliz n.d.d:     ', cond	
	CALL condz(k, n, cond)
	WRITE (*,*) 'Henkel       :     ', cond
	CALL condz(v, n, cond)
	WRITE (*,*) 'Vandermonde  :     ', cond
	CALL condz(w, n, cond)
	WRITE (*,*) 'Wilkinson    :     ', cond

	END

c SUBROUTINE DEL CALCOLO DELLE NORME
	SUBROUTINE norma (a, n, n1)

	INTEGER n
	REAL a(n,n), n1, x
	n1=0
	x=0

	DO j=1, n
	  DO i=1, n
	    x = x + abs(a(i,j))
	  ENDDO
	  IF(x .gt. n1) THEN
	      n1 = x
	  ENDIF
	  x = 0
	ENDDO

	END

		SUBROUTINE condz (a, n, cond)

	USE MSIMSL

	REAL a(n,n), ainv(n,n), cond, n1, n1inv
	PARAMETER  (lda=4, ldainv=4)
	CALL azzera(cond)
	n1 = 0
c CALCOLO INVERSA
	CALL LINRG (n, a, lda, ainv, ldainv)

c CALCOLO NORMA MATRICE
	CALL norma(a, n, n1)
c	WRITE (*,*) 'Norma 1        : ', n1
c CALCOLO NORMA MATRICE INVERSA
	CALL norma(ainv, n, n1inv)
c	WRITE (*,*) 'Norma 1 inversa: ', n1inv

c CALCOLO CONDIZIONAMENTO
	cond = n1 * n1inv

	END

	SUBROUTINE azzera (x)
	REAL x
	x=0
	END  

c MATRICE HILBERT
	SUBROUTINE hilbert (h, n)
	INTEGER n,i,j
	REAL h(n,n)
	DO i=1, n
	  DO j=1, n
	    h(i,j) = 1./(i+j-1)
	  ENDDO
	ENDDO
      WRITE (*,*) 'Matrice di Hilbert:' 
      DO i=1, n
	  WRITE (*,*) (h(i,j), j=1, n)
	ENDDO
	END

c MATRICE TOEPLIZ	DIAG. DOMINANTE
	SUBROUTINE toepliz (t, n)
	integer n,i,j 
	real vet(-(n-1):(n-1)),t(n,n)
	do i=-(n-1), (n-1)
	   vet(i) = 1
      enddo 
	write(*,*) 'Inserire vettore di 3 elementi per Toepliz d.d.'
	read (*,*) (vet(i), i=-1, 1)
	do i=1,n
	  do j=1,n
	    t(i,j)=vet(j-i)
	  enddo
	enddo
	write(*,*)'La matrice di Toepliz:'
	DO i=1, n
	WRITE (*,*) (t(i,j), j=1, n)
	ENDDO	
	END

c MATRICE TOEPLIZ
	SUBROUTINE toepliz2 (t, n)
	integer n,i,j 
	real vet(-(n-1):(n-1)),t(n,n)
	do i=-(n-1), (n-1)
	   vet(i) = 1
      enddo 
	write(*,*) 'Inserire vettore di 3 elementi per Toepliz non d.d.'
	read (*,*) (vet(i), i=-1, 1)
	do i=1,n
	  do j=1,n
	    t(i,j)=vet(j-i)
	  enddo
	enddo
	write(*,*)'La matrice di Toepliz:'
	DO i=1, n
	WRITE (*,*) (t(i,j), j=1, n)
	ENDDO	
	END

c MATRICE HENKEL
	SUBROUTINE henkel (k, n)
	integer n,i,j
	real vet(-(n-1):(n-1)),k(n,n) 
	do i=-(n-1), (n-1)
	   vet(i) = 1
      enddo 
	write(*,*) 'Inserire vettore di 3 elementi per la matrice Henkel'
	read (*,*) (vet(i), i=-1, 1)
	do i=1,n
	  do j=1,n
	    k(i,j)=vet(i+j-(n+1))
	  enddo
	enddo
	write(*,*)'La matrice di Henkel:'
	DO i=1, n
	WRITE (*,*) (k(i,j), j=1, n)
	ENDDO	
	END

c MATRICE VANDERMONDE
	SUBROUTINE vandermonde (k, n)
	integer n,i,j
	real k(n,n),vet(n),a,b,x
	write(*,*) 'Inserire estremo a per la matrice Vandermonde'
	read (*,*) a
	write(*,*) 'Inserire estremo b per la matrice Vandermonde'
	read (*,*) b
	x = (b-a)/(n-1)
	do i=1, n
	  vet(i) = a + (i-1)*x
	enddo
	do i=1,n
	  do j=1,n
	    k(i,j)=vet(i)**(j-1)
	  enddo
	enddo
	write(*,*)'La matrice di Vandermonde:'
	DO i=1, n
	   WRITE (*,*) (k(i,j), j=1, n)
	ENDDO	
	END

c MATRICE WILKINSON
	SUBROUTINE wilkinson (w, n)
	integer n,i,j
	REAL w(n,n)
	DO i=1, n
	  DO j=1, n
	    IF (i .eq. j) THEN
	       w(i,j) = 1
		ELSE IF (i .gt. j) THEN
		   w(i,j) = (-1)**(j-i+1)
		ELSE IF ((i .lt. j) .and. (j .eq. n)) THEN
		   w(i,j) = (-1)**i
		ELSE
		   w(i,j) = 0
		ENDIF
	  ENDDO
	ENDDO
	WRITE (*,*) 'La matrice di Wilkinson:'
	DO i=1, n
	  WRITE (*,*) (w(i,j), j=1, n)
	ENDDO	
	END
 

Eseguendo il nostro programma, possiamo vedere che l’ indice di condizionamento, rispetto alla norma 1, è molto alto per la matrice di Hilbert. Sono stati restituiti degli alti valori anche per quelli della matrice di Henkel. E’ bene notare che se la Toepliz diagonale dominante e la Toepliz non diagonale dominante hanno gli stessi valori, la Toepliz non diagonale dominante presenta un indice di condizionamento peggiore di quella diagonale dominante. Possiamo affermare, infine, che la matrice di Toepliz diagonale dominante, insieme a quella di Wilkinson sono due esempi di matrici ben condizionate.

La mia prima applicazione scritta in Object-C e Cocoa: Circumference Calc

Probabilmente non l’ho ancora detto su Codeido, ma mi ritengo abbastanza esperto di programmazione in C (diciamo che ho una conoscenza e padronanza di 9/10 del linguaggio). Ho deciso così di buttarmi nell’apprendimento di un nuovo linguaggio, l’Objective-C, creato da Brad Cox alla metà degli anni ottanta presso la Stepstone Corporation. Adesso è il linguaggio di programmazione per eccellenza utilizzato nello sviluppo di applicazioni per Mac, iPhone e iPad e scelto da Apple. Inoltre, oltre all’apprendimento di questo linguaggio, in contemporanea mi cimenterò nell’uso del framework Cocoa sviluppato nei pressi di Cupertino. Penso che nessuno sviluppatore abbia mai documentato la sua “carriera” nell’apprendimento di un linguaggio (avanzato) come l’Object-C, che alla fine dei conti, è un miglioramento del C con l’aggiunta della programmazione OOP (Object Oriented Programming). Siccome il mio sogno personale è diventare a tutti gli effetti un esperto di questo linguaggio e successivamente distribuire qualche software, la prima cosa che si fa solitamente è iniziare con il solito “Hello World”. Non è stato questo il caso. Il libro a cui mi sono affidato per iniziare i miei studi è “Sviluppare applicazioni con Objective-C e Cocoa“, scritto da Tim Isted e recentemente tradotto in italiano, che mi è sembrato bene acquistare per via del suo approccio iniziale: non la solita pappardella sulla storia dell’informatica o un excursus base (fondamentale) del linguaggio C, ma un’approccio più pratico su questo nuovo linguaggio. Il primo capitolo? Si intitola “La prima applicazione” ed è quello che farete realmente, perché non si inizia da subito a sviluppare via codice, ma solo utilizzando Interface Builder (quindi tramite interfaccia grafica se così vogliamo chiamare questo approccio). Infine verrete addentrati sempre più nei meandri della programmazione Object-C. Mi è stato molto utile per capire la programmazione orientata agli oggetti, di cui non avevo pressoché nessuna infarinatura, e che nel momento in cui scrivo, non mi è stata ancora spiegata all’Università. Non ho ancora terminato il libro (sono ancora al 6° capitolo perché trovo fondamentale leggere, e nel frattempo provare con le proprie mani a strimpellare qualcosa sulla tastiera: è anche l’approccio consigliato dal libro), quindi ci saranno sicuramente altri articoli di questo genere sul sito (anzi, questo finirà sul blog) per farvi vedere come proseguono i miei studi del linguaggio.

Per il momento, vi “inciucio” la mia prima applicazione funzionante che ho riscritto ben 5 volte prima di non trovare errori. E’ veramente una stupidaggine (ed è proposta sul libro con tanto di spiegazione), ma la soddisfazione è tanta: è infatti il primo programma in assoluto che realizzo con un’interfaccia grafica perfettamente funzionale. Quindi, se la matematica NON è il vostro forte, forse potrebbe servivi il calcolo della circonferenza di un cerchio. 🙂 Apparte gli scherzi, eccola, funzionante (almeno sul mio MacBook Pro) e senza nessun apparente problema. Provatela e ditemi se inserendo il raggio tutto funziona come ci si aspetta. A proposito, evitate i commenti diffamatori, abbiate pietà di me 😀 uno studente va incoraggiato a fare sempre meglio, e prometto solennemente di impegnarmi al massimo. Ho tanti progetti in mente, e spero di poterli mostrare al grande pubblico il più presto possibile.

DOWNLOAD CircumCalc 0.1

Qualcosa in più sull’autore di questo sito…

Probabilmente chi non mi conosce vorrebbe sapere qualcosa di più su di me. Vi propongo quindi questa intervista di ItaliansInFuga, propostami da Aldo Mencaraglia, fondatore del sito stesso.

Paolo Musolino cura il sito Apple Tribù, dedicato a tutto ciò che è ‘mela morsicata’. Il suo è un caso tipico di giovane italiano che sogna l’estero. Perché? Ecco la sua storia.

– Ci racconti cosa fai di lavoro?
Per il momento sono uno studente. Precisamente, studio Informatica all’Università di Messina. E’ il mio “unico” lavoro, ma sicuramente è il processo che mi darà il passaporto per iniziare a lavorare fin da subito negli USA…

Continua su Italians in Fuga

[retweet]

Hello World! /* nasce Codeido.com */

<<Benvenuto Mondo>>. E’ il testo con cui si inizia a studiare ogni linguaggio di programmazione, la frase che viene fatta trascrivere a chiunque inizi una nuova avventura. E quindi.. ecco il mio “Hello World”, un nuovo blog dopo l’avventura di Apple Tribù, nel quale poter inserire i miei progetti, le mie idee, tutto ciò che mi rapporta con il mondo della programmazione e il lavoro. In questo sito web troverete informazioni personali su di me, lavori/test sulla programmazione, nonché una vetrina dove poter distribuire il software che realizzo, software principalmente dedicato al mondo Mac OS X, iPhone e iPad. Il sito nasce da una necessità di fondare una Software House, avventura per la quale sto cercando di dedicare gran parte del mio tempo. Sarà inoltre un “Garbage Collector”, un posto dove poter postare prove e test durante il mio viaggio, che spero si “concluda” molto presto con il fondare la mia software house (denominata Codeido appunto). Non so ancora come andrà a finire (anche se sono molto fiducioso), ma da qualche punto si deve pur iniziare, e in questi anni ho compreso che fare il primo passo è fondamentale.

Il sito è quasi pronto, manca forse qualcosina, roba di poco conto, ma dopotutto è online, ed è questo l’importante. Non mi prediligo una cadenza giornaliera nella pubblicazione di articoli (anzi, per certi versi durante lunghi progetti potrebbero passare anche settimane senza alcun post), ma i risultati sono quelli che contano!
>>Quindi ti ringrazio, e continua a seguirmi, qui sul sito e tramite il feed RSS, oltre che sui vari Social Network.

..Thanks All..

[retweet]