Sviluppo e sistema - Tecnologie dell'informazione e della comunicazione https://www.tmg.it/articoli-tecnici/sviluppo-e-sistema Sun, 28 Apr 2024 23:56:07 +0000 Joomla! - Open Source Content Management it-it Delphi: copy unicode HTML to clipboard https://www.tmg.it/articoli-tecnici/sviluppo-e-sistema/61-delphi-copy-unicode-html-to-clipboard https://www.tmg.it/articoli-tecnici/sviluppo-e-sistema/61-delphi-copy-unicode-html-to-clipboard

How to copy unicode HTML code to the clipboard in html format, so it can be pasted into Writer, Word etc.

Several articles show working code to copy an html structure to the clipboard registering as HTML Format (so it can be pasted in a word processor - rendered - instead of pasting the html code).

This is my small contribution, just changing slightly the works you find in references, to also support fully unicode text, i.e. cyrillic copy and paste.


procedure TPHTML.CopyHTMLToClipBoardUnicode(const str, htmlStr: string);

/// Attempting to get real unicode to work.
/// Альма матер, альма матер, легкая лаDдья.

/// Works fine with Delphi 2010+ and accepts unicode text. But if you try to copy Unicode
/// characters which do not have an ASCII representation, they will not be copied.

/// Riccardo Zorn www.tmg.it
///

//The second parameter is optional and is put into the clipboard as CF_HTML.
//Function can be used standalone or in conjunction with the VCL clipboard so long as
//you use the USEVCLCLIPBOARD conditional define
//($define USEVCLCLIPBOARD}
//(and clipboard.open, clipboard.close).
//Code from http://www.lorriman.com
// http://it.w3support.net/index.php?db=so&id=1114883


// If you've ever tried sticking html into the clipboard using the usual CF_TEXT
// format then you might have been disappointed to discover that wysiwyg html
// editors paste your offering as if it were just text,
// rather than recognising it as html. For that you need the CF_HTML format.
// CF_HTML is entirely text format and uses the transformation format UTF-8.
// It includes a description, a context, and within the context, the fragment.
//
// As you may know one can place multiple items of data onto the clipboard for
// a single clipboard entry, which means that the same data can be pasted in a
// variety of different formats in order to cope with target
// applications of varying sophistocation.
//
// The following example shows how to stick CF_TEXT (and CF_HTML)
// into the clipboard.

//The second parameter is optional and is put into the clipboard as CF_HTML.
//Function can be used standalone or in conjunction with the VCL clipboard so long as
//you use the USEVCLCLIPBOARD conditional define
//($define USEVCLCLIPBOARD}
//(and clipboard.open, clipboard.close).
//Code from http://www.lorriman.com

function FormatHTMLClipboardHeader(HTMLText: string): string;
const
CrLf = #13#10;
begin
Result := 'Version:0.9' + CrLf;
Result := Result + 'StartHTML:-1' + CrLf;
Result := Result + 'EndHTML:-1' + CrLf;

Result := Result + 'StartFragment:^^^^^^' + CrLf;
Result := Result + 'EndFragment:°°°°°°' + CrLf;

Result := StringReplace(Result, '^^^^^^', Format('%.6d', [Length(Result)*SizeOf(Char)]), []);

Result := Result + HTMLText + CrLf;
Result := StringReplace(Result, '°°°°°°', Format('%.6d', [Length(Result)*SizeOf(Char)]), []);
end;


var
gMem: HGLOBAL;
lp: PChar;
Strings: array[0..1] of UTF8String;
Formats: array[0..1] of UINT;
i: Integer;
begin
gMem := 0;
{$IFNDEF USEVCLCLIPBOARD}
Win32Check(OpenClipBoard(0));
{$ENDIF}
try
//most descriptive first as per api docs
Strings[0] := FormatHTMLClipboardHeader(htmlStr);
Strings[1] := str;
Formats[0] := RegisterClipboardFormat('HTML Format');
Formats[1] := CF_UNICODETEXT;
{$IFNDEF USEVCLCLIPBOARD}
Win32Check(EmptyClipBoard);
{$ENDIF}
for i := 0 to High(Strings) do
begin
if Strings[i] = '' then Continue;
//an extra "1" for the null terminator
gMem := GlobalAlloc(GMEM_DDESHARE + GMEM_MOVEABLE, (Length(Strings[i])+1)*sizeOf(Char));
{Succeeded, now read the stream contents into the memory the pointer points at}
try
Win32Check(gmem <> 0);
lp := GlobalLock(gMem);
Win32Check(lp <> nil);
CopyMemory(lp, PChar(Strings[i]), (Length(Strings[i])+1)*sizeOf(Char));
finally
GlobalUnlock(gMem);
end;
Win32Check(gmem <> 0);
SetClipboardData(Formats[i], gMem);
Win32Check(gmem <> 0);
gmem := 0;
end;
finally
{$IFNDEF USEVCLCLIPBOARD}
Win32Check(CloseClipBoard);
{$ENDIF}
end;
end;

 

