Analisi di Shovel Knight

Shovel Knight

Mauro Fanelli (vi invito ad andare a vedere il sito del suo studio Mixed Bag, se non lo conoscete ancora) ha condiviso in un tweet un articolo di David D’Angelo, uno degli autori di Shovel Knight.
In questo articolo D’Angelo racconta come è andato il primo mese di vendite del suo gioco. Di fatto è un’analisi interessante per capire quali sono i costi stimati per lo sviluppo di un videogame da parte di un piccolo studio e quali sono stati gli effettivi ricavi e dove stanno i punti deboli. L’ho trovato interessante soprattutto per avere un termine di paragone quando i clienti chiedono la quotazione per un videogame senza sapere, nello specifico, a cosa vanno incontro.

Alcuni fatti:

  • Shovel Knight è un gioco sviluppato per Wii U e 3DS (solo negli Stati Uniti) e per PC in tutto il resto del mondo.
  • Sia per le piattaforme Nintendo sia per PC è stato scelto di distribuire il gioco solo in formato digitale (niente scatola in negozio). Nel caso del PC, la piattaforma di distribuzione è quella di Steam.
  • Il gioco è stato inizialmente finanziato tramite una campagna su Kickstarter (e donazioni tramite PayPal).
  • Il team è composto da 6 persone

Il risultato dello sviluppo del gioco lo potete vedere direttamente dal sito degli sviluppatori, dove trovate il press kit completo.

L’idea iniziale del team era di sviluppare l’intero videogame, comprensivo di tutte le extended feature promesse durante la campagna su Kickstarter, nel giro di 24 mesi. Alla scadenza della campagna, il totale delle donazioni era di circa 328k$, che corrisponde all’incirca a 245k€. Da questa somma vanno tolte le percentuali che trattengono Kickstarter e PayPal. Facendo finta che il finanziamento sia tutto su Kickstarter, vorrebbe dire eliminare il 5% che è quello che tengono loro ed un altro 5% che è quello che trattiene Amazon. Di fatto si arriverebbe attorno ai 220k€ effettivamente utilizzabili.

Il costo previsto per lo sviluppo era di 10k$ al mese per ogni membro del team. Di fatto vuol dire 1.440M$, quindi 1.076M€. Una bella cifra che comprende anche tutti i costi vivi della società, per cui oltre agli stipendi ci sono di mezzo tasse, bollette, tenute contabili, hardware, affitto, ecc…
Comparata a quanto hanno raccolto su Kickstarter è una cifra esorbitante, però è abbastanza realistica considerando che il costo medio di uno sviluppatore di videogame, almeno negli Stati Uniti, viaggia effettivamente attorno ai 120k$ l’anno.

Il piano finale è quindi variato in questo modo: uno dei 6 membri del team ha deciso di prendere la sua parte solo al termine dello sviluppo (il membro che si è occupato di musica e di effetti sonori). Gli altri 5 hanno optato per prendere la metà di quanto deciso inizialmente, quindi 5k$ al mese. In più, tutte le caratteristiche extra del gioco sarebbero slittate al secondo anno, in modo di poter recuperare dei fondi dopo la messa in vendita della prima versione del gioco.
Il conto diventa quindi 12 mesi x 5 persone x 5k$, ovvero 300k$ che corrispondono a 225k€, una cifra già più vicina a quella incassata su Kickstarter.

Quello che è poi successo nella realtà è che anzichè impiegare 12 mesi, ne hanno impiegati 17, di cui 5 senza pagarsi uno stipendio. Il gioco è comunque uscito ed è in vendita al costo di 14,99$ e ne hanno vendute 180k copie nel giro del primo mese. Da queste vanno tolte le circa 15k promesse ai finanziatori su Kickstarter. Facendo due conti, l’incasso per le copie vendute è attorno ai 2.475M$. A questi vanno tolte le fette di Nintendo e di Steam di cui non conosco i dettagli. Ho letto in giro per la rete che su Steam di solito si aggira attorno al 30%, mentre per Nintendo non ne ho proprio idea. Ma da quel che ho potuto capire, è una percentuale che viene decisa insieme allo sviluppatore caso per caso.
Ipotizzando che in media, tra Steam e Nintendo, rimanga anche solo il 50% di quella cifra, sono comunque 925k€ che, sommati ai 245k€ iniziali portano il conto a 1.170M€ che è poco più che superiore rispetto alla cifra ipotizzata inizialmente per l’intero sviluppo nell’arco dei due anni. Di conseguenza, dopo solo un mese di vendite, tutto quello che è venduto in più è puro guadagno per questo prodotto, ammesso che invece di 24 mesi non arrivino a 24+5+X dove X non si sa quanto possa essere.

