Google Website Translator Gadget

Mostrando entradas con la etiqueta Example. Mostrar todas las entradas
Mostrando entradas con la etiqueta Example. Mostrar todas las entradas

miércoles, 10 de septiembre de 2014

Mozilla Firefox: Tancar la darrera pestanya sense que es tanqui el navegador

Mozilla Firefox logo
Mozilla Firefox

Tancar la darrera pestanya sense tancar el navegador

Tots els navegadors han anat incorporant una funcionalitat(?) que consisteix en tancar el navegador automàticament quan la darrera pestanya ("tab") es tanca.

Potser aquesta "millora" va molt bé en alguns entorns, però que passa si t'interessa mantenir-ho obert?

Tot i que segons les diferents tendències sembla que Firefox va perdent mercat davant Chrome, aquí tens, pas a pas, com fer-ho pel cas de Mozilla Firefox (verificat amb versió 31.0).


Acció
Anar a la barra d'adreces.
Escriure:
about:config

Sortirà un avís d'alerta. Acceptar.
Filtrar per:

close
Baixar fins:

browser.tabs.closeWindowWithLastTab

botó dret, "Commuta"

ha de quedar com a "false"

IMPORTANT!!!

Reinicia Firefox, no tanquis la pestanya perquè desfarà els canvis.

miércoles, 20 de agosto de 2014

WinSCP: Transferència SFTP automatitzada

WinSCP logo
WinSCP
La transferència de fitxers en entorn Windows a través de entorn gràfic es pot fer amb WinSCP, Filezilla i molts altres clients disponibles; però a l'hora d'automatitzar aquesta transferència WinSCP es, sinó la millor, de les millors eines que pots trobar.

La darrera versió publicada es la 5.5.4 (2014-06-10)

Per a mostra, diferents comandes que poden ser útils a l'hora de preparar un scripting bàsic:

Scripting WinSCP

AccióExemple
Enviament de fitxer amb renombrat a destí
put Clients.DAT Clients.TXT
activació de transferència ASCII o binary
option transfer ascii
canvi de permisos a destinatari
chmod 777 EXEMPLE.DAT
Es important gestionar correctament l'intercanvi de signatures.
open ..... -hostkey="ssh-rsa 2048 ff:33:ff:44:cc:22:dd:bb:99:99:66:11:22:33:44:55"
enviament opcional:

When specific file name is used, command fails when the file does not exist. When wildcard is used, command succeeds, without doing anything, if the wildcard does not match any file
from: Put: Remarks
# Executo un enviament múltiple
put EXEMPLE*.DAT
get REBO*.TXT



Enllaços relacionats:




miércoles, 6 de agosto de 2014

Java 7: Enum Class

Java logo
java.com
Una de les coses més interessants que te Java son les classes Enum.

Les classes Enum son un tipus específic de classes que permeten acotar i definir els valors que pot tenir una variable.
La avantatge addicional que proporciona Java es que pots afegir  mètodes per a treballar amb elles, com per exemple:

Mètode
.values()Permet recorrer tota la llista de valors de la class Enum.
"...method that returns an array containing all of the values of the enum in the order they are declared..."
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,THURSDAY, FRIDAY, SATURDAY
}


for (Day dia_setmana : Day.values()) {
System.out.printf("El teu dia es:",dia_setmana);
}
toString()Retorna el text de la ennumeració.
Creació amb valorsAl crear un Enum, es pot assignar automàticament els valors.
En aquest cas cal afegir un constructor privat de la classe.
public enum Planet {
MERCURY (3.303e+23, 2.4397e6),
VENUS (4.869e+24, 6.0518e6),
EARTH (5.976e+24, 6.37814e6),
MARS (6.421e+23, 3.3972e6),
JUPITER (1.9e+27, 7.1492e7),
SATURN (5.688e+26, 6.0268e7),
URANUS (8.686e+25, 2.5559e7),
NEPTUNE (1.024e+26, 2.4746e7);

private final double mass; // in kilograms
private final double radius; // in meters


// CONSTRUCTOR ADDICIONAL
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}