References:

Torry, working version in non-unicode Delphis

http://www.swissdelphicenter.ch/torry/showcode.php?id=1391

StackOverflow, working version in D2009 with no unicode support

http://stackoverflow.com/questions/1114883/how-do-i-put-some-formatted-text-into-the-clipboard

Using the clipboard (MSDN)

http://msdn.microsoft.com/en-us/library/ms649016%28v=VS.85%29.aspx#_win32_Registering_a_Clipboard_Format

CF_HTML

http://msdn.microsoft.com/en-us/library/aa767917%28v=vs.85%29.aspx

Delphi Unicode migration tips

http://edn.embarcadero.com/article/38693

 

 

]]>
ads@tmg.it (Administrator) Sviluppo & sistema Mon, 27 Jun 2011 17:25:36 +0000
Cambiare il disco del macbook pro unibody https://www.tmg.it/articoli-tecnici/sviluppo-e-sistema/56-cambiare-il-disco-del-macbook-pro-unibody https://www.tmg.it/articoli-tecnici/sviluppo-e-sistema/56-cambiare-il-disco-del-macbook-pro-unibody

In questa breve guida elenco i passi necessari per cambiare il disco rigido di un macbook Pro unibody, il modello distribuito dal giugno 2009.

Materiale necessario: un hard disk (vedi sotto punto 1), un cacciavite philips 00 (croce super piccolo); uno torx T-6. Entrambi sono minuscoli, non usate altro, specialmente per quello a croce altrimenti finirete per rovinare le viti.  Caldamente consigliato un contenitore per le viti.

Caveat: Aprire un macbook pro invalida la garanzia

Difficoltà: Medio-Bassa. Se avete cambiato un disco ad un portatile qualunque non avrete difficoltà con questo; se non l'avete mai fatto, magari aiutatevi con una guida video o foto cercate su youtube.

Pazienza: Medio alta. La procedura può richiedere un'ora oltre il tempo necessario a trasferire i dati; è richiesta precisione

1. La prima cosa da fare è scegliere un disco compatibile, grossomodo qualunque modello SATA da 9mm di spessore (anche detti metà spessore) va bene, potete consultare questo sito per una lista di dischi sicuramente compatibili dal sito myOWC

2. Assicuratevi di poter connettere il nuovo disco al computer, la soluzione più economica, da 10 a 15 euro, è un cassettino USB 2.5" SATA nel quale alloggerete il vostro nuovo disco.

3. Ora inserite il disco di installazione Mac OSX 10.x fornito con il portatile e riavviate tenendo premuta la lettera "C" sulla tastiera.

4. Al boot verrà avviato il programma di installazione di Mac OSX; dopo aver scelto la lingua, dal menù Utility scegliete Disk Utility e formattate il nuovo disco, avendo cura di specificare un nome distintivo: quindi premete Erase/Cancella; al termine della formattazione uscite da Disk Utility.

5. Procedete ad installare Mac OSX dal dvd sul nuovo disco (quello connesso via USB e appena formattato); dopo aver finito l'installazione seguite le istruzioni per importare i dati della precedente installazione.

6. A questo punto spegnete il computer e sostituite il disco. Basta

  • svitare le 10 viti dietro; quelle in corrispondenza della griglia di ventilazione sul retro sono più lunghe; le altre sono lievemente inclinate, quindi inclinate il cacciavite per non danneggiarle.
  • sollevare delicatamente il pannello di alluminio; questo ha tre ritenzioni, due meccaniche in plastica ed una adesiva, sollevandolo con dolcezza si libereranno rapidamente
  • smontate il braccetto nero antiurto del disco, rimuovete delicatamente il connettore del vecchio disco
  • spostate i supporti laterali del disco con il cacciavite torx sul nuovo disco
  • a questo punto prendete un aspirapolvere e date una ripulita, sicuramente le ventole ne saranno felici. Non fate toccare la bocchetta dell'aspirapolvere, una botta minima e si rovinano subito le ventole. Fatele girare un po'. Se avete una pistola ad aria compressa, uscite in terrazza e abusatene
  • rimontate il disco, fissate il braccetto, riassemblate il fondo di alluminio

7. Accendete il computer. Per prima cosa fate un aggiornamento del sistema operativo.