Per me, a parte le valutazioni del fatto che sia stato un investimento che ha portato profitto o meno, quello che è interessante è la valutazione dell’effort necessario per un gioco senza troppe pretese. Nel mio caso, tendenzialmente si tratta di un team di tre persone, un programmatore un game designer ed un artista. Prendendo le stesse cifre di cui sopra, per un progetto di 12 mesi, vorrebbe dire un investimento di 10k$ x 12 x 3 = 360k$ = 269k€. Per un progetto molto contenuto, diciamo di tre mesi, 90k€.

L’altra cosa interessante è rapportare le cifre stimate per le risorse Statunitensi con quelle Italiane. 10k$ = 7,4k€. Calcolando che, in genere, il costo medio aziendale per una risorsa è del 47% (prendo come riferimento uno studio di Assolombarda relativo al 2011), vuol dire che al netto vanno 3.9k€ alla risorsa che, tutto sommato, è una cifra che può essere credibile per un senior.

Sarei curioso di sentire cosa ne pensano anche altre persone. I commenti cono ben accetti!

Condividi:Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedInPin on PinterestShare on RedditPrint this pageEmail this to someone

Jenkins: come aggiornare in automatico i Google Play Services

Jenkins

A volte capita che un progetto abbia come dipendenze i Google Play Services o altre librerie che fanno parte del Google Repository.

In questo caso, Jenkins non si accorge delle dipendenze e dà un errore sulla falsariga di questo:

> Could not find com.google.android.gms:play-services:4.3.23.

La soluzione più semplice è di aggiungere negli script il seguente comando:

android update sdk --no-ui --all --filter "extra-google-m2repository"
Condividi:Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedInPin on PinterestShare on RedditPrint this pageEmail this to someone

Istanza EC2 Windows che non riparte dopo un riavvio

AWS

Non è la prima volta che in Altralogica sperimentiamo problemi con le istanze di EC2. Qualche anno fa c’era stato un disservizio piuttosto pesante nel data center Irlandese mentre ieri, nostro malgrado, ci siamo imbattuti in un altro problema piuttosto pesante.

Di fatto, di recente, Amazon ha cominciato ad aggiornare il proprio parco macchine host su cui girano le virtual machine di EC2. Il che è un bene perché l’hardware nuovo è più veloce. Peccato, però, che non abbiano avvisato nessuno che le istanze Windows un po’ vecchiotte (per intenderci qualsiasi cosa precedente a Windows Server 2012, non parliamo di sistemi arcaici) non hanno i driver di rete per i nuovi host.

Questo cosa significa? Che se, per caso, quando riavviamo un’istanza, questa viene fatta partire su un host nuovo, la nostra virtual machine non andrà!

E’ incomprensibile come un colosso come Amazon non avvisi i propri clienti in queste situazioni. Ad ogni modo, dopo una concitata sessione al telefono con il loro staff tecnico, siamo riusciti a venirne a capo.

