Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea è quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

lunedì 16 aprile 2007

Un nuovo plugin per WLW: pubblicazione di immagini

Mi sono dato alla creazione di un altro plugin per Windows Live Writer. Mi capita spesso di creare post il cui scopo è avere solo link a n immagini che vado preventivamente ad uploadare sul mio sito www.igordamiani.it. Per esempio, date un'occhiata al post relativo all'ultimo workshop.

Quali sono le caratteristiche che saltano all'occhio?
E' presto detto...

  1. C'è un breve commento all'inizio
  2. C'è un'immagine o una fotografia visibile direttamente nel post
  3. Ci sono una serie di n link, che puntano direttamente a n immagini JPG uploadate sul sito

Come dicevo, mi capita spesso di scrivere post di questo tipo e anche se non sembra, è piuttosto noioso farli, perchè sono sempre operazioni ripetitive. Scegli le immagini giuste, ridimensionale, uploadale sul sito, scrivi il post inserendo a mano una descrizione ed il link corretto e via dicendo. Ho deciso quindi di scrivere un plugin per WLW per automizzare il più possibile questa cosa, così vi posso bombardare più spesso di fotografie. :-) Perchè non farlo in WPF per renderlo più accattivante? Arrivo al dunque, altrimenti qua non finisco più.

La caratteristica fondamentale: la scelta delle fotografie
Il plugin, già in fase di sviluppo, permette all'utente di puntare una directory sul proprio hard-disk e poter scegliere le immagini da pubblicare oppure no. Do per scontato che le immagini nella directory siano già ridimensionate al punto giusto, perchè non faccio fare al mio plugin cose che altri software fanno già bene (come per esempio IrfanView). Dopo aver indicato la directory, si clicca su un pulsante che fa quanto segue:

void btnRefreshLocalPath(object sender, RoutedEventArgs args) { DirectoryInfo di = new DirectoryInfo(txtLocalPath.Text); FileInfo[] files = di.GetFiles("*.jpg"); lstImages.Items.Clear(); foreach (FileInfo f in files) { ImageElement ie = new ImageElement(f.FullName); lstImages.Items.Add(ie); } }

Il path viene recuperato dalla TextBox, viene utilizzato il metodo GetFiles() per ottenere la lista di tutti i files JPG (to be changed?) nella directory. In seguito, la ListBox viene svuotata e viene creato un oggetto ImageElement per ogni file esistente. La classe ImageElement incapsula tutta la logica che serve per gestire le immagini. Ogni istanza di ImageElement infatti permette di:

  1. selezionare/deselezionare l'immagine (usando una CheckBox)
  2. vedere l'immagine e decidere se la si vuole o no (usando un'Image)
  3. inserire una breve descrizione relativa all'immagine (usando una TextBox)

La classe ImageElement è uno UserControl scritto per WPF, quindi un po' XAML ed un po' C#. La parte XAML è forse la più interessante:

<UserControl x:Class="VivendoByte.PostSomeImages.ImageElement" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <UserControl.Resources> <Style x:Key="normal" TargetType="{x:Type TextBox}"> <Style.Triggers> <DataTrigger Binding="{Binding ElementName=chkSelected, Path=IsChecked}" Value="True"> <Setter Property="IsEnabled" Value="True" /> </DataTrigger> <DataTrigger Binding="{Binding ElementName=chkSelected, Path=IsChecked}" Value="False"> <Setter Property="IsEnabled" Value="False" /> </DataTrigger> </Style.Triggers> </Style> </UserControl.Resources> <StackPanel Orientation="Vertical" Name="panel"> <CheckBox Content="Select this image" IsChecked="False" Margin="0 6 6 1" Name="chkSelected" /> <Image Name="imgImage" Stretch="UniformToFill" Width="180"> <Image.Source> <BitmapImage UriSource="{StaticResource image}" /> </Image.Source> </Image> <TextBox Name="txtDescription" Margin="0 3 6 1" Style="{StaticResource normal}" /> <Label Height="3" Background="SkyBlue" /> </StackPanel> </UserControl>