8. Montate il vecchio disco nel cassettino USB e - quando sarete sicuri che i vostri dati sono tutti al loro posto - usatelo come disco di trasporto; oppure conservatelo, contiene un backup completo del vostro sistema che può sempre tornare utile.

Nota bene: secondo la licenza Apple cambiare il disco invalida la garanzia.

E la memoria?

Già che ci siete, prendete pure un po' di RAM... non fa mai male. Una volta aperto il coperchio cambiare la ram richiede solo un istante.

]]>
ads@tmg.it (Administrator) Sviluppo & sistema Wed, 20 Apr 2011 06:07:26 +0000
Un webserver sul mio mac per sviluppare PHP https://www.tmg.it/articoli-tecnici/sviluppo-e-sistema/55-un-webserver-sul-mio-mac-per-sviluppare-php https://www.tmg.it/articoli-tecnici/sviluppo-e-sistema/55-un-webserver-sul-mio-mac-per-sviluppare-php

Obiettivo: installare Joomla, phpMyAdmin, mySQL, eclipse versione PHP su mac OSX 10.6 con la minima configurazione possibile.

Insieme a mySQL è utile uno strumento di gestione, ho indicato sia come installare MySQL Workbench che phpMyAdmin, si può usare l'uno o l'altro (o entrambi)

MySQL

Installazione

Vai su http://www.mysql.com/downloads/mysql/ scarica la versione Community Edition (quella gratuita) Mac OS X ver. 10.6 (x86, 64-bit), DMG Archive. /

Apri il DMG, all'interno trovi il pacchetto di installazione e il pannello per le preferenze, installa entrambi.

Ora bisogna configurare mysql, con il file /etc/my.cnf

Un buon inizio è nella distribuzione di mysql, /usr/local/mysql/support-files/my-small.cnf

Quindi copia quel file su /etc/my.cnf, poi modificalo: l'unica modifica necessaria è se vuoi usare innodb (come me), cerca la apposita sezione e rimuovi i commenti come indicato:

# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = /usr/local/mysql/data
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /usr/local/mysql/data
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

I percorsi sono già inseriti quindi non ci vuole molto. Salva.

Dalle preferenze di sistema apri Altro -> mySQL e avvialo.

Workbench

Creare una password, un database e caricare dati

Ora scarica http://dev.mysql.com/downloads/workbench/5.2.html MySQL Workbench, ed eseguilo.

Nel box di destra "Server Administration" premete New Server Instance, una wizard vi guiderà a configurare l'istanza. Connettetevi a localhost oppure 127.0.0.1

L'utente root di default non ha password, ma una volta entrati sulla connessione premete Server Administration, e dentro accounts create una password.

Potete quindi procedere a caricare i dati, ma voglio installare anche phpMyAdmin per questo, quindi procediamo con

phpMyAdmin

Dal sito http://www.phpmyadmin.net/home_page/downloads.php scaricate la versione "all languages" in qualunque formato compresso; se avete "the Unarchiver" oppure "PathFinder" non sarà difficile decomprimerli, altrimenti prendetevi un tar.gz o uno zip che li legge anche il Finder.

Esplodetelo nella cartella /Library/WebServer/Documents/phpMyAdmin quindi modificate il file di configurazione /Library/WebServer/Documents/phpMyAdmin/config.inc.php

Questi sono i parametri più semplici; occhio a mettere l'host numerico altrimenti usando localhost c'è un'alta probabilità di ricevere l'errore 2002: #2002 - The server is not responding (or the local MySQL server's socket is not correctly configured)

$cfg['Servers'][$i]['auth_type'] = 'http';
/* Server parameters */
$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['extension'] = 'mysql';
// Quest'ultimo parametro è necessario se non hai usato workbench per assegnare una password all'utente root:
$cfg['Servers'][$i]['AllowNoPassword'] = true;

Ora prova a connetterti:

http://localhost/phpMyAdmin e dopo aver inserito il login root con la password creata in workbench dovresti vedere phpMyAdmin

Crea un database ed un utente per Joomla

Joomla