Riporto qui sotto la soluzione per chi, come me, dovesse incappare in questo problema di punto in bianco e non sappia da che parte guardare per trovare aiuto.

  • Scaricare l’ultima versione di EC2Config da qui: http://aws.amazon.com/developertools/5562082477397515
  • Scaricare i driver aggiornati della scheda di rete Citrix (contiene anche lo script per eliminare i vecchi driver RedHat): http://aws.amazon.com/developertools/2187524384750206
  • Stoppare l’istanza che non parte più.
  • Fare un detach del volume root della macchina.
  • Lanciare un’istanza (anche t1.micro o m1.small, non importa) di Windows 2003 su cui andrà montato il disco di root che non parte. E’ importante che sia un’istanza di 2003 perché così non fa casino con il disco di boot. Per trovarla, basta cercare Windows_Server-2003-R2_SP2 nelle community AMI.
  • Fare un attach del volume di root alla nuova istanza.
  • Collegarsi alla macchina Windows 2003. Il disco dovrebbe già essere visibile. Se non lo fosse, basta usare il Disk Manager per metterlo online ed assegnargli una lettera di unità.
  • Scaricare i due pacchetti di cui sopra su questa macchina e copiarli in una cartella citrix sul disco della macchina che non parte. (ad es. E:\citrix). Mettete pure tutti i file insieme, tanto non c’è nulla con lo stesso nome.
  • Date permessi full control all’utente everyone per quella cartella, giusto a scanso di equivoci
  • Lanciate regedit
  • Aprite il ramo HKEY_LOCAL_MACHINE
  • Dal menù file selezionare Load Hive…
  • Selezionate il file SOFTWARE dalla cartella E:\Windows\System32\config (ricordate che E: è il percorso assegnato nel mio caso, nel vostro potrebbe essere differente)
  • Chiamate questo hive 00Software
  • Navigate in HKEY_LOCAL_MACHINE\00Software\Microsoft\Windows\CurrentVersion\RunOnce
  • Create una nuova chiave di tipo stringa e chiamatela 01EC2Config e come valore mettete c:\citrix\ec2install -q
  • Create una nuova chiave di tipo stringa e chiamatela 02RHPurge e come valore mettete C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -file C:\citrix\Purge.ps1
  • Create una nuova chiave di tipo stringa e chiamatela 03Citrix e come valore mettete C:\citrix\Citrix_Xensetup.exe /S
  • A questo punto navigate in HKEY_LOCAL_MACHINE\00Software\Microsoft\WindowsNT\CurrentVersion\Winlogon
  • Create una nuova chiave di tipo stringa e chiamatela  AutoAdminLogon e come valore mettete 1
  • Create una nuova chiave di tipo stringa e chiamatela DefaultUsername e come valore mettete Administrator
  • Create una nuova chiave di tipo stringa  e chiamatela DefaultPassword e come valore mettete la vostra password di Administrator (va messa in chiaro)
  • A questo punto tornate su 00Software e andate su File -> Unload Hive..
  • Chiudete regedit e fate il logoff dalla macchina Windows 2003.
  • A questo punto, dalla console di EC2, fate un detach del disco dalla macchina Windows 2003 e fate un attach sulla vostra vecchia macchina che non parte più, mettendo come nome del device /dev/sda1
  • Riavviate la vostra vecchia istanza e lasciatela andare per qualche minuto. Si dovrà riavviare un paio di volte (di solito è automatico) togliere i vecchi driver di rete, installare quelli nuovi ed aggiornare EC2Config. Una volta finito sarà di nuovo online.
  • Buona fortuna!
Condividi:Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedInPin on PinterestShare on RedditPrint this pageEmail this to someone

Caricamento di file con dimensioni maggiori di 30Mb con ASP.NET 4

Visto che me lo dimentico sempre, lo appunto qui. Da IIS7 in poi c’è un limite di 30Mb sui file che possono essere inviati in POST ed un timeout di 2 minuti sulla richiesta. Una volta bastava modificare l’httpRuntime. Adesso bisogna anche mettere mano alla sezione security di system.webServer

I post originali sono questi:

http://blog.twinharbor.com/2011/07/28/fixing-iis7-maximum-upload-size/
http://www.cyprich.com/2008/06/19/fixing-file-upload-size-limit-in-iis-7/

E qui c’è cosa fare, giusto per averlo a portata di mano:

In system.web:

<httpruntime executionTimeout="100000"
  maxRequestLength="2000000" />

In system.webServer:

<security>
 <requestfiltering>
  <requestlimits maxAllowedContentLength="2000000000" />
 </requestfiltering>
</security>
Condividi:Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedInPin on PinterestShare on RedditPrint this pageEmail this to someone

Quanto costa sviluppare un’app iOS?

eurodollaro

Diversi mesi fa ero incappato in una discussione su StackOverflow riguardante il costo per lo sviluppo di un’applicazione iOS tipo Twitterific.

Volevo scrivere qualcosa a riguardo prendendo come riferimento il mercato italiano, ma me ne sono dimenticato.. tanto per cambiare. Nel frattempo è passato altro tempo e finalmente mi sono deciso.

La discussione verteva principalmente sul capire quanto potesse costare un’applicazione iOS simile a Twitterific (la domanda è stata posta nel 2008 ed i prezzi sono sicuramente cambiati, vista la crisi mondiale, anche se alcune risposte abbastanza recenti danno un’idea del costo del lavoro attuale o quasi negli Stati Uniti).

Uno dei programmatori di Twitterific, nel 2010, ha aggiunto il suo commento alla domanda portando come esempio il porting dell’app da iPhone ad iPad. Nel loro caso si trattava di portare l’app in 60 giorni. A conti fatti, prendendo come riferimento 6 giorni lavorativi alla settimana, per 10 ore al giorno, con due risorse dedicate, si arriva a 1.100 ore. Calcolando che la loro tariffa media per i clienti è di 150$/ora, si arriva ad una stima di 165.000$, a cui va aggiunto il costo di ciò che era già stato sviluppato e che è stimato in circa 35.000$. Si arriva ad un totale di 200.000$, senza tenere conto del design e del project management. Con quelli si arriva tranquillamente a circa 300.000$.

