Newsgroup: it.comp.os.linux.development
Titolo: faq it.comp.os.linux.development

			    _________   ____
			   / ____/   | / __ \
			  / /_  / /| |/ / / /
			 / __/ / ___ / /_/ /
			/_/   /_/  |_\___\_\
		newsgroup it.comp.os.linux.development
		      mantainer: Ottavio Campana
Ultimo aggiornamento: 17 Febbraio 2004
Sezione 1: Domande generali.
1.1 Quali linguaggi sono disponibili per sviluppare sotto linux?
1.2 Quali sono gli IDE disponibili per i vari linguaggi?
1.3 Ho creato  il mio  primo  programma  in Linux,  ma quando  lo eseguo
    ottengo "command not found".
1.4 Perché   è  sconsigliato   includere  la  directory  corrente  nella
    variabile d'ambiente PATH?
1.5 Ma scrivere "./nomeprogramma" non è equivalente a "nomeprogramma"?
1.6 Esiste Visual Basic per linux?
1.7 E Delphi?
1.8 Come faccio a fare le parentesi { } ?
1.9 Come faccio a creare un cd live?
1.10 Quanto veloce va il mio programma?
Sezione 2: Compilatore e makefiles.
2.1 Come posso compilare un programma C/C++?
2.2 Il  mio programma è suddiviso  su più file, come  posso creare degli
    object e poi linkarli in un unico esegubile?
2.3 Cosa vuol dire "undefined reference to ..."?
2.4 Se volessi imparare ad usare gli autotools?
Sezione 3: Applicazioni grafiche
3.1 Desidero  fare un programma  con finestre e pulsanti,  che strumenti
    devo usare?
3.2 E per fare un programma "multimediale"?
Sezione 4: Programmazione di rete
4.1 Come implemento un timeout nella lettura da socket?
Sezione 5: Dubbi sulle licenze opensource
5.1 Come posso distribuire il mio programma se usa librerie lgpl?
5.2 Voglio vendere il mio software, allora non uso librerie gpl.
Sezione 6: Documentazione on line
6.1 Dove trovo una versione aggiornata di queste faq?
6.2 Documenti generali
6.3 Bash
6.4 Programmazione di rete
6.5 Usare seriali e parallele
Sezione 7: Varie ed eventuali su questa faq
7.1 Come ottenere la versione html aggiornata delle faq
------------------------------------------------------------------------
Sezione 1: Domande generali.
1.1 Quali linguaggi sono disponibili per sviluppare sotto linux?
Praticamente tutti. C/C++, Java, Perl,  Pascal, Ruby, Python, PHP, Kylix
(Delphi) e molti altri ancora. Molti  programmi in Linux sono scritti in
C/C++,  tuttavia in  questi ultimi  anni  si stanno  affermando anche  i
linguaggi interpretati come Ruby o  Python. La scelta ovviamente dipende
molto da cosa si intende sviluppare.
1.2 Quali sono gli IDE disponibili per i vari linguaggi?
Tra  gli IDE  più  "trendy"  del momento  ci  sono  senz'altro Anjuta  e
KDevelop, tuttavia non è da  sottovalutare l'uso di semplici editor come
gvim o emacs che hanno un  ottimo interfacciamento con i compilatori più
diffusi.
1.3 Ho creato  il mio  primo  programma  in Linux,  ma quando  lo eseguo
    ottengo "command not found".
In  Linux, se  non ne  viene  esplicitamente indicato  il percorso,  gli
eseguibili vengono  cercati nelle directory specificate  dalla variabile
d'ambiente PATH. Solitamente il PATH  non include la directory corrente,
quindi devi lanciare il  programma con ./nomeprogramma oppure modificare
il PATH  affinché includa la  directory corrente, ma questo  è altamente
sconsigliato.
1.4 Perché   è  sconsigliato   includere  la  directory  corrente  nella
    variabile d'ambiente PATH?
Perché si  rischia di  eseguire accidentalmente un  programma pericoloso
che si  trova nella directory corrente  magari al posto del  suo omonimo
"buono" che si trova in una  directory fidata (come /bin, /usr/bin etc.)
E' opportuno che nel PATH siano inclusi solo programmi "fidati".
1.5 Ma scrivere "./nomeprogramma" non è equivalente a "nomeprogramma"?
Dal punto di vista del file system si, ma poiché la seconda potrebbe far
intendere che "nomeprogramma" sia nel  PATH, esso viene eseguito solo se
si trova effettivamente in una delle directory nel PATH.
Invece   scrivere  "./nomeprogramma"   evita  questa   ambiguità  perché
specifica esplicitamente la  directory in cui si trova il  file e quindi
viene eseguito anche se non si trova nelle directory in PATH.
1.6 Esiste Visual Basic per linux?
Grazie   al   cielo  no.   Tuttavia   dovrebbe   possibile  usare   Mono
(
http://www.go-mono.org
)   per   compilare    il   codice   scritto   in
VisualBasic.Net (il compilatore  CIL e le librerie  grafiche sono ancora
in alfa).
1.7 E Delphi?
La  Borland ha  sviluppato kylix,  un  software proprietario,  che è  il
porting di delphi per linux.
1.8 Come faccio a fare le parentesi { } ?
In ambiente grafico:
{ -> AltGr+7
} -> AltGr+0
In console:
{ -> AltGr+8
} -> AltGr+9
1.9 Come faccio a creare un cd live?
Non   è   una   cosa   difficile,    soprattutto   se   si   usano   gli
strumenti   giusti.    Se   
freshmeat.net
   si   trova    il   programma
