Una sorpresa natalizia per le Appengine che potrebbe essere un punto di partenza molto promettente per lo sviluppo di applicazioni sulla "Nuvola di Google".
Zoho ha messo a disposizione una funzionalità sul suo Creator che permette di esportare le sue applicazioni su appspot di Google.
Devo ammettere che questa cosa mi entusiasma moltissimo.
Le prospettive sono davvero ricche.
Ora c'è di fatto uno strumento che permette di creare form e tabelle per le Appengine senza dover scrivere direttametne il codice ma di fatto in modalità visual, anche se in questa fase c'è ancora qualche limitazione.
In sintesi vado su creator.zoho.com mi costruisco la mia applicazione, la scarico in locale con la funzione "Deploy in Google Appengine" e me la ritrovo sul PC tradotta in Python, pronta per essere distribuita su Appspot.com.
Semplicemente fantastico.
venerdì 26 dicembre 2008
venerdì 7 novembre 2008
mercoledì 5 novembre 2008
Python su IIS 7
martedì 4 novembre 2008
SQL 2008 superfice di attacco
Per a
Per accedere da una macchina esterna ai servizi di SQLExpress2005 bisognava andare nelle funzionalità di configurazione della "Superficie d'attacco".
Su SQLExpress2008 invece è sufficiente basta avviare il servizio "SQL Server Browser" dal Configuration Manager, come nell'immagine.
(Ci ho messo un'ora a capirlo)
Per accedere da una macchina esterna ai servizi di SQLExpress2005 bisognava andare nelle funzionalità di configurazione della "Superficie d'attacco".
Su SQLExpress2008 invece è sufficiente basta avviare il servizio "SQL Server Browser" dal Configuration Manager, come nell'immagine.
(Ci ho messo un'ora a capirlo)
venerdì 24 ottobre 2008
App Engine la roadmap
Google ha dichiarato le intenzioni dei rilasci di nuove funzioni su App Engine per i prossimi mesi:
Qui per saperne di più.
10/08 - 3/09
- Service for storing and serving large files
- Datastore import and export utility for large datasets
- Billing: developers can pay for more resource usage
- Support for a new runtime language
- Uptime monitoring site
Qui per saperne di più.
sabato 11 ottobre 2008
Memcache di Appengine
Il servizio MemCache propone una semplice ma utile modalità per salvare informazioni applicative in forma provvisoria, definendo anche per quanto tempo il dato deve rimanere visibile.
Un esempio banale :
mc = 'informazione'
memcache.set(key="chiaveuno", value= mc, time=20)
#la chiaveuno è adesso impostata con il valore 'informazione'
para2 = memcache.get('chiave')
# questo per recuperare il valore che naturalmente sarà visibile da tutti gli utenti dell'applicazione (per 20 secondi dall'impostazione)
Un esempio banale :
mc = 'informazione'
memcache.set(key="chiaveuno", value= mc, time=20)
#la chiaveuno è adesso impostata con il valore 'informazione'
para2 = memcache.get('chiave')
# questo per recuperare il valore che naturalmente sarà visibile da tutti gli utenti dell'applicazione (per 20 secondi dall'impostazione)
martedì 30 settembre 2008
Appengine SDK 1.1.4
E' uscita la 1.1.4 ed ha corretto qualche buco della precedente rel. (incluso quello sotto segnalato).
giovedì 18 settembre 2008
Appengine SDK 1.1.3
E' stata rilasciata la rel 1.1.3 qui per approfondimenti.
Qui per il download.
Qui per il download.
Credo forse di aver trovato un piccolo bug.
Ho riscontrato un problema sulla console-admin (http://localhost:8080/_ah/admin/datastore) del Web Server in una applicazione che accede al datastore locale.
La stessa applicazione su appspot.com funziona.
In sintesi sembra che un campo float produca un errore:
\google\appengine\api\datastore_file_stub.py", line 626, in _Dynamic_GetSchema
value_pb.set_doublevalue(float('-inf'))
ValueError: invalid literal for float(): -inf
Rimettendo sotto la cartella \google\appengine\ tutti i files della versione 1.1.2 il problema si risolve.
La stessa applicazione su appspot.com funziona.
In sintesi sembra che un campo float produca un errore:
\google\appengine\api\datastore_file_stub.py", line 626, in _Dynamic_GetSchema
value_pb.set_doublevalue(float('-inf'))
ValueError: invalid literal for float(): -inf
Rimettendo sotto la cartella \google\appengine\ tutti i files della versione 1.1.2 il problema si risolve.
giovedì 11 settembre 2008
Sta arrivando F#
Il nuovo linguaggio di programmazione di Microsoft si chiama F#.
A mio parere il riferimento non è casuale, Python crea qualche preoccupazione nei concorrenti.
Arriverà ufficialmente il prossimo anno.
Per ora c'è già qualche interessante anteprima qui : Microsoft F#.
Al 2° punto delle ragioni che spiegano il perché Microsoft abbia deciso di creare un nuovo linguaggio oltre a quelli che già supporta è scritto :
- interactive scripting like Python and other languages
A mio parere il riferimento non è casuale, Python crea qualche preoccupazione nei concorrenti.
martedì 2 settembre 2008
Classi - esempi
Usare le classi, un esempio elementare.
All'interno dello stesso file:
class pp():
i =444
def agg(self,x):
x1 = x+10
self.i = x1
class main(): #dalla classe main richiamo le funzioni definite nella classe creata sopra
p1= pp()
print p1.i
p1.agg(3)
print p1.i
All'interno dello stesso file:
class pp():
i =444
def agg(self,x):
x1 = x+10
self.i = x1
class main(): #dalla classe main richiamo le funzioni definite nella classe creata sopra
p1= pp()
print p1.i
p1.agg(3)
print p1.i
lunedì 1 settembre 2008
GQL - Le chiavi sui record
Se tabelladati è una entity (una tabella DB ),
per leggere l'ID che viene inserito automaticamente su ogni record si può utilizzare :
tabelladati.key().id()
esempi per stampare gli ID di tutti i record:
for recordx in tabelladati:
print recordx.key().id()
oppure per stampare l'ID del primo [0] record e del secondo
rcc= tabelladati[0]
print rcc.key().id()
rcc= tabelladati[1]
print rcc.key().id()
Per selezionare il record che ha ID es. 223
codid= 223
record_estratto = tabelladati.get_by_id(int(codid))
print record_estratto.nome #stamperà il campo nome del record con ID 223
per leggere l'ID che viene inserito automaticamente su ogni record si può utilizzare :
tabelladati.key().id()
esempi per stampare gli ID di tutti i record:
for recordx in tabelladati:
print recordx.key().id()
oppure per stampare l'ID del primo [0] record e del secondo
rcc= tabelladati[0]
print rcc.key().id()
rcc= tabelladati[1]
print rcc.key().id()
Per selezionare il record che ha ID es. 223
codid= 223
record_estratto = tabelladati.get_by_id(int(codid))
print record_estratto.nome #stamperà il campo nome del record con ID 223
Etichette:
chiavi,
google app,
python
Chiamare le classi - Esempio banale
- nel file crearandom.py creo la classe Test()
- import random
- number = random.randint(1,100)
- class Test():
- xx= number
- nel file stampa.py richiamo la classe Test del file sopra
- import random, crearandom
- print crearandom.Test.xx
lunedì 25 agosto 2008
giovedì 21 agosto 2008
sabato 26 luglio 2008
Appengine update
E' stata rilasciata la versione 1.1.1 del SDK di Appengine.
E da ieri le applicazioni che ogni utente può creare sono passate da 3 a 10.
E da ieri le applicazioni che ogni utente può creare sono passate da 3 a 10.
mercoledì 16 luglio 2008
Creare un banale Web Service con vb.net
Da Visual Web Developer aggiungere un nuovo elemento di tipo Servizio Web.
Un esempio elementare di codice per rendere disponibile tramite web services una stringa di testo è questo:
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
'<'webservice(namespace:="http://indirizzodelserver/")> _
'<'webservicebinding(conformsto:=wsiprofiles.basicprofile1_1)> _
'<'global.microsoft.visualbasic.compilerservices.designergenerated()> _
Public Class servizioweb
Inherits System.Web.Services.WebService
'<'webmethod()> _
Public Function testoweb() As String
Return "Ciao WEB"
End Function
End Class
Pubblicando su di un sito IIS il file .asmx di cui sopra si renderà disponibile la stringa testoweb.
Per richiamarla, ad esempio tramite una applicazione Visual Basic, da un altro server è sufficiente inserire nel programma un riferimento al servizio come nell'immagine qui sotto digitando http://indirizzoserver/nomedelwebservice.asmx
E poi la si può utilizzare ad esempio così:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim MyService2 As shw.hwSoapClient = New shw.hwSoapClient
Dim servizioweb As servizioweb.serviziowebSoapClient = New servizioweb.serviziowebSoapClient
TextBox2.Text = servizioweb.testoweb
End Sub
Un esempio elementare di codice per rendere disponibile tramite web services una stringa di testo è questo:
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
'<'webservice(namespace:="http://indirizzodelserver/")> _
'<'webservicebinding(conformsto:=wsiprofiles.basicprofile1_1)> _
'<'global.microsoft.visualbasic.compilerservices.designergenerated()> _
Public Class servizioweb
Inherits System.Web.Services.WebService
'<'webmethod()> _
Public Function testoweb() As String
Return "Ciao WEB"
End Function
End Class
Pubblicando su di un sito IIS il file .asmx di cui sopra si renderà disponibile la stringa testoweb.
Per richiamarla, ad esempio tramite una applicazione Visual Basic, da un altro server è sufficiente inserire nel programma un riferimento al servizio come nell'immagine qui sotto digitando http://indirizzoserver/nomedelwebservice.asmx
E poi la si può utilizzare ad esempio così:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim MyService2 As shw.hwSoapClient = New shw.hwSoapClient
Dim servizioweb As servizioweb.serviziowebSoapClient = New servizioweb.serviziowebSoapClient
TextBox2.Text = servizioweb.testoweb
End Sub
lunedì 23 giugno 2008
Semplicità disarmante
Chi ha esperienza di programmazione in Java può ben valutare il confronto.
Ma anche rispetto ad altri linguaggi credo che in fatto di semplicità Python non sia secondo a nessuno.
Riporto qui 3 esempi.
Ma anche rispetto ad altri linguaggi credo che in fatto di semplicità Python non sia secondo a nessuno.
Riporto qui 3 esempi.
- Scrittura lettura su file.
- fout = open("output.txt", "w")
- fout.write("La prima riga\n")
- fout.write("Una seconda riga cinchialesca\n")
- fout.close()
- fin = open("output.txt", "r")
- for line in fin:
print line
- Eseguire un comando del sistema operativo.
- import os
- fd = os.popen('calc')
- #outtext = fd.read()
- fd.close()
- Lettura di una database via ODBC*.
- import odbc
- try:
s = odbc.odbc('NomeODBC') # mi collego al DSN
cur = s.cursor()
cur.execute('select * from NomeTabella')
rec = cur.fetchall()
for i in rec:
print i[0] + ' -- ' + i[1] #Nota - Stampo i campi in posizione 0 e 1 - except:
print 'errore'
lunedì 16 giugno 2008
Spedire un email con Python
Un semplice programma per spedire un messaggio di testo tramite un server SMTP
import smtplib
server = smtplib.SMTP('nomeserver-SMTP','porta')
server.login('utente', 'password')
server.sendmail('indirizzomitente','indirizzodestinatario','testo di prova invio')
print "inviato"
server.quit()
import smtplib
server = smtplib.SMTP('nomeserver-SMTP','porta')
server.login('utente', 'password')
server.sendmail('indirizzomitente','indirizzodestinatario','testo di prova invio')
print "inviato"
server.quit()
giovedì 12 giugno 2008
Configurare app.yaml
Sintetizzo (e forse banalizzo) alcuni concetti per renderli spero più comprensibili.
Nel file app.yaml si trovano le configurazioni dei comandi che Google App recepisce tramite il browser.
Aggiungendo le righe di cui sotto (al file app.yaml)
*Altre istruzioni possono poi essere aggiunte.
Nel file app.yaml si trovano le configurazioni dei comandi che Google App recepisce tramite il browser.
Aggiungendo le righe di cui sotto (al file app.yaml)
- handlers:
- - url: /nomecomando/(.*?)/(.*)
- script: cartellafiles/d2/\1.py
- http://localhost:8080/nomecomando/gprog/gcom
- cartellafiles/d2/gprog.py gcom
- def main():
- application = webapp.WSGIApplication(
- [('nomecomando/gprog/gcom', MainPage)
- ('nomecomando/gprog/ins1*',ins1,
- ....etc...
- ],
- debug=True)
*Altre istruzioni possono poi essere aggiunte.
mercoledì 11 giugno 2008
Google Docs Api
Ho provato le Api dei Google Docs, naturalmente in versione Python.
E' possibile fare molte cose interessanti, per esempio leggere e scrivere dati direttamente da programma sui fogli di calcolo presenti nelle cartelle dei GoogleDocs.
Qui un esempio di codice.
Se lo provate da console locale (python example.py) fate attenzione durante il comando update ad inserire la colonna come numero.
Es. update 1 1 'prova'.
Inserirà la stringa 'prova' nella cella 'A1'.
Per accedere direttamente ai vostri SpreadSheet su Google dovete individuare il codice del documento ed il sotto-codice del foglio specifico.
Per fare questo in modo diretto vi consiglio di ricavare i codici stampandoli tramite questi comandi :
print self.curr_key
print self.curr_wksht_id
Potete aggiungerli ad example.py.
Ho poi provato a far funzionare il programma dalle Google App e ci sono riuscito, ma solo facendo l'updolad anche di tre librerie aggiuntive: atom,_xmlplus, gdata.
giovedì 5 giugno 2008
komodo
Ho provato Komodo Edit.
La versione 4.3.2 ha qualche problema.
Ho scoperto che c'è la 4.4.0 beta1.
Vediamo se hanno coperto un po' di buchi.
La versione 4.3.2 ha qualche problema.
Ho scoperto che c'è la 4.4.0 beta1.
Vediamo se hanno coperto un po' di buchi.
mercoledì 4 giugno 2008
Bulk Upload
Dopo non pochi sforzi sono finalmente riuscito a fare il Bulk Upload di una tabella con date e numeri.
def __init__(self):
bulkload.Loader.__init__(self, 'xxx',[
('data', lambda x: datetime.strptime(x,"%Y/%m/%d %H:%M:%S")),
('float', lambda x: float(x)),
('numero', int),
('nome', str),
('nomenumero, lambda x: float(x) if not x == 'ERROR' else None),
])
grazie a l8rz.
def __init__(self):
bulkload.Loader.__init__(self, 'xxx',[
('data', lambda x: datetime.strptime(x,"%Y/%m/%d %H:%M:%S")),
('float', lambda x: float(x)),
('numero', int),
('nome', str),
('nomenumero, lambda x: float(x) if not x == 'ERROR' else None),
])
grazie a l8rz.
venerdì 30 maggio 2008
Vedere i dati del DataStore Locale
Per vedere i dati salvati in locale dalle applicazioni di prova basta andare sulla console che si trova qui :
http://localhost:8080/_ah/admin/datastore
(naturalmente dopo aver avviato l'dev_appserver locale)
http://localhost:8080/_ah/admin/datastore
(naturalmente dopo aver avviato l'dev_appserver locale)
Per cambiare utente durante l'upload delle application
Se si utilizzano più log-in dallo stesso PC, quando si usa appcfg.py per fare l'upload delle applicazioni può essere è necessario eliminare la cache per poter collegare un nuovo utente.
Bastea eliminare il file .appcfg_cookies che su Vista trovate sotto C:\Utenti\NOMEUTENTE\.
Bastea eliminare il file .appcfg_cookies che su Vista trovate sotto C:\Utenti\NOMEUTENTE\.
giovedì 22 maggio 2008
Alcuni esempi di codice per AppEngine
Qui http://code.google.com/p/google-app-engine-samples/downloads/list ci sono alcuni esempi di codice.
Static file sotto le app
Finalmente sono riuscito a fare l'upload di un file statico sulle Google App.
questa la sintassi per il file app.yaml.
(nel caso qui sotto in locale i files vanno salvati nella sotto-cartella dell'applicazione nominata "static".
application: NOMEAPPLICAZIONE
version: 1
runtime: python
api_version: 1
handlers:
- url: /static
static_dir: static
- url: /.*
script: digicinghia.py
questa la sintassi per il file app.yaml.
(nel caso qui sotto in locale i files vanno salvati nella sotto-cartella dell'applicazione nominata "static".
application: NOMEAPPLICAZIONE
version: 1
runtime: python
api_version: 1
handlers:
- url: /static
static_dir: static
- url: /.*
script: digicinghia.py
I dati di App Engine
L'applicazione delle AppEngine che permette di salvare i dati in locale, per default (su VISTA) li inserisce sotto la cartella : C:\Users\NOMEUTENTE\AppData\Local\Temp.
Per modificare la posizione del db occorre dare un nuovo percorso in fase di avvio del server http (incluse nell'engine).
es.
python dev_appserver.py helloworld/ --datastore_path=c:\0local\dati..datastore
Per modificare la posizione del db occorre dare un nuovo percorso in fase di avvio del server http (incluse nell'engine).
es.
python dev_appserver.py helloworld/ --datastore_path=c:\0local\dati..datastore
lunedì 19 maggio 2008
La serie di Fibonacci
Con Python alcuni calcoli diventano di una semplicità disarmante.
Un esempio di codice per calcolare i primi dieci numeri della serie di Fibonacci:
Un esempio di codice per calcolare i primi dieci numeri della serie di Fibonacci:
- a,b =0,1
- while b <100>
- print b
- a, b= b, a+b
Ajax e Google
Qui qualche riferimento : http://code.google.com/apis/ajaxlanguage/documentation/#Examples
sabato 17 maggio 2008
I dizionari
I dizionari hanno alcune analogie con i db.
vedere qui : http://programmazione.html.it/guide/lezione/1293/dizionari/
esempio
diz1 = {'stefano':23,'elena':19,'enrico':25,'simone':30}
print diz1
vedere qui : http://programmazione.html.it/guide/lezione/1293/dizionari/
esempio
diz1 = {'stefano':23,'elena':19,'enrico':25,'simone':30}
print diz1
Key su Entity
class Story(db.Model):
title = db.StringProperty()
author = db.StringProperty()
s = Story(key_name="xzy123")
Etichette:
google app,
key,
python
Iscriviti a:
Post (Atom)