...
for (Planet p : Planet.values()) {
System.out.printf("Your weight on %s is %f%n",
p, p.surfaceWeight(mass));
}

Enllaços relacionats:



miércoles, 23 de julio de 2014

Oracle: Optimització SELECT amb LIKE, UPPER i PrepareStatement

www.oracle.com

Optimització SELECT, LIKE, UPPER, PrepareStatement

Quan comences a treballar en un projecte, es bó anar anotant totes aquelles millores que poden ser incloses a la següent versió.
Una de les més habituals es l'optimització de les sentències d'accés a BB.DD. (i possiblement de tot el disseny de la BB.DD), que si no poden ser optimitzades en una primera instància, caldrà revaluar-les a posteriori.

Al següent enllaç he trobat informació força interessant sobre una sèrie de punts a tenir en compte per a diverses BB.DD. com Oracle, MySQL, SQL Server.
PasExemple
Crear la sentència amb UPPER
SELECT first_name, last_name, phone_number
FROM employees
WHERE UPPER(last_name) = UPPER('Rincewind')
Crear un índex sobre el camp amb UPPER
FBI - Function Based Index
CREATE INDEX emp_up_name
ON employees (UPPER(last_name));
Coordinar amb el Database Manager la actualització de les estadístiques (DBMS_STATS)Per defecte els FBI no s'utilitzen per al càlcul del execution plan.
Consulta a Oracle algunes altres advertències com, per exemple, incidències amb les funcions.Oracle Database cannot convert data in all cases, even when conversion is explicitly requested.
En el cas de PrepareStatement es important tenir en compte:
- El ? ha de estar sense cometes.
- Les cometes s'afegeixen al assignar la variable

sql_inst="SELECT * FROM C01001 WHERE UPPER(DESCRIPTION) LIKE ? ";
...
stmt.setString(1, "%"+Bean.getDescription().toUpperCase()+"%");

Nota: Per al cas de SQLServer, el procediment difereix una mica, consulltar l' article complert per a obtenir més informació.



Enllaços relacionats:




miércoles, 16 de julio de 2014

La web per a mòbils: JavaScript (JS)

JS logo
www.w3.org-script
JavaScript es un dels components bàsics de la Web per a mòbils i en general del augment de usabilitat de les pàgines Web, per tant es molt recomanable fer un curs prou profund per a entrar en detalls interns del llenguatge per a treure-li tot el rendiment que permet.

Donat que no em considero un especialista en programació, i potser en cap altre cosa més, aquí deixo alguns dels punts més interessants per a estudiar d'aquest llenguatge.

Els punts més interessants de les funcions JavaScript

ConcepteOpcions d'ús

Llibreries gratuïtes

No declaració de paràmetres

Els paràmetres es poden invocar sense haver-los de declarar.
Es tractanten com un array.

Funcions de nombre de paràmetres indefinits. No cal fer una funció per 1 paràmetre, una altre per a 2, una altre per a 3,...

Per exemple es pot avaluar el nombre de paràmetres amb:
arguments.length:

function exemple(){
return (arguments[0]+"-"+arguments[1]);
}

Crida:
example ('a','b');
=> a-b

Inicialització paràmetres molt senzilla

Paràmetres per defecte amb || (OR lògic)

function exemple(){
var par1=(arguments[1]||"res-de-res");
return (arguments[0]+"-"+par1);
}

exemple('a');
=> a-res-de-res
Permet inicialitzar tots els paràmetres amb una instrucció molt simple, evitant llargs if i molt codi de comprovació
Claretat de prioritat dels operadors i funcions.Mozilla - Prioritat
Mozilla - Expressions
Suport a caràcters UNICODE
\0, \x00, \u0000
\t, \x09, \u0009
\", \x22, \u0022
\', \x27, x\u0027

Gran quantitat de events programables

Molts apareguts amb HTML5 que amplien les possibilitats de programació.
setInterval()
onload()
onresize()
Events, Objecte Windows, ...

Funcions matemàtiques