bblcd,   altrimenti   questo    documento   può   essere   interessante:
http://am.xs4all.nl/phpwiki/index.php/MainModuleHowto
 .
1.10 Quanto veloce va il mio programma?
Per misurare  le prestazioni del  proprio programma  ci sono un  paio di
programmi che possono essere utili. Il  primo si chiama gprof e richiede
che i programmi vengano compilati con  i flag -pg e -fprofile-arcs. Dopo
la prima esecuzione  pro programma viene generato un file  gmon.out e se
lanciate quindi gprof  nomefile vedrete il profiling  delle funzioni del
programma.
Il secondo programma disponibile si chiama Oprofile ed è repreribile nel
sito  
http://oprofile.sourceforge.net/news/
 .  Questo programma  è molto
più complesso  del precedente,  richiede anche  che vengan  compilati di
moduli per il kernel e le  possibilità di analisi richiedono una attenta
lettura della documentazione.
Sezione 2: Compilatore e makefiles.
2.1 Come posso compilare un programma C/C++?
Per il C: gcc nomesorgente.c -o nome_dell'eseguibile
Per il C++ g++ nomesorgente.cpp -o nome_dell'eseguibile
2.2 Il  mio programma è suddiviso  su più file, come  posso creare degli
    object e poi linkarli in un unico esegubile?