A questo punto siete pronti per installare Joomla; se desiderate installarlo nella root (ovvero in modo che risponda a http://localhost) copiate i file di installazione su /Library/WebServer/Documents e avviate l'installazione da http://localhost altrimenti metteteli in una sottocartella e avviate l'installazione da http://localhost/sottocartella

Eclipse

Ora però se vogliamo sviluppare qualcosa sarà il caso di usare uno strumento più evoluto di TextEdit o TextWrangler, diciamo qualcosa come eclipse farebbe al caso nostro.

http://www.zend.com/en/community/pdt

Scarica, esplodi ed esegui... non serve far altro.

SVN

Ho parlato di sviluppo? Beh come minimo mi servirà un subversion server altrimenti rischio di diventare matto.  Possiamo usare SVN da eclipse quindi non dobbiamo preoccuparci del fatto che su mac osx non esiste un client free bello come tortoise per windows, ma http://www.syncrosvnclient.com/ val bene una menzione (a pagamento).

Per installare il server, vi rimando all'uso di fink (http://www.devdaily.com/blog/post/mac-os-x/installing-subversion-svn-server-on-mac-os-x/ )

 

]]>
r.zorn@tmg.it (Riccardo Zorn) Sviluppo & sistema Fri, 25 Feb 2011 16:00:14 +0000
comandare DvdPlayer della Ellion 350H - una panoramica completa https://www.tmg.it/articoli-tecnici/sviluppo-e-sistema/54-comandare-dvdplayer-della-ellion-350h-una-panoramica-completa https://www.tmg.it/articoli-tecnici/sviluppo-e-sistema/54-comandare-dvdplayer-della-ellion-350h-una-panoramica-completa

I media player Ellion 351H, 350H e affini (inclusi medley, EMTEC N200, Emtec S800, Emtec HMR-351H, O2Media HMR-351N, Markus 750, Medley 2+, Medley 3, O2Media) offrono funzionalità di televisione digitale, player multimediale, con possibilità di connettere dischi SATA, USB e via rete. Il programma DvdPlayer della Realtek (closed source) provvede al funzionamento delle unità.

Obiettivo: Estendere il funzionamento della Ellion permettendo:

  1. di emulare il telecomando via telnet o meglio via web
  2. di avviarla senza il menù amministrativo aperto (ovvero all'accensione visualizza l'ultimo canale DV visualizzato)
  3. di controllare l'unità via web: sostituendo il file browser con uno web-based con funzioni di ricerca.

1. Telecomando Web per il player Ellion HMR 351H e affini.

Questa parte riguarda una personalizzazione del Emtec N200 Web Remote Control, un telecomando via web, modificato per essere compatibile con il firmware della Ellion, e aggiungendo alcuni tasti non previsti.

Inoltre ho aggiunto una funzione "info" con i credits e con una funzione per testare l'invio di comandi (ancora manca il comando per il tasto NET e altri tasti, da qui si possono inviare i comandi).

Nella distribuzione è inclusa anche una sottocartella con alcuni script amministrativi che mi sono stati utili per capire come funziona DvdPlayer.

1.1 Distribuzione Ellion HMR 351H

il file /usr/local/bin/DvdPlayer comanda il funzionamento dell'unità.

Il programma stopall permette di fermare tutte le istanze del programma DvdPlayer.

Avviando DvdPlayer da console si possono inviare diversi comandi: riporto un elenco quasi completo preso dal post di nicorac su ziogeek:

 

 
-------------------------------------------------
a - audio button
b - takes you into the recording setup screen
c - delete schedule when in recording, otherwise doesn't appear to do anything
f - reverse play <<
j - reverse zoom (starts at max zoom and goes back to 1)
l - slow play reverse
m - mute on/off
n - skip to next title (not chapter)
o - Shut down quickly
p - skip to prior title (not chapter)
q - go back 10 SECONDS
r - start recording / switch to av
s - subtitle toggle
v - volume -
z - normal zoom

A - left
B - 30 Second Skip
C - Command Line interpreter, engineering mode, see below
D - right
E - Delete
F - Fast forward >>
G - Asks for GCode. Not sure what the GCode is. Tried a VCR+ code given the context,
but the code I tried only crashed the player.
H - report some kind of status
L - slow play forward
M - Menu
N - Next chapter
O - shut down normally
P - Prior chapter
Q - Stop
S - Play
T- AV input screen
V - volume +
W - up
X - down
Z - Step / pause

- - goto
= - repeat a/b
+ - repeat button

# - go to USB screen
$ - go to REC directory
& - graphical file copy, looks nice.
Much better than the cut/copy/paste concept you can do from the remote.
( - start performance logging
) - stop performance logging
~ - memory allocation status
0-9 - same as entering 0-9. Jumps to title. I did not know you could jump to a
specific title that way on this player, so something new.