Questo stesso personaggio, porta come esempio anche il fatto che Instagram si sia fatto finanziare 500.000$ da un venture capitalist per rifare frontend e backend.
Altri sviluppatori hanno commentato rimanendo sempre nel range dei 150$/ora uomo. Ora non so dire se negli Stati Uniti ci siano pochi programmatori iOS, poche società che sviluppano per iOS, un mercato talmente grande che giustifica certe cifre o che altro, ma confrontate con quelle che sono le tariffe medie italiane, sono dei numeri esageratamente importanti.

Parlando con altri sviluppatori, sono arrivato alla cifra di 50€/ora come tariffa media per lo sviluppo puro. Che, diciamocelo, di questi tempi è anche un buon prendere. Ritornando al calcolo relativo a Twitterific, se l’avessimo fatto in Italia, il risultato sarebbe di 1.100 ore x 50€/ora = 55.000€ di solo sviluppo dell’aggiornamento per iPad. Sempre senza includere project management e design.

La realtà è, a mio avviso, che in Italia nessuno avrebbe investito una cifra del genere solo per portare un’app da iPhone ad iPad. La realtà è che, se si chiede 1/5 di quella cifra, si è ancora ancora concorrenziali.. e deve includere anche design e project management, altrimenti si è completamente fuori target.

Mi piacerebbe sentire l’opinione anche di altri sviluppatori che si muovono nell’ambito delle app mobile qui in Italia, per capire se siamo anche noi coinvolti dal momento di crisi che prima o poi passerà, o se c’è qualcosa di male nel sistema del mercato dello sviluppo, soprattutto tenendo conto che spesso e volentieri dobbiamo scontrarci con i lavoratori dell’est Europa che hanno prezzi estremamente concorrenziali ma che, allo stesso tempo, sono difficili da gestire, fanno perdere un sacco di tempo per spiegare che cosa si vuole e, in gran parte dei casi, il prodotto finale non è nemmeno lontanamente all’altezza di ciò che si voleva.

Contattatemi, anche in privato se preferite, per approfondire l’argomento.

 

Condividi:Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedInPin on PinterestShare on RedditPrint this pageEmail this to someone

iTablo Dekstop Designer 2 BETA

L’evoluzione di iTablo Desktop Designer è entrata in fase di BETA testing.

iTablo Desktop Designer è il tool che permette a chiunque di creare documenti interattivi multimediali fruibili su iPad ed iPhone, partendo da un qualsiasi documento PDF.

La versione 2 di questo tool è basata sul framework di Eclipse e sfrutta tutte le ottimizzazioni derivanti da SWT, oltre ad avere un’interfaccia più moderna e tutta una serie di funzionalità nuove che mancavano nella versione precedente.

Per l’occasione ho realizzato un paio di video (niente di professionale) per mostrare cosa si può fare con iTablo e tutta la suite di prodotti e servizi che compongono questa soluzione.

iTablo PDF+ Viewer per iOS
YouTube Preview Image

iTablo Desktop Designer 2 per OS X (e Windows)
YouTube Preview Image

Condividi:Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedInPin on PinterestShare on RedditPrint this pageEmail this to someone

iTablo per iPhone

iTablo per iPhone

iTablo è ora disponibile anche in versione per iPhone (e, chiaramente, come Universal Binary per iPhone/iPad).

Vista la richiesta di una versione anche per il terminale più diffuso di casa Apple, abbiamo sviluppato una versione del nostro lettore di PDF con contenuti multimediali anche per iPhone. Le caratteristiche sono le stesse della versione iPad, con una grafica diversa e più adatta alle dimensioni ridotte del display.

In più, non volendo farci mancare nulla, abbiamo anche aggiunto il supporto per il Newsstand Kit. E’ ora possibile far apparire la propria app nel Newsstand ed inviare aggiornamenti automatici agli utenti che l’hanno scaricata.

A breve andrà online anche la nuova versione del nostro iTablo PDF+ Viewer che è la versione gratuita del nostro lettore.

Condividi:Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedInPin on PinterestShare on RedditPrint this pageEmail this to someone

Gestione rotazione dei device iOS

dab4c_xcode

Ultimamente mi sono dovuto scontrare, per l’ennesima volta, nel delirio del cambio di orientamento dei device iOS. Per quanto in Apple si siano dati da fare per semplificare la vita agli sviluppatori, questo tema è ancora un buco nero. Ci sono diversi sistemi per gestire il cambio di orientamento, di cui uno
Chiaramente, il mio obiettivo è di scrivere meno codice possibile, utilizzare Interface Builder per permettere ai designer di modificare la geometria delle interfacce senza dover intervenire sul codice, ridurre al minimo i calcoli delle posizioni degli elementi all’interno dei controller.ufficiale e presentato da Apple come esempio sul sito developer. Il problema è che, per quanto sia ufficiale, non soddisfa le mie esigenze. Oltre alla rotazione, ho anche il problema di dover presentare interfacce diverse a seconda dell’orientamento e del device (iPhone o iPad).