Per  fare  questo devi  compilare  i  signoli  file con  gcc/g++  usando
l'opzione -c che crea, per l'appunto, un object. Il link viene fatto dal
comando ld,  o più banalmente si  può sempre usare gcc  che provvedere a
richiamare ld. L'automatizzazione del tutto è possibile ricorrendo ad un
Makefile.
2.3 Cosa vuol dire "undefined reference to ..."?
Una  o più  librerie  necessarie per  il tuo  programma  non sono  state
indicate  sulla riga  di comando  di gcc  (o ld).  Per fare  questo devi
utilizzare  lo switch  -l.  Per convenzione  le  librerie sono  chiamate
libnome.so , se sono dinamiche, oppure libnome.a , se sono statiche. Per
linkarle dinamicamente  al tuo eseguibile  devi passare a  gcc l'opzione
-lnome (senza  il prefisso  "lib" ne` il  suffisso ".so").  Per linkarle
staticamente devi invece linkare il file libnome.a all'eseguibile. Se le
librerie non si trovavano nel path  di ricerca (man ld.so) gcc non sara`
in grado  di trovarle. Per  aggiungere una  diretory al path  di ricerca
devi usare lo switch -L (es: -L/home/foobar/mylibdir).
2.4 Se volessi imparare ad usare gli autotools?
Un  buon modo  per  cominciare  è leggere  l'autobook,  che  è un  libro
che  spiega  appunto  come  usare  gli  autotools.  Lo  si  può  trovare
all'indirizzo  
http://sources.redhat.com/autobook
 e  in  debian è  stato
messo nel pacchetto autobook .
Sezione 3: Applicazioni grafiche
3.1 Desidero  fare un programma  con finestre e pulsanti,  che strumenti
    devo usare?
Esistono molte  librerie che facilitano  questo compito, le più  in voga
sono senz'altro  le GTK+ e le  QT. Tra gli altri  toolkit disponibili ci
sono le wxwindows.
3.2 E per fare un programma "multimediale"?
Le  librerie  SDL   (
http://www.libsdl.org
),  abbastanza  sofisticate  e
multipiattaforma,  consentono  anche  la  gestione  dell'audio  e  altre
periferiche.
Un'altra     possibilità     è      data     dalle     librerie     SVGA
(
http://www.svgalib.org
), forse più leggere ma più limitate.
Sezione 4: Programmazione di rete
4.1 Come implemento un timeout nella lettura da socket?
Si  deve usare  la funzione  select. Eccone  un esempio  (il che  non vi
esclude dall'obbligo dalla lettura della manpage della select):
#include <stdlib.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
int socket;
int server;
struct timeval timeout;
fd_set read_set;
int ret;
/* Suppongo che il socket /server/ sia in ascolto su una data porta */
socket = accept(server, NULL, 0);
if (socket == -1) {
        perror("accept()");
        exit(EXIT_FAILURE);
}
/* Aggiungo /socket/ al set di file descriptors che verra` monitorato
 * dalla select
 */
FD_ZERO(&read_set);
FD_SET(socket, &read_set);
/* Timeout dopo 10.5 secondi */
timeout.tv_sec = 10;
timeout.tv_usec = 500000;
ret = select(socket + 1, &read_set, NULL, NULL, &timeout);
if (ret == -1) {
        perror("select()");
        exit(EXIT_FAILURE);
} else if (ret) {
        /* Ci sono dati disponibili, posso iniziare una lettura */
} else {
        /* Timeout: Nessun dato disponibile entro 10.5 secondi. Il
         * programma agisce di conseguenza (eg. chiude il socket).
         */
}
Nota bene: se il codice viene inserito in un loop la struttura timeout e
il set di  fd *devono* essere re-inizializzati prima di  ogni chiamata a
select.
Sezione 5: Dubbi sulle licenze opensource
5.1 Come posso distribuire il mio programma se usa librerie lgpl?
Il punto 6 della licenza lgpl prala dei lavori proprietari che si basano
sull'uso di  librerie lgpl con per  esempio la libc. In  questo caso chi
vende il prodotto deve:
1)  rilasciare  pubblicamente  sotto licenza  lgpl  eventuali  modifiche
apportate alle librerie lgpl usate.
2)  rilasciare  i file  oggetto  ottenuti  durante la  compilazione  del
programma affinché  l'utente possa linkarli con  versioni più aggiornate
della  libreria. La  distribuzione  dei file  .o  deve essere  garantita
all'utente al mero costo del supporto per almeno tre anni.
3) se non  si vogliono rilasciare i  file .o , l'unica  cosa possibile è
l'implementazione  da parte  dell'autore  di un  sistema di  caricamento
dinamico di tutte le informazioni e  di tutte le funzioni della libreria
invece  di includere  direttamente  la  libreria e  i  suoi herader  nel
progetto.
5.2 Voglio vendere il mio software, allora non uso librerie gpl.
Questo  è un  ragionamento  poco  furbo. Per  prima  cosa ricordate  che
comunque se  usate librerie sotto  licenza lgpl siete comunque  tenuti a
rispettare tutti i vincoli elencati nella domanda precedente. Inoltre ci
sono alcune considerazioni da non sottovalutare:
1) se il programma è scritto  in un linguaggio interpretato, per esempio
in python  che è molto  comodo per  scrivere assieme alle  gtk programmi
facilmente portabili  su più sistemi  operativi, non si può  chiudere il
sorgente. Quindi tutti  gli sviluppatori che temono il  furto del codice
devono usare linguaggi di programmazione compilati.
2) è  molto improbabile  che un  vostro cliente si  metta a  rivendere i
programmi  che ha  acquistato da  voi a  meno che  non abbia  acquistato
qualcosa di banale come "il ricettario di nonna amelia".
3)  perché  un  potenziale  cliente  della ditta  al  punto  2  dovrebbe
scegliere di  acquistare il software  da tale ditta piuttosto  che dallo
sviluppatore che  può fornire  un supporto  e una  personalizzazione del
software migliore?
4) nell'impotesi che  il cliente al punto 3 decida  di farvi concorrenza
col vostro software  ricordati che anche egli è  vincolato dalla licenza
gpl.
Detto questo  ognuno è  libero di scegliere  la licenza  che preferisce,
sebbene  rinunciare a  tutte le  librerie  può non  sempre rivelarsi  la
scelta più furba.
Sezione 6: Documentazione on line
6.1 Dove trovo una versione aggiornata di queste faq?
Queste faq vengono  postate all'incirca una volta al mese  su usenet, in
base  ad  eventuali  aggiornamenti  delle  stesse  e  mie  dimenticanze.
Sono  pubblicate   sul  web   nel  mio  sito   personale,  all'indirizzo
http://www.campana.vi.it/ottavio/linux/faq-icold.txt
6.2 Documenti generali
Appunti di Informatica Libera 
http://a2.swlibero.org
Guida alla programmazione in linux 
http://gapil.firenze.linux.it/
6.3 Bash
Bash Advanced Scripting Guide 
http://www.tldp.org/guides.html
6.4 Programmazione di rete
Network Programming 
http://digilander.libero.it/foobar/papers/index.html
6.5 Usare seriali e parallele
Per    comunicare    con    la     porta    parallela    puoi    cercare
a   partire    da   qui:    
http://people.redhat.com/twaugh/parport/
   e