Il visual-tree di ogni istanza di ImageElement contiene uno StackPanel verticale, che contiene a sua volta una CheckBox, una Image, una TextBox ed infine una Label (che funge semplicemente da separatore - to be changed). Ho inserito due triggers per rendere più divertente la cosa: quando una certa immagine non è selezionata (proprietà IsChecked della CheckBox = False), allora non ha senso che l'utente ne inserisca la descrizione, quindi setto la proprietà IsEnabled della TextBox a False. Teoricamente, avrei potuto inserire un solo trigger, con qualche giro di binding, ma sono andato in fumo e...proprio non ce la faccio: va bene così! :-)

Un piccolo screenshot è come al solito doveroso.

Adesso è piuttosto spartano, ma l'idea è questa. Le foto selezionate vengono uploadate sul sito indicato, usando username e password specificate, poi ne viene presa la descrizione, viene fatto il link ed il tutto viene restituito a WLW. Appena è pronto lo pubblico, credo che possa interessare un po' di gente. Stay tuned.

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (2) | Filed Under [ Sviluppo .NET ]

Optimization Day: video

Sono riuscito a rendere scaricabili 6 filmati dell'ultimo workshop. Eccoli qua sotto:

Davide e Janky : parte 1 (22Mb, 4:30 minuti)

Davide e Janky : parte 2 (12Mb, 2:10 minuti)

Davide e Janky : parte 3 (23Mb, 4:40 minuti)

Davide e Janky : parte 4 (24Mb, 4:55 minuti)

Raffaele : parte 1 (27Mb, 5:51 minuti)

Raffaele : parte 2 (29Mb, 5:45 minuti)

Non chiedetemi come mai siano così grandi, evidentemente ho sfruttato un po' poco la compressione DivX. Di Lorenzo non ho filmato nulla perchè ero troppo preoccupato su che cosa mi avrebbe fatto fare. Di Corrado non ho filmato nulla perchè ero troppo occupato ad ascoltarlo. :-)

I 6 video sono hostati sul mio dominio www.igordamiani.it: ditemi se c'è qualche problema. Occhio che i links puntano direttamente al file avi: se ci cliccate sopra normalmente parte il player. Vi conviene cliccare col destro e fare un bel "Save target as...". Buona visione!

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (2) | Filed Under [ Community ]

A tutti quelli che mi chiedono i video del workshop...

A quanto pare, gli unici video disponibili dell'ultimo workshop sono quelli che ho fatto io. Il problema è che i miei video non sono completi, per niente. Li ho fatti per puro spirito di cronaca, usando la mia fotocamera digitale, e non per documentare in modo serio le sessioni dei nostri amici relatori di UGIdotNET.

Questo lo preciso perchè ho già ricevuto 2-3 e-mail di soci UGI che vogliono il video di questo o di quello, e io non sono in grado di fornire il materiale. Quello che posso fare è mettere a disposizione quello che ho fatto, facendo scaricare gli zip dei video, ma questo lo potrò comunque fare questo pomeriggio o questa sera. Ma non aspettatevi granchè, eh!

L'unico video che è già on-line è quello della mia benedizione con l'acqua MVP, che è stato uploadato sabato mattina su YouTube, e che già oggi ha ricevuto un centinaio di visite. :-) Ma qui di roba seria non se ne vede l'ombra, tutta colpa di quel mattacchione del mio amico Lorenzo: <arrampicata_sugli_specchi>io stavo cominciando ad orientarmi su quella slide di quel software che non ho mai visto</arrampicata_sugli_specchi>.

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (0) | Filed Under [ Community ]

Migliaia di font gratuiti

Lo so che è un po' OT, ma mi capitava in passato di cercare font un po' particolari da usare nelle mie applicazioni o nei report. Il mio amico Davide segnala due siti che consentono il download di qualche migliaio di font gratuiti, da usare dove volete voi: credo che possano essere utili anche a voi.

Il primo è Font 500, il secondo Creamundo. Buona navigazione a tutti.

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (0) | Filed Under [ Tecnologia ]

Powered by:
Powered By Subtext Powered By ASP.NET