[ - source button
] - go to ScreenPlay Pro root drive
{ - home button
, - return button
/ - go to setup menu
\ - switch tv system
: - switch tv system (not sure how it is different from \)
@ - DV (videocamera control)

ESC - Go to setup menu

In engineering mode, you can type HELP and get this:
(Switch to engineering mode with command C, see above )

Engineering Mode Command List:
port: read or write value to specified address
setdebug: set audio/video debug flag
setbri : set Video In Brightness value (00~ff)
setcont : set Video In Contrast value (00~ff)
setsatu : set Video In Saturation value (00~ff)
sethue : set Video In Hue value (00~ff)
setscal : set the coefficients of VIN Scaling (0x10
00~0xFFFF)
setcolorm
: set VO hardware's Color Adjustment transformation matrix
copyfree: enable copy-free
netperf : Enable network performance meter. Use on or o
ff to tern on/off this feature
netperf nodecode, means streaming only withou
t decode.
setyc: set YC separation parameters [6 parameters]
| save: save setting
| load: load setting
| default: use factory default setting
| show: show current setting
shell: Unix Shell to execute unix command
kill: kill the program immediately (to generate coredump)
quit: quit from command line interpreter
-------------------------------------------------

1.2 Telecomando IR

Questi comandi sono ben diversi dai codici inviati dal telecomando; la periferica che riceve i codici dal telecomando è /dev/venus_irrp e si può leggerla con

cat /dev/venus_irrp

oppure con un batch più completo:

#! /bin/sh
echo ""
echo "Remote Control Dump for Ellion HMR 350, 351H, plus N200, Medley etc"
echo " Below you can see all remote control codes as the keys are pressed"
echo " i.e. this is the sample output for the \"mute\" key:"
echo ""
echo " Processo:"
echo " 0000000 f708 a55a 000a "
echo " 0000005"
echo ""
echo ""
echo " You can use ./telecomando_chrhex.cgi to test parameters as you read them
echo " i.e."
echo ""
echo " ./telecomando_chrhex.cgi f7 08 a5 5a 00 0a \>\> /tmp/command_sender.
echo ""
echo " for the example above, muting the audio."
echo ""
echo "------------------- Remote control: hex dump --------------------"
irfile=/tmp/irfile
cat /dev/venus_irrp > $irfile &

bincode=nocode
while [ -f $irfile ]
do
bincode=$(tail -c 4 $irfile)

if [ -n "${bincode}" ]
then
if [ "${bincode}" != "${oldbincode}" ]
then
oldbincode=$bincode
echo Processo:
echo $bincode | hexdump
fi
fi
usleep 10
done
exit 0

Basta ora premere un tasto sul telecomando per vedere il codice inviato.

Output di esempio:

 

-----------------------------------------------------------------------------
Remote Control Dump for Ellion HMR 350, 351H, plus N200, Medley etc
Below you can see all remote control codes as the keys are pressed
i.e. this is the sample output for the "mute" key:
Processo:
0000000 f708 a55a 000a
0000005

You can use ./telecomando_chrhex.cgi to test parameters as you read them below:
i.e.
./telecomando_chrhex.cgi f7 08 a5 5a 00 0a \>\> /tmp/command_sender.txt
for the example above, muting the audio.
------------------- Remote control: hex dump --------------------

1.3 Il telecomando di adicon, esteso per la Ellion

Adicon ha scritto un telecomando per il modello N200, utilizzando lo STDIN di DvdPlayer.

Per farlo basta avviare DvdPlayer reindirizzando lo STDIN da un file arbitrario /tmp/command_sender.txt:

tail -f /tmp/command_sender.txt DvdPlayer


quindi sarà sufficiente inviare i comandi al file /tmp/command_sender.txt , per esempio:

echo "m" > /tmp/command_sender.txt 

per mettere in mute.

1.3.1 Avvio automatico

E' necessario modificare lo script di avvio della console perché ad ogni riavvio il programma DvdPlayer parta con l'input reindirizzato:

/usr/local/etc/rcS

Aggiungere il testo in rosso:

if [ -f $DEFAULT_AP_DIR/DvdPlayer ] && [ -x $DEFAULT_AP_DIR/DvdPlayer ]; then
cd $DEFAULT_AP_DIR
rm /tmp/command_sender.txt
touch /tmp/command_sender.txt

if [ -f $DEFAULT_AP_DIR/RootApp ] && [ -x $DEFAULT_AP_DIR/RootApp ]; then
echo Running dvdplayer with RootApp
tail -f /tmp/command_sender.txt | ./RootApp DvdPlayer -s RTC &
else
echo Running dvdplayer
tail -f /tmp/command_sender.txt | ./DvdPlayer -s RTC &
fi
else
/usr/local/etc/dvdplayer/script/run_tail
fi

1.3.2 Il telecomando

Ho modificato di poco lo script del telecomando per includere alcuni tasti che non sono presenti sul telecomando.

Purtroppo sia dalla lista sopra che dal telecomando della N200 manca il codice per LAN, che non sono riuscito a trovare; purtroppo i codici di scansione non seguono alcun ordine logico, usano i caratteri da 32 a 127 ma nessuno di questi mi ha dato la funzionalità LAN/NET.

Il dispositivo Ellion dispone di un server web il cui contenuto di fabbrica è sostanzialmente inutile; in queste condizioni si può installare nella root; altrimenti creare una cartella.

Io ho HDMediaServices installato per la gestione dei servizi SAMBA e FTP; diversamente dovrete modificare la installazione in /tmp_orig.

Per installarlo nella cartella /remote ecco i comandi:

(presuppongono che l'installazione d

Per installarlo, digitare:

cd /tmp
echo nameserver 208.67.222.222 > /etc/resolv.conf
wget http://www.tmg.it/files/remote/install.sh
chmod a+x install.sh
./install.sh

L'installazione effettua poi un reboot automaticamente.

Ad ogni avvio (/usr/local/etc/rcS) copia la cartella /tmp/hdd/volumes/HDD1/Applications/Web su /var/www

(L'installazione originale modificava /tmp_orig/ ma sulla ellion non si monta il filesystem di root facilmente in rw).

Ora è possibile accedere al telecomando dall'indirizzo http://ip_ellion/remote

 

2. Avvio automatico su TV

Non so per quale motivo la Ellion parta sempre con il menù amministrativo aperto.

Basta modificare nel file /usr/local/etc/rcS la stringa di avvio

DvdPlayer

e modificarla in

DvdPlayer -s RTC

3.Controllo completo da web

I limiti del telecomando sono la necessità di guardare il televisore per capire in che menù ci troviamo, e la carenza di funzionalità avanzate in particolare la ricerca.

Controllare l'unità via web: sostituendo il file browser con uno web-based con funzioni di ricerca sarebbe molto comodo... le pagine con gli indici possono essere rigenerate manualmente, e si può raffinare le funzioni di ricerca e visualizzazione a piacimento.

Purtroppo non ho trovato modo di inviare al DvdPlayer un nome di file da riprodurre; e quindi questa funzionalità naufraga sul nascere.

4.Cosa manca?

Scoprire il codice da inviare per emulare il tasto NET del telecomando.

Nota: E' possibile utilizzando il sistema di emulazione del telecomando conoscere il codice corrispondente al tasto NET usando la procedura indicata sopra al punto 1.2. dalla periferica /dev/venus_irrp ; tuttavia non è chiaro dove si possano inviare questi comandi, certo si potrebbe sostituire il /dev/venus_irrp con un programma apposito nel quale iniettare i codici corrispondenti a NET: ma vediamo prima se si trova il codice da usare con il sistema corrente (giusto per non complicarci eccessivamente la vita)

5. Risorse

Pagina originale del telecomando Web di adicon per la N200

http://adicon.lahost.org/2010/01/07/emtec-n200-web-remote-command/

HDMedia Services (controllo SAMBA FTP Torrent ecc.)

http://ziogeek.com/forum/sviluppo-software-open-source/hdmedia-services-installazione-win-mac-linux-vt1701.html

Telecomando IR sostitutivo per la Ellion:

http://www.hwupgrade.it/forum/showpost.php?p=30479663&postcount=340

 

]]>
r.zorn@tmg.it (Riccardo Zorn) Sviluppo & sistema Sun, 17 Oct 2010 10:54:21 +0000
SSH senza password? https://www.tmg.it/articoli-tecnici/sviluppo-e-sistema/53-ssh-senza-password https://www.tmg.it/articoli-tecnici/sviluppo-e-sistema/53-ssh-senza-password

Se amministri molti server può esserti utile automatizzare le procedure di login e copia degli aggiornamenti. Per far questo è necessario configurare il sistema per utilizzare una coppia di chiavi RSA o DSA invece della password.

Se la comunicazione già richiede l'autenticazione con chiavi riceverete l'errore Permission denied (publickey) tentando di loggarvi.

Per poter effettuare questa configurazione è necessario poter scrivere nella cartella del server /Users/NomeUtente/.ssh

1. Creo una coppia di chiavi sul mio computer

Dovrò scegliere l'algoritmo da utilizzare, DSA ha lunghezza fissa di 1024, mentre RSA è configurabile con un default di 2048; quindi è più sicuro utilizzare una chiave RSA.

ssh-keygen -b 1024 -t dsa

oppure

ssh-keygen -b 4096 -t rsa

quindi premere invio (accettando quindi i defaults) finché non esce dal programma. L'output indicherà il percorso della chiave pubblica:

ptah:~ ric$ ssh-keygen -b 1024 -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/ric/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/ric/.ssh/id_rsa.
Your public key has been saved in /Users/ric/.ssh/id_rsa.pub.
The key fingerprint is:

A questo punto nel file /Users/ric/.ssh/id_rsa (sostituite ric con il vostro username) avrete la vostra chiave pubblica e la chiave privata sarà stata installata automaticamente.

2. Copio la chiave sul server

Potete copiarla come vi pare, per esempio, se avete già accesso SSH:

scp /Users/ric/.ssh/id_rsa.pub serveraddress:

quindi aprite una sessione SSH verso il server e (per chiavi RSA)

cat id_rsa.pub >> /Users/user/.ssh/authorized_keys

oppure, per chiavi DSA:

cat id_dsa.pub >> /Users/user/.ssh/authorized_keys2

Per poterla usare sul server dovrete copiarla alla fine del file /Users/ric/.ssh/authorized_keys (chiavi RSA) oppure /Users/ric/.ssh/authorized_keys2 (chiavi DSA)

3. Mi collego

A questo punto è possibile una sessione SSH crittografata con le chiavi appena create.

Attenzione: fate sempre un backup di ogni coppia di chiavi in un posto sicuro: le chiavi dei server tendono ad accumularsi, e a volte non si usano per anni; una buona misura di sicurezza è disabilitare l'accesso in mancanza di chiavi valide: in tal caso potreste restare tagliati fuori in caso doveste smarrirle.

4. Restringo l'accesso ad ssh agli utenti che abbiano una chiave valida registrata

Ora è possibile "indurire" un po' di più il server, limitando l'accesso agli utenti che abbiano una chiave valida; la configurazione è nel file

 /etc/ssh/sshd_config
]]>
r.zorn@tmg.it (Riccardo Zorn) Sviluppo & sistema Thu, 30 Sep 2010 08:13:49 +0000
La macchina da scrivere https://www.tmg.it/articoli-tecnici/sviluppo-e-sistema/43-la-macchina-da-scrivere https://www.tmg.it/articoli-tecnici/sviluppo-e-sistema/43-la-macchina-da-scrivere

