venerdì 26 dicembre 2008

Zoho Creator sposa le Appengine di Google

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ì 7 novembre 2008

connettersi ai DB

Una utile raccolta di stringhe di connessione per i DB.


http://www.connectionstrings.com/

mercoledì 5 novembre 2008

Python su IIS 7

L'attivazione di Python su IIS di Microsoft è abbastanza semplice.
Dalla GEstione di IIS andate su Mapping gestori.

Poi aggiungete una nuova riga con le configurazioni riportate qui sotto ("C:\Python" è ovviamente la cartella in cui si trova python.exe).

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)

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:

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)

Appengine SDK 1.1.5

Da qualche giorno c'è già la 1.1.5

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).

Google Visualization API


Uno strumento ottimo per creare grafici.
Qui alcuni esempi.

giovedì 18 settembre 2008

Appengine SDK 1.1.3

E' stata rilasciata la rel 1.1.3 qui per approfondimenti.
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.

giovedì 11 settembre 2008

Sta arrivando F#

Il nuovo linguaggio di programmazione di Microsoft si chiama F#.
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 : 


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

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

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

Appengine 1.1.2

Powered by Google App Engine Google ha rilasciato un aggiornamento della sua Appengine.
Siamo alla 1.1.2

giovedì 21 agosto 2008

Python, Django, and App Engine

Guido van Rossum spiega le basi delle Google Application

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.

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

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.

  • 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'
*Per utilizzare gli ODBC occorre installare anche l'estensione per Windows che trovate qui: http://sourceforge.net/projects/pywin32/

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()

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)
  • handlers:
  • - url: /nomecomando/(.*?)/(.*)
  • script: cartellafiles/d2/\1.py
diciamo al programma che quando arriva una riga-comando come questa :
  • http://localhost:8080/nomecomando/gprog/gcom
vada nella sottocartella "cartellafiles/d2/" legga il programma gprog.py ed esegua il comando gcom, ovvero:
  • cartellafiles/d2/gprog.py gcom
Nel programma gprog.py dovremo configurare opportunamente il "main" che dovrà comprendere correttamente le istruzioni "http://localhost:8080/nomecomando/gprog/gcom" come sotto, per richiamare la classe MainPage
  • 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.

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.

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)

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\.

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

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

Shell per Python online

Un shell online per provare a programmare in Python.

http://shell.appspot.com/

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:

  • a,b =0,1
  • while b <100>
    • print b
    • a, b= b, a+b

I grafici di Google

Sample chart
Qui per trovare altre info : http://code.google.com/apis/chart/

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

Key su Entity

class Story(db.Model):
title
= db.StringProperty()
author
= db.StringProperty()

s = Story(key_name="xzy123")

Google Base Data API

Le Api qui. http://code.google.com/apis/base/