http://www.torque.net/linux-pp.html
.
Per  comunicare con  la porta  seriale puoi  cercare a  partire da  qui:
http://www.tldp.org/HOWTO/Serial-Programming-HOWTO/
Sezione 7: Varie ed eventuali su questa faq
7.1 Come ottenere la versione html aggiornata delle faq
Probabilmente non è una cosa esistenziale,  ma mi è stato passato questo
bello script  in python da Alessandro  Staltari che da solo  scarica dal
web la  versione txt delle faq  e ci aggiunge  i tag html. E'  una bella
idea,  furba e  utile e  lo riporto,  per tutti  coloro che  vogliono la
versione html aggiornata e per tutti quelli che vogliono vedere un pezzo
di codice python:
######################### inizio file faq.py ###########################
import urllib
import re
 
output="""
<HTML>
<HEAD>
<TITLE>FAQ</TITLE>
</HEAD>
<BODY><PRE>
"""
f=urllib.urlopen("
http://www.campana.vi.it/ottavio/linux/faq-icold.txt
")
input=f.read()
f.close()
 
i=0
firstid=""
tmp=input.replace(">","&gt")
input=tmp.replace("<","&lt")
questionid=re.compile(r"^([0-9.]+) +[^\n]+\n", re.MULTILINE)
continuation=re.compile(r"^[ \t]+.+\n")
m=questionid.search(input[i:])
while (m != None):
    output=output+input[i:i+m.start()]
    if (firstid!="#"):
        output=output+'<A href="#'+m.group(1)+'" name="'+m.group(1)+'top">'
    else:
        output=output+'<A href="#'+m.group(1)+'top" name="'+m.group(1)+'">'
    if firstid=="":
        firstid=m.group(1)
    else:
        if m.group(1)==firstid:
            firstid="#"
    output=output+m.group(0)
    i=i+m.end()
    m=continuation.search(input[i:])
    while m != None:
        output=output+m.group(0)
        i=i+m.end()
        m=continuation.search(input[i:])
    output=output+'</A>'
    m=questionid.search(input[i:])
output=output+input[i:]
output=output+"</PRE></BODY>"
f=open(r"faq-icold.html", "w")
f.write(output)
f.close()
########################## fine file faq.py ############################

 7.1 Come ottenere la versione html aggiornata delle faq
urca, ho dimenticato di toglierlo. Scusa Alessandro, non volevo
pubblicarlo contro la tua volontà....

 ha scritto::

pecato veniva fori un bel thread con mplementazioni dek'algoritmo in
tutti gli altri linguaggi ;) 

 VisualBasic.Net 
Io sopra mi riferivo a Visual Basic 6.
Mi hanno detto (ed e' parso anche a me, leggendo qua e la), che VB .NET 
e' ben piu' complesso di VB6...a quel punto tanto vale usare C# 
direttamente...
Comunque Mono sembra essere un buon progetto; speriamo vada bene in 
porto.
Ciao,
Dan

 tutti gli altri linguaggi ;)
se vuoi rifarlo in altri linguaggi io li prendo volentieri e poi
possiamo fare benchmark e considerazioni varie.

 pregi (= facilita' di sviluppo, soprattutto della GUI).
prova per esempio glade. la gui la fai visuale, non devi scrivere mezza
riga di codice. E fa solo l'interfaccia grafica e non genera tutta la
merd@ che per esempio visualc++ genera da solo e non c'è modo di
toglierla.
e comunque non è vero che si perde in rapidità di sviluppo. E' solo
questione di abitudine e fare un po' di esperienza. E chi pretende di
essere produttivo prima di imparare qualcosa è meglio che rimanga
confinato su windows il più possibile.

Ragazzi, prima di generare un flame vi invito a dare uno sguardo su 
i.c.l.p dove proprio qualche giorno fa ci si è già scannati sull'
argomento.
Ciau, e state allegri.
--
Don't you know why your Python application has crashed? Take a loot to
http://www.pycrash.org
My Home Page: 
http://cnoviello.altervista.org
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 toglierla.
 
Beh, con Visual C++ puoi anche disegnare solo la GUI, e il codice lo 
scrivi senza usare i Wizard...(a volte poi il codice dei wizard e' 
utile; OK, non sempre e' "bello"!)
Ciao,
Dan

 Ciau, e state allegri.
Io non ho nessuna intenzione di avviare flames, figurati! :)
Il mio vuole solo essere un contributo costruttivo.
Comunque, vado a vedere il thread che dici nel tuo post, tnx.
Ciao,
Dan

 utile; OK, non sempre e' "bello"!)
no no, la sfiga principale di vc++ č che č disordinato.


Ormai e' fatta, lascialo :-)
Tanto non so quando avro' tempo e voglia di rimetterci mano...
Alessandro.

 perché la statistica è eloquente:
Effettivamente questo e' un tuo giudizio, che puo' essere condiviso o meno.
Forse nelle FAQ e' meglio essere piu' "neutri" :-)
Alessandro.

 tutti gli altri linguaggi ;)
Si accettano migliorie anche per la versione python, visto che quel
programma l'ho scritto per comodita' ma soprattutto per imparare :-)
Alessandro.