w3schools- Objecte Math
n.toFixed(1) - arrodonir al primer decimal

JSON - JavaScript Object Notation

JSON.org
JSON.org un format de conversió a text molt estès (en alguns àmbits esta desplaçant a XML) amb llibreriesper a la majoria de llenguatges i mètodes per a serialitzar i enviar informació a través d'una línia de comunicació.
JSON.stringify(object)
JSON.parse(string_JSON)



Enllaços relacionats:




miércoles, 9 de julio de 2014

HTML5 i JS: local Storage

JS logo
www.w3.org-script
Una altre gran avantatge de la programació amb HTML5 i JS es la inclusió de emmagatzemament local permanent, i a més, de manera senzilla.

Hi ha força informació disponible a dev.w3.org

De manera simple:
  • Hi han dades que es poden guardar en sessió i permanents
  • Es tracten com a propietats de 2 objectes: localStorage, sessionStorage
  • Es important tenir en comte la inicialització de les variables
  • Es important gestionar primer les dades al xStorage i desprès fer la presentació a DOM, i no al revés.

function init_segons()
{ localStorage.segons = "0.0";
localStorage.llista = "";
}

function afegir()
{ // Afegim + per forçar conversió a num.
localStorage.segons = +localStorage.segons + 0.1;
}

function mostrar()
{ /* Mostrar canvia respecte a ver. anteriors.
Invoca al procés de increment i plasma el que hi ha al storage. */
cl.html((+localStorage.segons).toFixed(1));
rep.html(localStorage.llista);
};


miércoles, 11 de junio de 2014

HTML5, JS i geolocalització

JS logo
www.w3.org-script
Una altre de les avantatges de HTML5 i JS es la possibilitat que ha portat per a fer geolocalització.
La majoria de funcionalitats es basen en l'ús de Google Maps però donat que es un producte molt complert i complex, han sorgit llibreries com gmaps.js (hpneo) que ajuden molt a la programació de accions.


Mostra un mapa més gran

