Google Website Translator Gadget

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

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, 2 de julio de 2014

HTML5 i CSS3: Fonts d'informació i generadors

CSS3 logo
http://www.w3.org/Style/CSS/

Fonts d'informació

Al començar a programar en HTML5 i CSS3 cal obtenir una font d'informació fiable i que aporti exemples, i els apartats més interessants.

Faig aquí un recull de llocs on tractar aquests temes.
TemaOn?
HTML GeneralHTML (ENG)
Un excel·lent resum de HTML5 de 1 pàgina (Gràcies a Smashingmagazine.com)
CSS GeneralCSS(ENG)
<div>DIV (ENG)
<nav>
Exemple display:inline
nav (ENG)
Exemples menu horitzontal (Spanish)
<Canvas>
Grafics
Canvas (ENG)
canvas i SVG (ENG)
SVG (ENG)
Un  generador gratuït i força interessant: canva.com
CSS selectors:
# . *
CSS Selectors (ENG)
Herència i cascada
FontsW3.org-fonts
Font, @Font-face
CSS3 Fontface
Generadors CSSCSS3generator.com
Gradients Generator
CSSPortal.com Rounded-corner, menus i 1000 trucs
CSS3maker.com - menus i més
CSS3.com
media

Utilitzat per a disseny adaptable ("responsive") a diferents dispositius
Screen resolution
alistapart.com - Responsive
<link rel='stylesheet' media='only screen and (min-width:530px) and (min-device-width:480px)' href='screen-480.css' />
CSS Selectors

::after

W3schools-Selectors
p::after
{content:"- Remember this";}
per exemple, afegeix el text a tots els paràgrafs.


Enllaços relacionats:




miércoles, 18 de junio de 2014

CSS3: Fonts, @font-face i Fira Sans

CSS3 logo
http://www.w3.org/Style/CSS/

CSS3: Fonts, @font-face i Fira Sans

Entre altres funcionalitats pel disseny de pàgines, CSS3 permet la incorporació de diverses fonts, tant des del propi servidor com importades de un altres servidor.
Aquesta darrera es molt interessant per tal d'importar fonts des de servidors on estan publicades per a compartir, veiem els paràmetres i un exemple:

Exemple de codi:

@font-face
{
font-family:FiraSans, Georgia, Serif;
font-weight:900;

font-variant:small-caps;

src: url(https://github.com/buildingfirefoxos/Building-Blocks/blob/gh-pages/fonts/FiraSans/FiraSans-Regular.otf);
}

Repàs dels paràmetres principals

ParàmetreTractament
font-familyIndica la prioritat de les fonts disponibles.
font-weightEspecifica el "pes", per exemple negreta ("bold").
Hi ha una normalització del pes per a facilitar el tractament:
normal, bold, 100, 400, etc...
font-strechEspecifica principalment la relació entre alt i ample de la font.
No esta gaire suportat encara.
font-style
font-sizeEspecifica el tamany 
font-variantEspecifica el tractament del text. Té 2 opcions:
normal: Text normal
small-caps:
El text es genera automàticament en "Versalita"
FormatsWoff (Web Open Font Format): .woff
TrueType: .ttf Desenvolupat per Apple als 80'
OpenType: .ttf, .otf
Embedded-opentype: .eot
SVG Font: .svg, svgz. Típic de iOS (iPad, iPhone)

Webfonts.info es pot trobar una llista de llocs i plans per a descarregar embedded fonts, fontsquirrel.com i Google fonts disposen d'una àmplia llista també.

Enllaços relacionats:

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:




miércoles, 28 de mayo de 2014

HTML5: Video convertidors

CSS3 logo
http://www.w3.org/Style/CSS/

HTML5: Formats de video

Una de les avantatges de HTML5 i CSS3 es que estandarditza els formats, una mica, i permet la gestió de vídeos sense complicar massa la programació.

Malgrat això moltes vegades ens cal preparar-ho en diversos formats i aquí es on entren les eines de conversió. De les que he provat jo em quedo amb les 2 següents:



EinaFuncionalitat
HandBrakeGratuïta. Open Source.
Eina gràfica molt fàcil de utilitzar. La que he provat es la versió HandBrake-0.9.9-1 sobre Windows

Contra: No admet tots els formats possibles.
FFmpegLa meva favorita. Gratuita. Publicada sota GNU.
Eina que permet la majoria de conversions.  Utilitza diverses llibreries que li permeten fer-ho.

Contra: Si no ets programador... no vinguis. Es una eina que funciona amb línia de comandes "Command line".

Permet fer coses increïbles com canviar de format:
ffmpeg -i MP4_origen.mp4 webm_desti.webm

Extreure DVD a mp4:
ffmpeg -i D:\VIDEO_TS\EXAMPLE.vob -c:a libmp3lame "C:\Carpeta amb espais\EXEMPLE.mp4"
O rotar un vídeo:
ffmpeg -i "C:\La meva carpeta\origen.mp4" 
-vf "transpose=dir=1:passthrough=portrait" 
"C:\La meva carpeta\GIRAT_90graus.mp4"
VLCEl famós Video Player també permet gravació, tot i que durant les proves (versió 2.1.3) a mi no m'ha funcionat correctament.
Altres eines disponibles, encara que no son totalment gratuïtes o tenen avisos, etc...

Una bona comparativa la pots trobar a:
Wikipedia - Comparativa de editors


Enllaços relacionats:




miércoles, 7 de mayo de 2014

CSS3: Forçar el tamany del contenidor DIV al tamany dels DIV continguts.

CSS3 logo
http://www.w3.org/Style/CSS/

CSS3: Forçar el tamany DIV automáticament. 

Un dels problemes que tothom es troba al treballar amb DIV enlloc de taules TABLE es que al insertar una imatge aquesta pot desbordar el tamany del propi contenidor DIV.


El problema amb DIV incrustats

Veiem un exemple extret de PageAffairs i de Swiftthemes on esta molt ben explicat:
Comportament per defecteQue volem
from Swiftthemes.com

from Swiftthemes.com

CSS - Part 1

La solució prové d'incloure en CSS un style i afegir-ho als contenidors afectats. Veiem com funciona:
/* FIX to increase container size to the internal DIV size and avoid image floating outside the container DIV */

.clearfix:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}