Soprattutto tempo...
Alessandro.

 perché la statistica è eloquente: 
Citare fonti grazie.
Te lo chiedo come sviluppatore Windows in Visual Basic 6.0, Visual Basic
.Net, C++ & Win32 e (per ora) ex sviluppatore C su Linux (per la tesi di
laurea ho scritto una sorta di Netmeeting ante litteram per X Window nel
1994-95).
Giusto per capire se per sviluppatore intendi anche il ragazzino brufoloso
che sbatte sui form tonnellate di controlli per fare diventare "carino" il
programma...allora potresti aver ragione :-)
Non che il tuo post mi sorprenda: io che mi interesso di entrambe le
piattaforme di sviluppo sono ormai abituato a vedere questo "snobismo" di
chi usa Linux (come piattaforma di sviluppo, come sistemista, etc.) contro
chi usa Windows...
Stefano "HappyMan" (Lake Maggiore - Italy)
-- 
The Personal Framework for Object Oriented Windows Development (Win32)
http://www.sgr.info
Email happyman69 (at) 
despammed.com

 ecc.
Obietto solo su questo punto (trovandomi, per quanto riguarda il
giudizio su VB, generalmente d'accordo con Ottavio).
Se uno usa "male" C, C++ e Java, questi hanno la tendenza a esplodere in
faccia al programmatore. Specie il C. Questo rappresenta una seria
barriera all'ingresso, che impedisce che gente che, anche incrociando il
numero di scarpe con il QI non ce la fa lo stesso a passar per normale
arrivi a rilasciare del codice *senza* aver studiato.
Al contrario, dopo aver usato per anni VB, si ha quasi l'impressione che
il creatore di tale linguaggio (e IDE) incoraggi lo sviluppatore a non
leggere nulla. Il che, ovviamente, ha prodotto più bestialità che
programmi utili. Il Visual Basic lo vedo, al più, come linguaggio per
scrivere macro; perlomeno fino al VB.Net. Se serve un linguaggio per
macro, su Linux ce ne sono a pacchi: c'è chi integra una shell in Python
o Perl per estendere applicazioni (vedi Gnumeric o GIMP), o chi scrive
un linguaggio /ex-novo/ a tale scopo (vedi S-Lang, per SLRN e Jed).
Ciao,
 Emmanuele.
-- 
Emmanuele Bassi (Zefram)                 [ 
http://www.emmanuelebassi.net
 ]
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

 ha
scritto::

non so se č una migliora, ma usando una regexp piů 
strutturata e finditer():
import urllib
import re
output="<HTML><HEAD><TITLE>FAQ</TITLE></HEAD><BODY><PRE>"
input=urllib.urlopen("
http://www.campana.vi.it/ottavio/linux/faq-icold.txt
").read()
# Usiamo un hash per tener traccia delle domande
Trovate={}
input=input.replace(">","&gt").replace("<","&lt")
# La regex della domanda, con questa rgx 
# Becchiamo pure le domande spezzate in due linee, se sono indentate
questionid=re.compile("^(\d+\.\d+)(.*\n)?(    .*\n)?", re.MULTILINE)
# seek Serve a recuperare gli intervalli. Deve esistere un modo
# migliore. finditer() fa il lavoro per noi
seek=0
for m in questionid.finditer(input):
    output+=input[seek:m.start()]
    if not Trovate.has_key(m.group(1)):
        output+='<A href="#'+m.group(1)+'" name="'+m.group(1)+'top">'
        Trovate[m.group(1)]=True
    else:
        output+='<A href="#'+m.group(1)+'top" name="'+m.group(1)+'">'
    output+=m.group(0)
    output+='</A>'
    seek=m.end()
output+="</PRE></BODY></html>"
f=open("faq-icold.html", "w+")
f.write(output)
f.close()
perň penso si possa togliere anche quel "seek" in qualche modo.
Versione in ruby:
require 'open-uri'
intestazione="<HTML><HEAD><TITLE>FAQ</TITLE></HEAD><BODY><PRE>"
input=open("
http://www.campana.vi.it/ottavio/linux/faq-icold.txt
").read
# gsub effettua una sostituzione. il ! indica che fa side effect, 
# come in scheme (qui sostituisce in place)
input.gsub!("<","&lt;")
input.gsub!(">","&gt;")
# La regex della domanda, con questa rgx 
# Becchiamo pure le domande spezzate in due linee, se sono indentate
domanda =/^(\d+\.\d+)(.*\n)?(    .*\n)?/
# Usiamo un hash per tener traccia delle domande
Trovata={}   
# Ogni elemento che corrisponde alla regexp viene passato al blocco.
# Se non esiste nell'hash creiamo un link verso il basso,
# se ne abbiamo gia' trovato uno lo creiamo verso l'alto.
input.gsub!(domanda) do |str|
  if not Trovata[$1]
   Trovata[$1]=true
   '<a href="#'+$1+'" name="#'+$1+'top" >'+str+'</a>'
  else
   '<a href="#'+$1+'top" name="#'+$1+'" >'+str+'</a>'
  end  
 
end
f=open('faq-icold.html','w+')
f.print intestazione,input,'<pre></body></html>'
f.close

 
Sulla questione dello "snobismo" sono d'accordo: denigrare a priori un
ambiente
di programmazione come VB, che indubbianente ha i suoi problemi, non
porta
da nessuna parte. Prima o poi si finisce soltanto per sparare a zero e 
soprattutto si rischia di perdere il nocciolo della questione che stà
da tutt'altra parte. Cerchiamo di fare il punto della questione.
Personalmente conosco VB dalla prima versione fino alla 6, dopo di che
andato all'Università ho definitivamente abbandonato piattaforme
Windows.
VB è sempre stato un prodotto di massa, che senza ombra di dubbio ha i
suoi
pregi storici: e nato in un momento in cui poter realizzare interfacce
grafiche interattivamente per i programmatori PC era un miraggio.
E, inoltre, nonostante Hewitt avesse formalizzato i principi di calcolo
della programmazione OO già da 15 anni, agli inizi degli anni 90 ancora
non ara chiaro dove si arrivasse con la OOP.
Fatta questa promessa conciliatoria, andiamo al punto. Non c'è ombra di
dubbio
che un ambiente di programmazioni si porti con se una propria filosofia
di sviluppo: è innegabile che quella di fondo del C è l'ottimizzazione 
del codice, così come quella di Java la portabilità (e badate bene che
io non mi riferisco soltanto ad aspetti funzionali). 
VB, quindi, non sfugge a questa logica, e la sua filosofia è quella di
un
ambiente che *fornisce soluzioni a problemi complessi* in poco tempo 
(calmi che ci ritorniamo). E qui scatta il vero problema di fondo:
perchè
ci sono programmatori che hanno accettatto alla cieca questa filosofia e
sono giunti a produrre codice che non è altro un accozzaglia di
controlli
su una form? E inoltre, è direttamente imputabile un ambiente di 
programmazione per scelte di progettazione sbagliate?
Ebbene la risposta è no. Sarebbe come dire che la Ferrari è socialmente
pericolosa perché consente di arrivare a oltre 300 Km/h. E' socialmente
pericoloso chi ci sfreccia a quella velocità sull'autostrada, non una
povera
macchina.
Per quanto riguarda VB, il vero problema è che (per la maggior parte dei
casi, ma non tutti intendiamoci) VB identifica una classe di
programmatori
che io definisco *derivati*, ossia tutte quelle persone che sono
diventate
programmatori (o addirittura sviluppatori) migrando da altri settori,
e questi, lo torno a ripetere, sono la maggioranza di quelli che operano
con
VB. Il nocciolo della questione, quindi, non è VB ma tutti quelli che,
vuoi per scarsa formazione personale vuoi per fretta, producono codice 
che fa schifo, ovviamente abbracciando nei fatti una filosofia di
sviluppo
che VB si porta dietro (qua ci ritorniamo). 
Già la fretta. Il problema, infatti, nasce anche dal fatto che dietro a
queste
persone spesso ci sono project manager o più ancora industriali pervasi
da una miopia tendente alla cecità causata da un male ben più grave:
investire a costi zero! Una delle motivazioni più gettonate di chi
sviluppa con VB è "...perchè ti pemette di fare presto senza tirare le 
madonnine a nessuno (o qualcosa giù di lì)". Ed è questo il reale 
problema, perché chi dice questo (o chi si pone la fretta a bassi costi
come piano aziendale) non si rende conto che poi quasi sempre quello che
viene partorito è un mostro immanutenibile, con costi di gestione
altissimi
e via dicendo. Ma questo, ancora una volta, fa capire che chi opera nel
nostro
settore non ne capisce un tubo: anche il più cretino dei libri di
ingegneria
del software ti dice che il rapporto tra i costi di manutenzione e
quelli
di sviluppo è di 10:1. E l'unico modo per ridurlo, è realizzare sin da
subito
una buona progettazione che permetta agevolmente di manutenere,
espandere e
gestire il progetto.
Ma allora chi ci mettiamo sul banco degli imputati? Ebbene, signori miei
non certamente VB (che è uno strumento, e non può avere colpa, nostante
tutti gli oggettivi problemi che ha), bensì ci devono andare tutti
quelli
che ne fanno un uso non corretto (o che almeno non si sforzano di
aggirare
eventuali limitazioni e produrre codice decente) e mamma Microsoft,
la quale pur di avvicinare fedeli adepti disposti a fare salti mortali
quando a lei le girano e cambia  parametri di sviluppo, ecc., ha diffuso
la logica che dice "sviluppa con VB: is faster and better". Lo dico e lo
dirò
sempre: Sure, it's the Windows way!
Il software è una cosa complessa: non basta qualche colpettino di mouse
per produrre codice di cui quasi sempre *nessuno* si benigna a
dimostrarne il
corretto funzionamento. 
Cosa dire per concludere: on error....goto!
Ciau


 contro chi usa Windows...
non è questione di snobbismo, i programmibelli ci sono, ti sto solo
dicendo che però non sono mai fatti in visual basic.
Vogliamo per esempio parlare di dll, ocx, runtime e palle varie che
dovrebbero essere elementi condivisi e che quindi uno si aspetterebbe di
trovare già installati sul sistema operativo e che invece regolarmente
mancano e che se provi ad installare tra richieste di servic pack e patch
non vanno mai su e ti obbligano ogni volta a compilare il più possibile
statico nel binario?

 Sure, it's the Windows way!
ma il problema infatti sta lì.
E adesso ti chiedo, alla fine, considerando la qualità del softwaree
avendo presente le considerazioni che hai scritto prima, vb è
fenomenologicamente un bene o un male?
Insomma, le sigarette fanno male, eppure le gente fuma lo stesso. E qui si
applica lo stesso discorso.



intanto mi arriviata la versione in ruby. forse mi arriva anche quella in
ocaml, cosě possiamo fare un po' di confronti tra i vari linguaggi di
scripting :-)

 fenomenologicamente un bene o un male?
Per quanto riguarda la "filosofia di sviluppo" che questo linguaggio 
si porta dietro ti do pienamente ragione: il problema è che non è colpa
di VB ma di chi ha voluto che con VB si identificasse un modello di 
sviluppo software orientato al colpetto di mouse. E di chi ha
abbracciato
in pieno questa filosofia.
D'altro canto, forse, di questo se ne accorta anche la Microsoft: al 
TechED 2001 Dan Appleman dichiarò che bisognava far capire ai
programmatori
che non basta una form per fare un programma. E questo a proposito del 
fatto che un sondaggio aveva rivelato che l'80% degli utenti
insoddisfatti
di Windows non erano tali per il sistema in sè, ma per la qualità delle
applicazioni che ci giravano.


 per la qualità delle applicazioni che ci giravano.
ma va? :-)

 statico nel binario?


 Ultimo aggiornamento: 17 Febbraio 2004
oso.
mi pare che un'altra domanda molto frequente fatta su questo ng che non
compare nelle faq sia (cito l'ultimo che l'ha fatta):
"Salve ragazzi qualcuno può consigliarmi una buona guida o libro di C++
in ambiente linux? Possibilmente in italiano ;-)", ovvero documentazione
cartacea circa il C/C++
Ottimo lavoro comunque
Ciao

 modo di toglierla.
  Chiedo scusa se mi è sfuggito:
  mi sembra che si potrebbe aggiungere un riferimento a visualTcl,
  è assai facile per creare GUI. Personalmente, preferisco scrivere
  il codice a mano, Tk è ASSAI facile da usare, per scopi semplici,
  intendo. 
  PL