Alla fine ho optato per un sistema con un UIViewController di base da cui derivano i vari controller portrait e landscape. I controller sono tutti agganciati ad un UINavigationController che si prende cura di mandare i messaggi di willRotate e didRotate ai vari controller collegati senza che dobbiamo gestirceli noi a mano.

Il controller di base contiene anche tutti gli outlet che vengono collegati in IB agli oggetti disegnati nell’interfaccia, così possiamo tenere il codice di gestione di azioni e interazione con gli oggetti al minimo.
Per chi volesse vedere come funziona questo sistema, ho aperto un repository su GitHub chiamato RotationExample

 

 

 

 

 

Condividi:Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedInPin on PinterestShare on RedditPrint this pageEmail this to someone

WSUS EventId 364

Ancora una volta mi sono imbattuto in un fastidioso bug del WSUS di Microsoft. Su un server 2008 ho installato WSUS 3.2 e da qualche tempo ha deciso di non scaricare più gli aggiornamenti segnalando un evento 364 nel log di sistema. Un po’ di ricerche qua e là e scopro di non essere l’unico e, soprattutto, che il messaggio di errore riportato è fuorviante. Il problema non sta nel fatto che il server non supporta la direttiva http-range.

Il problema può essere duplice: o WSUS non riesce a scrivere nella cartella dei download perché l’utente con cui gira non ha i permessi necessari, oppure si è incasinato il BITS e bisogna forzare il download in foreground. Il mio caso è il secondo. Sinceramente non ho ben capito cosa cambi a livello di meccaniche interne di WSUS tra download in foreground e download in background. Fatto sta che sembra sia l’unico modo per risolvere questo problema attualmente.

Alla fine è bastato eseguire questo comando dalla shell:

"%programfiles%\Update Services\Setup\ExecuteSQL.exe" -S %Computername%\MICROSOFT##SSEE -d "SUSDB" -Q "update tbConfigurationC set BitsDownloadPriorityForeground=1"
Condividi:Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedInPin on PinterestShare on RedditPrint this pageEmail this to someone

iTablo presente a Pad Connects

padconnects

Giovedì 13 Ottobre 2011, al Palazzo delle stelline di Milano si terrà la conferenza PAD Connects, una giornata per capire, approfondire, conoscere ciò che serve per portare un magazine dal cartaceo al tablet.

Anche noi di Altralogica saremo presenti con la nostra soluzione iTablo; parleremo ai partecipanti al percorso 1, quello dedicato agli imprenditori/decisori e mostreremo con quale velocità e facilità è possibile portare una qualsiasi pubblicazione da PDF ad iPad, con tanto di elementi multimediali inclusi.

Penso che la forza della nostra soluzione risieda nella facilità d’uso e nella velocità con cui si riesce ad arricchire un semplice documento PDF. In pochi secondi si aggiungono video, widget HTML5, gallerie d’immagini e qualsiasi altro elemento multimediale ci possa venire in mente. Un paio di click ed abbiamo il pacchetto che possiamo caricare direttamente su iPad tramite iTunes per aprirlo con iTablo PDF+ e toccarne il risultato con mano. Quando avrò l’ok dagli amici di Graphiland, che sono nostri partner e distributori e che hanno organizzato una serie di incontri per spiegare la nostra soluzione, pubblicherò il filmato di una delle mie dimostrazioni pratiche.

La cosa divertente è che in pochi minuti riesco a far vedere su iPad il magazine completamente montato e pronto per essere fruito dai lettori finali. Vi assicuro che rimangono sempre tutti stupiti da quanto sia semplice e produttivo. Chi ha avuto modo di utilizzare la suite Digital Publishing di Adobe sa quanto sia oneroso, in termini di risorse umane e di tempo, reimpaginare un magazine appositamente per iPad. Con iTablo, invece, si prende il PDF del cartaceo e lo si trasforma in un attimo, senza l’intervento di programmatori o grafici specializzati nella produzione di contenuti per tablet. Invito tutti quanti ad approfondire l’argomento chiedendo direttamente a me o contattando Graphiland o anche solo visitando il sito di iTablo.

Per ora è tutto, spero di incontrare qualcuno di voi ai seminari di Graphiland o direttamente a Pad Connects :)

 

Condividi:Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedInPin on PinterestShare on RedditPrint this pageEmail this to someone