Il 98% degli utenti di programmi di videoscrittura non ha ben chiara la differenza tra una macchina da scrivere e un wordprocessor

In particolare l'uso di due spazi adiacenti è accettabile solo dopo il ".", dopo il "!" e dopo il "?" se segue un'altra frase.

Non si può usare per fare tabelle.

Questo video spiega come fare a creare un documento complesso con indici e struttura di livelli per i capitoli con la minima fatica evitando gli errori più triviali.

]]>
r.zorn@tmg.it (Riccardo Zorn) Sviluppo & sistema Thu, 30 Oct 2008 18:24:37 +0000
Trucchetti Javascript https://www.tmg.it/articoli-tecnici/trucchetti-javascript https://www.tmg.it/articoli-tecnici/trucchetti-javascript

Lo sapevi che In tutti i browser è possibile inserire direttamente nella barra dell'indirizzo del codice javascript?

Il javascript può esserci utile per divertimento principalmente; ma anche per lavoro.

Divertimento

(First things first)

Aprite una pagina con un po' di immagini, quindi digitate nella barra dell'indirizzo:

 

javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.getElementsByTagName(%22img%22); DIL=DI.length; function A(){for(i=0; i-DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=(Math.sin(R*x1+i*x2+x3)*x4+x5)+%22px%22; DIS.top=(Math.cos(R*y1+i*y2+y3)*y4+y5)+%22px%22}R++}setInterval('A()',50); void(0);

 