-- 
<!--_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
                      The Hacking Pages
 
www.lulli.net
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-->

 Scusa: perche' "grazie al cielo no"?? Se ci fosse sarebbe un tool in 
Ottavio, di questo passo oltre alle FAQ dovrai spedire anche le
metaFAQ :)
-- 
addio, e grazie per tutto il pesce

 cartacea circa il C/C++
urca, tocchi un tema che mi trova sempre molto dubbioso.
Riguardo al C++ ho letto un po' di libri, nessuno mi ha mai convinto.
Ho comprato lo Stroustrup sperando di trovare qualcosa di bello com il K&R
e sono rimasto deluso. Anni fa, al tempo del liceo ho letto un paio di
libri di Murrais e Pappas sul c++ (sono quelli che scrivono spesso sugli
ambienti di sviluppo M$) e sono senza capo nè coda. Il Lippman non mi
ha esaltato. Insomma, per ANSI/C++ sono tuttora alla ricerca di un bel libro.
Attualmente consiglio Thinking in C++ di Bruce Eckel che è consultabile
on line perché mi sembra buono per il rapporto qualità/prezzo. Però non
sono convinto al 100%.
Poi c'è una cosa da dire che mi lascia sempre perplesso: la gente chiede
un manuale per sviluppare in C++ sotto linux. Ma non conviene prima
imparare l'ANSI/C++ e poi prendersi la briga di leggere la documentazione
delle librerie? Non è come sotto VC++, dove hai le MFC e morta lì, sotto
linux ci sono un mare di librerie disponibili, con vari pregi, difetti e
licenze....
Quindi, per concludere, se qualcuno ha qualcosa di interessante da
consigliare come risposta alla richiesta di informazioni sul C++ possimo
discuterne, io però non mi sento di consigliare nulla attualmente.

   intendo. 