.clearfix {display: inline-block;}
/* Hides from IE-mac \*/
* html .clearfix {height: 1%;}
.clearfix {display: block;}
/* End hide from IE-mac */
/* END FIX */

:after indica que s'aplicarà desprès de la resta de elements.

HTML - Part 2

Als contenidors cal incloure:
<div id="main_container">
 <div id="foto">
    <img src="IMATGE_ENORME.png" height="233" width="320"/>
 </div>
 Text petit.<br>
 <div class="clearfix"></div>
</div>

Enllaços relacionats:




jueves, 24 de abril de 2014

CSS3: Cantonades arrodonides "Round corners" i text inclinat ("Rotate")

CSS3 logo
http://www.w3.org/Style/CSS/

CSS3: "Round corners" i text inclinat 

Una de les avantatges de CSS3, que estalvia molt temps de feina, son les cantonades arrodonides ("Round Corner") i textos inclinats.
Ho veiem amb un exemple per tal que sigui més fàcil.


Cantonades arrodonides "Round corner"

Veiem el següent codi exemple, que serveix per al format d'aquest propi codi font:
.code{
margin-top: 20px;
padding-left: 5px;
font-family: monospace;
background-color: #000;
width: 100%;
border-top: 10px solid #ccc;

border-radius: 20px 15px 10px 5px;

box-shadow: 5px 3px 10px #000;

min-height: 80px;
color: #C0F146;
text-align: left;
font-size: 12px;
}
Amb la comanda border-radius defineixes quin radi d'arrodoniment ha de tenir aquesta cantonada arrodonida.

Text inclinat ("Rotate")

Veiem un altre cas amb text inclinat:
.demo-text {
padding:2%;
min-height:20px;
min-width:50px;
margin:2%;
/* border */
border:5px;
border-radius:20px;
border-style: dashed;
border-color:red;
box-shadow: 5px 5px 2px #888888;
/* position */
float:right;
display: table-cell;
text-align:center;
vertical-align: middle;

/*Rotate div */
 -ms-transform:rotate(30deg); /* IE 9 */
 -webkit-transform:rotate(30deg); /* Chrome, Safari, Opera */
 transform:rotate(30deg); /* Standard syntax */
}
Amb aquest codi, per exemple, podem aconseguir un text inclinat amb cantonada arrodonida:

exemple




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:

martes, 8 de abril de 2014

Múltiples imatges background amb CSS3

CSS3 logo
http://www.w3.org/Style/CSS/

Múltiples imatges background amb CSS3

Una de les coses on habitualment puc cometre errors es a la sentència background amb diverses imatges.
Posem un exemple amb el següent CCS (que pots veure funcionant aquí):

Codi comentat:

.divimage{
padding:40px;
background:

url(http://upload.wikimedia.org/wikipedia/commons/f/f3/Airplane_GA_Black.svg)
 left top repeat-x,
url(http://upload.wikimedia.org/wikipedia/commons/7/7a/1a2.png)
 center no-repeat,
url(https://cdn1.iconfinder.com/data/icons/windows8_icons/26/airplane_take_off.png)
 left bottom repeat-x;

font-family: 'Roboto', sans-serif;
background-color:#a4d3ff;
box-shadow: inset 5px 5px 20px 5px #CCCCCC;
border-radius: 10px 0px 10px 0px;
}

Cal notar que:

  • entre les diverses imatges hi ha una coma (,)
  • Només hi ha una sentència background
  • Es pot combinar amb altres instruccions CSS 
  • Es poden importar imatges de fonts URL

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, 17 de diciembre de 2013

Procrun, Prunsrv: Com generar un servei Windows d'una aplicació Java

http://commons.apache.org
Moltes vegades ens caldria que una aplicació  Java funcioni com a servei Windows.
Això passa per exemple amb el servidor Apache Tomcat, però pot ser necessari per algun programa nostre.


Com fer un servei Windows d'un programa Java?

Afortunadament hi ha es conjunt d'aplicacions procrun que ens ajuden, i molt, a aconseguir-ho.
Veiem-lo amb un exemple fet amb Eclipse:

PasExemple
Compilar el programa com "Runnable JAR file"
Verificar que el programa funciona correctament.java -jar path\to\Newsdeploy.jar
Crear un script de instal·lació.
Aquí (GitHub) tens un exemple 
Executa'l com a Administrador

Nota: Malgrat que tinguis dret d'administrador, cal executar-ho com a Administrador.
Verifica que els paràmetres han quedat carregats

Important revisar el compte amb el que s'ha d'arrencar el servei
Nivell de logs
Important revisar el paràmetre "Java Options"
ha de contenir el camí (path) fins al fitxer .jar de la teva aplciació
Verificar també la class.

La class indicada ha de ser la classe final (inclós el nom del paquet complert).
El mètode ha d'incorporar com a paràmetre d'entrada String[] obligatòriament.


Errors comuns

ErrorSol·lució
Could not start service on Local Computer... ... error code 4

Service error. Error code 4






Normalment va associat a un error que trobaràs al fitxer indicat al apartat de "Nivell de logs" (Veure apartat anterior):

FindClass com/MyPackage/MyClass failed



  • Revisar la presència de la classe indicada i de totes les llibreries associades.
  • Revisar els mètodes indicats al inici i final per a verificar que declaren entrada de paràmetre.

Enllaços relacionats:

Apache Commons Procrun
Apache Tomcat
BAT d'instal·lació
joerglenhard.wordpress.com

sábado, 30 de noviembre de 2013

Log4j: Crear sortides a fitxer i consola.

http://logging.apache.org/log4j/1.2/

Log4j duplicar sortides

Apache Logging ha tret la versió Log4j 2 en Beta, però de moment hi ha molt codi a mantenir amb la versió 1.2 (La darrera publicada es la 1.2.17).

Una de les coses que cal de vegades es duplicar la sortida dels logs a 2 destins diferents, per exemple, Consola i fitxer.

Appender

Afortunadament log4j cobreix aquest aspecte amb el concepte appender.
Veiem un exemple de configuració amb el fitxer log4j.xml

<root>
<priority value="WARN" />
<appender-ref ref="fitxerlog" />
<appender-ref ref="Consola" />
</root>


Si utilitzes aquests appender-ref  tots els missatges de valor WARN (més sobre nivells aquí) o superior es duplicaran als 2 appender definits.

Enllaços relacionats:

Log4j: Crear un fitxer de sortida
Appache Log4j: API Appender

viernes, 29 de noviembre de 2013

Log4j: Crear sortides a fitxer

http://logging.apache.org/log4j/1.2/

Log4j sortida a fitxer (FileAppender)

Apache Logging ha tret la versió Log4j 2 en Beta, però de moment hi ha molt codi a mantenir amb la versió 1.2 (La darrera publicada es la 1.2.17).

Una de les coses que cal de vegades es generar logs. Afortunadament log4j disposa de un ampli ventall d'opcions per a definir una sortida a fitxer.
Veiem un exemple amb alguns detalls addicionals interessants.

DailyRollingFileAppender

Veiem un exemple de configuració amb el fitxer log4j.xml

<!-- Send to a file --> <appender name="fitxerlog" 
class="org.apache.log4j.DailyRollingFileAppender">
<param name="append" value="true"/> <param name="DatePattern" value="'.'yyyyMM" /> <param name="file" value="C:/TEMP/Newsdeploy.log"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" 
value="%d{ABSOLUTE} %-5p %c.%M:%L - %m%n" /> </layout> </appender>

Seguint aquest exemple podem veure:

ParàmetreComentari
name="fitxerlog"
Es el nom identifica aquest appender en concret.

DatePattern
Una funcionalitat molt i molt interessant que permet generar un archiving automàtic dels fitxers del log.
En aquest exemple es generarà un fitxer nou a final de mes i l'antic quedarà modificat amb any i mes.
    example.log         02/12/2013 12:53
    example log.201311  29/11/2013 15:32


D'aquesta manera els fitxers de log queden d'un tamany raonamblement manegable i es fàcil fer una neteja mensual.

Pots consultar més formats aquí

fileFitxer, i path, de log
Cal recordar que des de Windows cal utilitzar la cotnrabarra "/"

Enllaços relacionats:

http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html