Amb les llibreries que es poden importar fàcilment:
<script type="text/javascript" src="zepto.min.js"></script>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="gmaps.js"></script>
es poden construir ràpidament accions de posicionament de marques (markers), rutes, etc...
<script type="text/javascript">
var map, lat, lng;
...
$(function() // Function Ready al acabar de construir arbre DOM
{

function enlazarMarcador(e) // e= event que em passa la llibreria
{
// mostra ruta entre marcas anterior i actual
map.drawRoute({
origin: [lat, lng], // origen en coordenades previes
// desti en coordenades del click actual
destination: [e.latLng.lat(), e.latLng.lng()],
travelMode: 'driving',
strokeColor: '#000000',
strokeOpacity: 0.6,
strokeWeight: 5
});
lat = e.latLng.lat(); // guarda coords per següent enllaç
lng = e.latLng.lng();
map.addMarker({ lat: lat, lng: lng}); // Marker a mapa
$("#informatiu").html("AddRoute: a lat.:"+e.latLng.lat()+" long.:"+e.latLng.lng()+" Markers:"+map.markers.length);
};
...

Enllaços relacionats:




viernes, 11 de abril de 2014

JavaScript: Events tàctils amb llibreries

JS logo
www.w3.org-script

JavaScript: Events tàctils

Amb l'aparició i acceptació del iphone, sobre el 2007, l'ús dels events tàctils ("touch") comença a ser acceptat als diferents navegadors.
Poc a poc es van normalitzant i per exemple a Mozilla pots trobar una bona font de informació de com tratactar-los.
TapQuo també publica una guia gràfica (veure a meitat de la pàgina) molt útil per a les formacions.

Llibreries

Per a facilitar l'ús i programació dels diferents events apareixen llibreries que faciliten el seu tractament:
JQuery Mobile
Zepto JS
TapQuo JS (Una fantàstica empresa de Bilbao)

En el meu cas he estat jugant darrerament amb les llibreries de Zepto que ofereix de 2 llibreries:
  • touch.js: Events com tap, singletap, doubleTap, swipe, swipeUp,...
  • gesture.js: Events com pinc, pinchIn,pinchOut,
Amb aquestes llibreries pots programar, per exemple, un toc ("tap") o un desplaçament ("swipe") simplement fent:
...
<script type="text/javascript" src="zepto.min.js"></script>
<script type="text/javascript" src="touch.js" ></script>
...
<script type="text/javascript">
$(function()
{ var ditet = $('#areatactil');
var cl=$("#crono"); // crono
var rep=$("#liststop"); // inventory
...
function clear()
{if (!t)
{cl.html("0.0");
rep.html("Crono initialized<br>");
}
else
{ rep.html((rep.html()+"Crono running.<strong>Reset not allowed!</strong><br>"));
}
}
// Events de touch
ditet.on('swipe', clear);
...
<div id="areatactil">
<span id="crono"> 0.0 </span> segundos
<div id="liststop"></div>
</div>
...

Enllaços relacionats:

viernes, 10 de enero de 2014

Sievers900: Error 2608 en COM1

Sievers900 portable -imatge
GE Instruments - Sievers900 Portable
General Electrics te una divisió de instrumental analític i es un clàssic als laboratoris.
Un dels equips de que disposa es el Sievers900 Portable que permet fer anàlisis TOC (Total Organic Carbon) de manera mòbil.
Aquest equip es pot enllaçar amb un autosampler i amb un ordinador per a automatitzar el procés d'anàlisi.

El software que gestiona aquest procés es el DataPro 900.
Personalment l'he provat sobre Windows 7 SP1 i funciona correctament, de totes maneres pots trobar-te 2 problemes significatius durant la instal·lació:

Error amb la versió Java

La versió 1.51 del DataPro (la darrera disponible en aquests moments, NO es compatible amb la versió 1.7 de Java.
Caldrà instal·lar una versió obsoleta de Java, la 1.6, que pots descarregar d' aquí.

Error de comunicació amb COM1

En aquest apartat tens diverses coses a fer, ordenades per probabilitat de que pasin:
Probable causa de errorExemple
Si tens el error de la imatge:
2608- Instrument error

A communications error has been detected


el més probables es que hagis encès i apagat en l'ordre incorrecte.
Nota: Si reinicies el ordinador també falla i cal apagar-ho tot durant, almenys, 30 segons abans de tornar a encendre-ho.

Encès:
  • Iniciar el TOC
  • Iniciar el Autosampler
  • Iniciar el ordinador
Apagat:
  • Apagar el equip
  • Apagar el Autosampler
  • Apagar el ordinador
Verificar la configuració del port COM1.

Especialment el tema del "Flow Control" que sigui per Hardware.
Utilitzar Hyperterminal per a monitoritzar la comunicació directa.
Hyperterminal ha desaparegut de Windows 7 però la versió de XP encara funciona sense incidències.
Còpia a la c:\temp i s'executa directament.


Si aquesta informació, t'ha servit d'alguna cosa.... deixa'm un missatge si us plau!


Enllaços relacionats:




jueves, 9 de enero de 2014

1and1 i el problema amb el /defaultsite

Acabes de comprar un domini, tot il·lusionat, a 1and1 i vols penjar la teva primera pàgina.
Un cop pujat, per exemple amb FTP, el teu fitxer index.html el vols veure...


 i ZASSS!!! el domini queda afegit amb un horrible /defaultsite
La pàgina que es mostra es un error, del tipus "Aquest domini acaba de ser registrat" ...




Per a complicar-ho més encara, això només et passa amb Chrome o Firefox, i en canvi no amb IE....
Estàs desorientat....

L'ajuda de 1and1 no serveix de res... fins que fas Googling i arrives als pasos que jo he seguit per a solventar-ho:

Retirar /defaultsite

Selecciona el domini i ves a la opció "Edició de destí"
Nota: Encara que modifiquis el fitxer al directori per defecte, NO funciona!
Ves a la edició de Editar i crea una nova carpeta.
T'informarà de que estarà creada en 10 min.
(però pots continuar amb el següent pas)
Transfereix amb FTP els fitxers a la nova ubicació.index.html
En 10 minuts hauria de funcionar
Prova-ho en diversos navegadors!!!!!


Enllaços relacionats:

FAQ 1and1



jueves, 19 de diciembre de 2013

Java: Com declarar una instància de String[] args ?

Java logo
java.com
Típicament la principal funció d'una classe es la main i habitualment es declara com a: main(String[] args); però com es pot generar aquest paràmetre?

Si fem buna recerca per Internet a tot arreu trobarem replicat el manual de Java i fins i tot tinc una entrada aquí mateix trobarem una descripció de com funciona la creació de objectes.


Ara la pregunta es... com puc declarar-ho correctament si no em bé per la crida del la classe?

Doncs fent una cosa tan simple com:

String[] empty_strings = {};


amb això podràs declarar un paràmetre buit que et pot fer servir per a simular la crida al main sense cap mena de paràmetre especificat.

martes, 9 de abril de 2013

MS-DOS Batch: Assignar valor per defecte a SET /P

http://www.microsoft.com - cmd.exe
El popular BAT continua existint, malgrat l'aparició del nou PowerShell i el volum de scripts existents es inacabable.


Entre altres "innovacions" existeix la opció de demanar paràmetres de manera interactiva amb la instrucció SET /P.

Com podem assignar paràmetres per defecte en un BAT?

Si fem una mica de "goggling" la majoria de entrades et remeten a "choice.exe" però que passa si NO POTS UTILITZAR CHOICE.EXE?

Una opció utilitzar els IF ... GOTO per a decidir quina opció es la correcte per defecte. Veiem un exemple:

@echo off
echo.
SET /P v_Grups=List groups [Y(Default)/N]   :
echo.
if "%v_Grups%"=="" GOTO ASIGNAR_DEF1
GOTO EXECUTAR
:ASIGNAR_DEF1
SET v_Grups=Y
:EXECUTAR
program.exe %v_Grups%


Espero que us faci servei!!!

miércoles, 14 de noviembre de 2012

Java 7: SortSet implementation and example

Un cop revisat les diferents funcionalitats i implementacions de les Collections i els SortSet (veure entrada Collections i sortset ) i presa la decisió de implementar un SortSet voldràs veure un exemple.
Habitualment els exemples que es troben a Internet son exemples trivials amb tipus natius (int, char, ...).
Si treballes amb objectes complexos cal tenir en compte els següents detalls.

AccióExample
La classe ha de implementar Comparableclass P0102UsuariDetail
implements Comparable <P0102UsuariDetail>
El procediment ha de retornar un int
public int compareTo(P0102UsuariDetail pUsuari)
{
int result = UsuariID.compareTo(pUsuari.UsuariID);
return result;
}
Ja es pot declarar la el SortSetprivate TreeSet <P0102UsuariDetail> P0102Llista
=new TreeSet<P0102UsuariDetail>();
I utilitzar les funcions heredadesusuariP02 = new P0102UsuariDetail(); ...
P02Llista
.add(usuariP02);

Que pasa si intentes utilitzar les funcions i no hi ha un compareTo?
Per defecte si no hi ha la funció de comparació (compareTo) obtindrás un error: ClassCastException
 definit com a:
ClassCastException - if the specified object's type prevents it from being compared to this object.


Informació addicional:
http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html


lunes, 6 de febrero de 2012

Java7: NamingEnumeration

Una cosa repelent de les NamingEnumeration es el fet que cada accés fa moure la llista...
Així que si s'executa una cosa com:

NamingEnumeration list = ctx.list("ou=People");
while (list.hasMore())
{System.out.println(list.next());
NameClassPair nc = (NameClassPair)list.next();
System.out.println(nc);
}
Perdràs la meitat de la llista, ja que l'accés la fa moure.
Es per això que es fa una instància a un objecte abans (NameClassPair nc = (NameClassPair)list.next();)  de fer la impressió (System.out.println(nc);).


From:
http://docs.oracle.com/javase/tutorial/jndi/ops/list.html