però tcl/tk non si integra bene con i toolkit più diffusi, o sbaglio?
ti chiedo, perché non lo conosco. E la portabilità?

ti chiedo, perché non lo conosco. E la portabilità?
che intendi per "integra con i tk più diffusi" ?
Tk è portabilissimo, solo su X11 ha una grafica bruttina.
Certo, nn offre tutte le feature di gtk o qt.. 

 Non č come sotto VC++, dove hai le MFC e morta lě, 
Puoi usare benissimo VC++, e fregartene delle MFC.
:-)
Ciao
Dan

 Puoi usare benissimo VC++, e fregartene delle MFC.
ma vedi torniamo sul discorso del vb. Se ti danno un ide che arriva
corredato di una libreria enorme perché i programmatori devono sbattersi
per usarne altre?

 imparato, tuttavia non posso dirmi soddisfatto dei libri che ho letto.
Questo č dovuto al fatto che il paradigma del C++ č piů complesso. La
programmazione
ad oggetti richiede studi a parte. Io sono convinto che prima di
intraprendere
lo studio di un linguaggio ad oggetti bisognerebbe leggere letteratura piů
specialistica
come quella sui pattern.
Ciau.
-- 
Don't you know why your Python application has crashed?
Take a look to 
http://www.pycrash.org


 per usarne altre?