Divertente, vero?

Oppure, aprite una pagina di un giornale e poi scrivete nella barra degli indirizzi:

javascript: document.body.contentEditable = 'true'; document.designMode = 'on'; void 0  

A questo punto, cliccate qualunque testo sullo schermo e iniziate a modificarlo...

Nota bene: qualunque istruzione deve sempre terminare con void 0, altrimenti il browser aprirà una pagina vuota per eseguire la funzione.

Lavoro

Beh questa è più dura. Trovare una utilità vera è più difficile...

Per esempio si può rendere cliccabile o selezionabile un sito che non lo permette:

Le tecniche per evitare di far selezionare testo o cliccare con il tasto destro sono varie, ma di solito si riducono nel funzionamento all'assegnamento di un paio di funzioni:

document.oncontextmenu=new Function("return false")
document.onselectstart=new Function("return false")

Sia che queste funzioni siano definite in-line, sia che siano definite altrove all'interno dello script, per ripristinare il normale funzionamento basta rimuovere l'assegnazione agli eventi:scriviamo quindi nella barra degli indirizzi:

javascript:document.oncontextmenu=null;document.onselectstart=null;void 0;

eBay Sniper

]]>
r.zorn@tmg.it (Riccardo Zorn) Sviluppo & sistema Sun, 14 Sep 2008 08:36:26 +0000
Decalogo del Javascript facile da manutenere https://www.tmg.it/articoli-tecnici/decalogo-del-javascript https://www.tmg.it/articoli-tecnici/decalogo-del-javascript