Perche' - grazie al cielo - non tutti i programmatori Windows sono dei 
"caproni": ci sono quelli a cui piace MFC, e fanno bene ad usarla; 
quelli a cui non piace, e fanno bene ad usare altre librerie. VC++ 
lascia liberta' sotto questo punto di vista (il wizard MFC e' solo uno 
strumento *in piu'*, che uno puo' benissimo ignorare).

 parlava bene di quel testo.
ma solo per chi il c++ lo sa già

 pulito, ma trattano un po' un argomento, poi lo mollano, poi lo
credo che la colpa sia in larga parte del linguaggio stesso che,
diciamolo, e' un gran casino :)
Per quel che riguarda lo stroustrup, neanche a me piace molto, e' un
po' troppo disordinato, ma almeno posso dire che la terza edizione e'
di gran lunga migliore della seconda.


 ma solo per chi il c++ lo sa già
...mi sa che hai ragione!
 

 project manager che si appoggino a tali persone.
Proprio questo e' il vero dramma.

 sbaglio?  ti chiedo, perché non lo conosco. E la portabilità?
  P.s.: comunque la relativamente scarsa fama di cui gode è
  probabilmente dovuto alla ``Tcl War'' tra il creatore e
  Stallman. Inoltre noto con dispiacere che le maggiori
  distro Linux NON includono la documentazione in man pages,
  probabilmente per motivi di licenza (io uso Debian, non so
  poi le altre per certo...) il che costituisce un grave handicap.
  A questo punto, giro la domanda: 
  qualcuno sa dove andare a pescare le man pages di tcl/tk ?
  come pagine man, intendo, non convertite in HTML
  Ciao,
  Paolo
-- 
Unix/Linux Software Development & Tools
 
www.lulli.net

 attualmente.
  Debian provvede il seguente pacchetto di documentazione:
	stl-manual - C++-STL documentation in HTML
Description: C++-STL documentation in HTML
 This is the documentation for the C++ Standard Template Library as
 found on SGIs Website.
 Piuttosto utile, ad un'indagine approfondita...


 sbaglio?  ti chiedo, perché non lo conosco. E la portabilità?
  Quanto a portabilità:
  . esistono interpreti per ``tutte'' le piattaforme:
	     Win/Mac/*nix/Palm, etc..
  . l'interprete è ``embeddable'' nei propri programmi C/C++ :
<code>
#include "/usr/include/tcl8.3/tcl.h"
 int AppInit(Tcl_Interp *interp) {
    if(Tcl_Init(interp) == TCL_ERROR) return TCL_ERROR;
         Tcl_SetVar(interp,"tcl_rcFileName","~/.wishrc",TCL_GLOBAL_ONLY);
 return TCL_OK;
  }
int main(int argc, char *argv[]) 
{
	/*    Includo l'interprete           */
	Tcl_Main(argc, argv, AppInit);
         return 0;
}
</code>
	Esistono versioni minimali runtime degli interpreti per 
	ciascuna piattaforma, e questo permette di creare i 
	cosiddetti ``starkits'' ovvero pacchetti all-in-one
	contenenti interprete e codice compilato. Insomma, si
	possono esportare per Windows dei file:
		programma.exe
	contenenti il tutto, continuando a tenere il codice 
	interpretabile sotto *nix, con i relativi vantaggi
	sul tempo di sviluppo. 	
	Ma il vantaggio principale è la facilità con cui si possono
	creare GUI:
<code>
#!/usr/bin/wish
button .b -text "Spingimi" -command {exec xterm }
pack .b
</code>
	Assai incoraggiante, no ?