Javascript è un linguaggio sempre più usato per scrivere applicazioni complesse.

Tuttavia la sua enorme versatilità fa sì che spesso il codice diventi un incubo da manutenere.


Il costo sopportato dalle aziende per la sola manutenzione del software rappresenta l'80% mentre lo sviluppo di nuovo codice solo il 20%. Questo significa che anche se investiamo il doppio del tempo per scrivere codice più facile da manutenere, siamo destinati a trarne comunque enormi benefici più avanti.


Scrivere codice manutenibile vuol dire scrivere codice di qualità. Codice che sia in primo luogo semplice da comprendere (tramite commenti e indentazione), e semplice da manutenere, ovvero facilmente modificabile, estensibile, e debuggabile (tramite un uso sapiente di oggetti ed errori)

 

Uso personalmente Javascript in una applicazione con 9 oggetti, per un totale di poco meno di cinquemila righe, con due client separati che utilizzano integralmente la stessa logica, dalle stesse librerie javascript. L'applicazione è spesso soggetta a richieste di modifiche da parte dell'utente; dopo 6 anni di vita, posso consigliare le pratiche migliori da adottare sul campo; e dopo aver visto l'intervento di Nicholas Zakas sulla manutenibilità del codice, ho deciso di pubblicare in italiano le mie considerazioni, unite alle sue, corredandole di esempi di codice.

Nessuna di queste indicazioni vuol essere un dogma; tuttavia prendetele in considerazione sempre prima di operare una scelta diversa.

 

]]>
r.zorn@tmg.it (Riccardo Zorn) Sviluppo & sistema Sat, 13 Sep 2008 19:11:37 +0000
Apache + .exe cgi on windows slowdown after december 2006 https://www.tmg.it/articoli-tecnici/sviluppo-e-sistema/23-apache--exe-cgi-on-windows-slowdown-after-december-2006 https://www.tmg.it/articoli-tecnici/sviluppo-e-sistema/23-apache--exe-cgi-on-windows-slowdown-after-december-2006

Symptoms: Your application slowed down by two - three seconds after december 2006.

Our test environments:

  • Threaded .exe cgi running on apache 1.3 or 2.0
  • Threaded .dll cgi running on apache 1.3 or 2.0
  • Stand-alone C++ windows application compiled with BCC

Problem description:

The windows socket function GetHostByName for some unknown reasons was slowed down after a KB update microsoft put out in december 2006.

Systems affected:

Only windows XP Home 

Solution:

None known

Workaround:

Cache that info! I create a thread upon application startup or initialization, that returns the value asynchronously.  IP and network name are not subject to change too often.

]]>
r.zorn@tmg.it (Riccardo Zorn) Sviluppo & sistema Wed, 07 Mar 2007 20:39:22 +0000
una VPN gratis https://www.tmg.it/articoli-tecnici/sviluppo-e-sistema/13-una-vpn-gratis https://www.tmg.it/articoli-tecnici/sviluppo-e-sistema/13-una-vpn-gratis

Chi non ha mai desiderato una VPN?

Hai mai avuto bisogno di accedere a file o servizi su computer che si trovano in un'altra sede?

Cosa è una VPN?

Una VPN = Rete privata virtuale altro non è se non un'estensione logica della tua rete locale che sfrutta in maniera misteriosa* un tunnel sicuro per farti vedere computer remoti come se fossero locali (anche se più lentamente).

Quanto mi costa tutto ciò?

Fino a ieri? un bagno di sudore di un sistemista bravo, oppure bei soldoni in licenze o account web 

Oggi? Un po' di pazienza. Non servono grandi conoscenze informatiche, e in 15 minuti puoi tirare su una rete virtuale gratuita che funzionerà a vita. Peccato che domani tu debba reinstallare windoz :-(

Cosa mi serve?

Due computer connessi ad internet in qualunque modo, anche in sedi diverse (ma non necessariamente)

E allora come procedo?

Leggi il resto dell'articolo per saperlo

 

 

]]>
ads@tmg.it (Administrator) Sviluppo & sistema Wed, 18 Oct 2006 14:49:20 +0000