lundi 14 novembre 2011

Définir un proxy dans son AVD

Lorsque l'on travaille sur un PC passant par un proxy (pour accéder au web) et que l'on souhaite utiliser cette connexion au web dans son Android Virtual Device (l’émulateur Android), il faut indiquer les paramètres du proxy :

Dans l'émulateur, aller dans le menu Settings > Wireless & networks > Mobile networks > Access Point Names > TelKila :
 
Et renseigner les champs :
Proxy
Port
Username
Password

mardi 4 octobre 2011

*args and **kwargs en Python

Ils servent pour appeler des fonctions avec un nombre variable de paramètres.


*args est utilisé pour passer des paramètres simples
**kwargs est utilisé pour passer des paramètres keyworded (clef/valeur)

Source:
http://www.saltycrane.com/blog/2008/01/how-to-use-args-and-kwargs-in-python/

mercredi 21 septembre 2011

Linux : USER/EUSER/etc tronqué avec ps

Lorsque je fais :

ps -o user
USER
myusername
myusername
... 

Mais lorsque je fais :

ps -o user -o args
USER     COMMAND
46       ps -o user -o args
46       -bash
..

Donc il vaut mieux travailler avec l'UID qu'avec le username, car il risque d'être tronqué si > 8 caractères.

Source : http://www.linuxquestions.org/questions/linux-newbie-8/ps-aux-displays-users-as-uids-instead-of-username-645456/

mardi 23 août 2011

Acronymes américains

  • AFAIK: As Far As I Know
  • ASAP: As Soon As possible
  • BRB: Be Right Back
  • BTW: By The Way
  • BYOB: Bring Your Own Beer/Booze (dans une soirée, chacun apporte ce qu'il compte boire)
  • FYI: For Your Information
  • IMHO: In My Humble Opinion
  • IOU: I Owe You (donner un IOU veut dire que l'on doit quelque chose à quelqu'un)
  • NSFW: Not Safe For Work (à éviter de regarder au travail, souvent synonyme de contenu "osé")
  • OBO: Or Best Offer (vu dans petites annonces)
  • OMG: Oh My God!
  • RSVP: Repondez S'il Vous Plait (utilisé lorsqu'on est invité pour dire si l'on vient ou non)
  • SOL: Sh*t Out of Luck (to be SOL: être dans la mouise parce qu'on ne peux plus compter sur la chance)
  • TBC: To Be Confirmed
  • TBD: To Be Determined
  • TGIF: Thank God It's Friday
  • TMI: Too Much Information (se dit lorsque quelqu'un donne un peu trop de détails personnels)
  • WTF: What The F***
Source : http://www.bienvenueaboston.org/wikigroup.php?id=17

lundi 11 juillet 2011

Créer des diagrammes


Possibilité de sauvegarder en local (XML, SVG, PNG) et de re-ouvrir (si sauvegardé précédemment en XML). Peut ouvrir les fichiers VDX (Visio).

vendredi 8 juillet 2011

Mettre en place plusieurs applications sous CherryPy

Avec CherryPy 3.X, il est possible d'associer plusieurs applications à un seul site. Nous allons voir comment mettre en place 3 applications basiques (ayant chacune son propre fichier de configuration) et les associer à une instance CherryPy (ayant lui aussi son propre fichier de configuration).

Les instructions que je donne ci-dessous se basent sur un environnement Windows. Mais très peu de choses varient pour Linux (ce qui changent, c'est la façon d'installer Python et CherryPy ainsi que les répertoires de Python et CherryPy).

1 - Installation de Python et CherryPy
  • installer Python 3.X : l'installer dans C:\Python3X
  • installer CherryPy 3.X : il s'installe dans C:\Python3X\Lib\site-packages\cherrypy

2 - Création d'une application
  • dans le répertoire de CherryPy, créer le répertoire app1
  • dans ce répertoire , créer les fichiers :
__init__.py

<fichier vide
>

appli1.conf (le contenu de ce fichier n'est qu'un exemple)

[Databases]

driver: "postgres"
host: "localhost"
port: 5432

appli1.py 

import cherrypy
class App1:    
   def index(self):        
      return "Hello world from app1 !"    
   index.exposed = True 

3 - Création d'une deuxième application

répéter les manips indiquées dans le chapitre "Creation d'une application", en remplacant "1" par "2" ("appli1.py"->"appli2.py" , "class App1"->"class App2", etc)


4 - Création d'une troisième application
 
répéter les manips indiquées dans le chapitre "Creation d'une application", en remplacant "1" par "3" ("appli1.py"->"appli3.py" , "class App1"->"class App3", etc)


5 - Création du script de démarrage du site
 
à la racine de CherryPy (dans notre cas il s'agit de C:\Python3X\Lib\site-packages\cherrypy), créer le fichier :
startup.py 

import cherrypy
import appli1.appli1
import appli2.appli2
import appli3.appli3

def initApp( path, confFileName=None, app=None):    
   appliConf = os.path.join(os.path.dirname(__file__), confFileName)    
   cherrypy.tree.mount(app, path, config=appliConf)

if __name__ == '__main__':    
   import os.path       
   #initialisation du fichier de configuration du site :    
   globalconf = os.path.join(os.path.dirname(__file__), 'global.conf')    
   cherrypy.config.update(globalconf)
   #initialisation des fichiers de configuration des appli1, 2 et 3 :    
   initApp('/1', 'appli1/appli1.conf',appli1.appli1.App1());    
   initApp('/2', 'appli2/appli2.conf',appli2.appli2.App2());    
   initApp('/3', 'appli3/appli3.conf',appli3.appli3.App3());        
   cherrypy.engine.start()    
   cherrypy.engine.block()


6 - Création du fichier de configuration du site
 
à la racine de cherrypy (dans notre cas il s'agit de C:\Python3X\Lib\site-packages\cherrypy), créer le fichier :
global.conf 
[global]server.socket_host = "127.0.0.1"
server.socket_port = 8088server.thread_pool = 10

7 - Lancement de CherryPy

  • taper la commande : python startup.py

  • lancer un navigateur et aller à : http://127.0.0.1:8088/1/
    =>"Hello world from app1 !" s'affiche :o)

  • lancer un navigateur et aller à : http://127.0.0.1:8088/2/
    =>"Hello world from app2 !" s'affiche :o)

  • lancer un navigateur et aller à : http://127.0.0.1:8088/3/
    =>"Hello world from app3 !" s'affiche :o)

 

mercredi 15 juin 2011

leparisien.fr : site en japonais => site hacké ?

Waouuuuuuu, quand on tape leparisien.fr, superbe page blanche avec comme message :

無効なURLです。ドメイン設定の反映待ちか、存在しないアドレスです。
再度ご確認のうえアクセスをお試しください


Configuration d'une application Java/Spring/Hibernate pour utiliser JavaMelody

Ceci est un petit résumé...
  • Monitoring SQL, sans Datasource :
- modifier le driver :
hibernate.connection.driver_class : net.bull.javamelody.JdbcDriver
hibernate.connection.driver : oracle.jdbc.driver.OracleDriver
  • Monitoring des Services (les @Service) :
- rajouter l'interface Monitored dans le package com.toto

- rajouter "implements Monitored" sur les classes des services que l'on souhaite monitorer

- rajouter dans applicationContext.xml :

<bean id="facadeMonitoringAdvisor" class="net.bull.javamelody.MonitoringSpringAdvisor">
    <property name="pointcut">
            <bean class="net.bull.javamelody.MonitoredWithInterfacePointcut">
                 <property name="interfaceName" value="com.toto.Monitored" />
            </bean>
        </property>
</bean>



PS : on peut aussi le faire avec @net.bull.javamelody.MonitoredWithSpring à la place de l'interface... 
pour plus d'infos : doc de JavaMelody


  • Configuration diverse:
- rajouter dans web.xml :

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:net/bull/javamelody/monitoring-spring.xml
            classpath:applicationContext*.xml
        </param-value>
</context-param>

<filter>
         <filter-name>monitoring</filter-name>
         <filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
</filter>
<filter-mapping>
         <filter-name>monitoring</filter-name>
         <url-pattern>/monitoring</url-pattern>
</filter-mapping>
 
<listener>
         <listener-class>net.bull.javamelody.SessionListener</listener-class>
</listener>


- rajouter dans pom.xml :

<dependency>
            <groupId>net.bull</groupId>
            <artifactId>javamelody</artifactId>
            <version>1.29.0</version>
</dependency>
<dependency>
            <groupId>org</groupId>
            <artifactId>jrobin</artifactId>
            <version>1.5.9.1</version>
</dependency>  



  • Si jamais vous avez un message du genre "dépendance cyclique" (en gros un service A fait référence à un service B qui fait référence au A) :
- créer la classe AllowRawInjectionDespiteWrappingXMLWebApplicationContext :

package com.toto.utils.spring;

import java.io.IOException;

import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.web.context.support.XmlWebApplicationContext;

public class AllowRawInjectionDespiteWrappingXMLWebApplicationContext extends XmlWebApplicationContext {

  @Override
  protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) throws IOException {
    beanFactory.setAllowRawInjectionDespiteWrapping(true);
    super.loadBeanDefinitions(beanFactory);
  }
}


- rajouter dans web.xml :
<context-param>
        <param-name>contextClass</param-name>
        <param-value>com.toto.utils.spring.AllowRawInjectionDespiteWrappingXMLWebApplicationContext</param-value>
    </context-param>


    

mardi 7 juin 2011

Affiches Hadopi : "future auteure"

Oh miracle ! Je viens d'apprendre (merci la news PC INpact) qu'Hadopi va démarrer des campagnes de presse/télé/radio.

En lisant le texte sur les affiches Hadopi pour la presse je remarque une chose étrange : le terme "future auteure". Mhhhhhhhhhh gros doute.... Moué, je me dis qu'Hadopi (ou plutôt son agence de com' Havas ???) n'a quand même pas fait une si grosse boulette...

Allons sur Larousse : "auteur" existe (nom masculin) mais pas "auteure"... 
Allons sur le dictionnaire de TV5 mmmmhhhhh idem : "auteure" n'existe pas...

Très très curieux...

lundi 30 mai 2011

Serialiser en Python (et l'inverse)

Pour transformer un objet Python en bytes (et inversement), il existe le module pickle, qui permet :

- de serialiser : myBytes=pickle.dumps(myObject)
- de deserialiser : myObject=pickle.loads(myBytes)

Cela fonctionne avec Python 2 et 3


PS : il y a aussi marshal pour les types "basiques", cf http://python.developpez.com/faq/?page=Objet#ObjetSave

jeudi 14 avril 2011

Supprimer Orange Messenger et Orange Maps du Blackberry

- Aller dans Options > Options avancées > Annuaire de services
- Aller sur la ligne "Orange IM"
- Cliquer sur la touche avec le logo Blackberry
- Choisir "Supprimer"
- Aller sur la ligne "Orange Maps"
- Cliquer sur la touche avec le logo Blackberry
- Choisir "Supprimer"

N'hésitez pas à me laisser un petit commentaire et un +1 si vous avez trouvé cette astuce utile. Merci :o)

jeudi 7 avril 2011

Lister les contraintes sous Oracle

Lister les contraintes de l'utilisateur en cours :
SELECT count(*)  FROM USER_CONSTRAINTS

Lister les contraintes d'un autre utilisateur :
SELECT count(*)  FROM ALL_CONSTRAINTS WHERE OWNER='<THE_USER>';

Connaitre la version d'Oracle via SQL

select * from v$version;

select * from product_component_version;

mardi 22 mars 2011

Différences entre bill et invoice

Similitudes

  • Les deux termes désignent des documents créés par le vendeur afin d'informer l'acheteur sur ce qui a été vendu, en quelles quantités, pour quel montant, et sous quels termes/conditions.

  • L'objectif principal de ces deux documents est de réclamer officiellement de l'argent à l'acheteur pour ce qui a été fourni/livré.
   
Différence

  • Invoice est utilisé dans le B2B, bill est utilisée dans le B2C (business to consumer).

vendredi 25 février 2011

Les propriétés des mots de passe Oracle

Pour connaitre les propriétés des mots de passe Oracle  (comme par exemple la durée de validité d'un mot de passe, le nombre de tentatives d'identifications autorisées) :

select profile,resource_name ,limit from dba_profiles

Les propriétés des mots de passe sont les suivantes :
FAILED_LOGIN_ATTEMPTS
PASSWORD_LIFE_TIME
PASSWORD_REUSE_TIME
PASSWORD_REUSE_MAX
PASSWORD_VERIFY_FUNCTION
PASSWORD_LOCK_TIME
PASSWORD_GRACE_TIME

Elles sont décrites ici :

Ticket t+ pas vendu au même prix partout

Je pensais que le prix du ticket t+ était unique, hormis l'achat par 10 et le tarif réduit (enfant, etc). A l'heure où j'écris ce tarif est normalement de 1.70 euros.

Eh bien je viens de me rendre compte que le tarif appliqué n'est pas le même en fonction du lieu de l'achat. Ainsi, dans les bars à bord des TGVs (à destination de Paris), le tarif est de 1.90 euros :-(

Pourtant, une délibération du STIF fixe le tarif à 1.70 euros :  http://www.stif.info/IMG/pdf/deliberation_no2010-0293_relative_a_l_evolution_tarifaire_2010.pdf
Car il ne faut pas oublier que c'est le STIF qui fabrique le ticket t+ et que c'est encore lui qui fixe le tarif client...

Si quelqu'un a une explication, je suis preneur :-)

mercredi 23 février 2011

Cours Python

J'ai découvert il y a peu de temps les vidéos (en français) réalisées par un inconnu (aucune idée de son identité).

Elles sont disponibles sur YouTube : http://www.youtube.com/user/Pythonneries 
Elles expliquent les bases de la programmation en Python.

Malheureusement, elles ne sont pas disponibles en podcast. Du coup, il n'est pas possible de les télécharger pour les regarder dans les transports en commun, à moins d'utiliser aTube Catcher. Ce soft permet de récuperer toutes les vidéos (une trentaine à l'heure actuelle) à partir de l'URL de son profil YouTube.

lundi 21 février 2011

Flashback Oracle

Un chef de projet est venu me voir un soir (juste avant de rentrer chez lui) en me disant "tiens, il faudrait que tu lances cet UPDATE sur la base de prod pour mettre à jour les emails de la table CONTACT.

Il resta derrière moi, attendant que je le lance en production (et histoire de me mettre la pression). Et moi, j'ai eu la maladresse de ne pas verifier sa requête et je l'ai lancée en production... 

Ce qui devait arriver arriva : la requête n'était pas bonne du tout, et au lieu de mettre à jour les emails ils furent tous supprimés :o(

"Bon je rentre chez moi" me dit le chef de projet (on sent l'esprit d'équipe).

Deux solutions se presentaient alors à moi : 
- reprendre une base de backup pour recuperer les emails (et pour ca je devais galérer pour contacter l'hébergeur, infogérance oblige...) 
- ou utiliser la fonctionnalité magique d'Oracle, le FLASHBACK !

Grossomodo, cette deuxième solution consiste à afficher la table CONTACT telle qu'elle etait à T-X minutes.

Donc:
- je commence par créer une vue permettant d'accéder à la table telle qu'elle était il y a 1 heure : 
create view hour_ago as (select * from contact as of  TIMESTAMP (SYSTIMESTAMP - INTERVAL '60' MINUTE));
=>Du coup, lorsque je fais select * from hour_ago where id=246 par exemple, j'affiche les données du contact (ayant pour id 246) telles qu'elles étaient il y a une heure

- je fais l'update de la dernière chance :
update contact set contact.email=(select hour_ago.email from hour_ago where hour_ago.id=contact.id);
=> cet update :
    - a donc pris les emails de la table CONTACT tels qu'ils etaient avant la gaffe (grace à la vue hour_ago, avec son intervalle à "60 minutes")
    - a mis à jour la table CONTACT à partir de ces emails 

C'est maaaaaagique :o)

vendredi 18 février 2011

String immutable en Python

Je viens de découvrir que, comme en Java, les String sont immutables en Python.

Du coup, quand on veut concaténer, il ne faut pas tomber dans le piège de faire bêtement des +=
J'ai trouvé un super article d'Oliver Crow, énumérant les différentes possibilités pour concaténer.

La méthode 5 sort du lot (performante et peu consommatrice en mémoire). Cette méthode utilise la classe StringIO du module cStringIO.

PS : 
à partir de Python 3.0.1, le module cStringIO est remplacé par io : http://docs.python.org/release/3.0.1/whatsnew/3.0.html

vendredi 4 février 2011

Installer automatiquement un jar dans un repository maven local

Si on veut installer un jar, par exemple le jar JavaMelody (super outil de monitoring Java) :

mvn install:install-file -DgroupId=net.bull -DartifactId=javamelody -Dversion=1.25.0 -Dpackaging=jar -Dfile=c:/temp/javamelody-1.25.0.jar

 

Afficher les requêtes en cours d'execution sous Oracle

select sesion.sid,
       sesion.username,
       optimizer_mode,
       hash_value,
       address,
       cpu_time,
       elapsed_time,
       sql_text,       serial#
  from v$sqlarea sqlarea, v$session sesion
 where sesion.sql_hash_value = sqlarea.hash_value
   and sesion.sql_address    = sqlarea.address
   and sesion.username is not null 

Si jamais il y a des requêtes qui font plus de 1000 caractères, elles seront tronqués. Dans ce cas, pour afficher l'integralité :

select sesion.sid,
       sql_text
  from v$sqltext sqltext, v$session sesion
 where sesion.sql_hash_value = sqltext.hash_value
   and sesion.sql_address    = sqltext.address
   and sesion.username is not null
 order by sqltext.piece 
 
Source: http://www.squaredba.com/finding-currently-running-sql-135.html 

mercredi 2 février 2011

Fabriquer sa propre dedibox

Voilà differents liens concernant le matos :

http://www.server8.it

http://www.fit-pc.com

http://kookyoo.net/dossier/Informatique/dossier-tests-nano-ITX-mini-ITX-pico-ITX-VIA-epia-C7-C3-ordinateur-pc-faible-basse-consommation-processeur-intel-atom-00000036

http://www.anteor.com/catalog2/catalog/newsdesk_info.php?newsdesk_id=15&osCsid=786bf58fc01a2db581c45887855c94c2

http://www.itx-france.com

http://www.mini-itx.com/projects/cluster/

Afficher les locks sous Oracle

SELECT 
                o.owner, o.object_name, o.object_type, 
                o.last_ddl_time, o.status, l.session_id, 
                l.oracle_username, l.locked_mode
FROM 
                dba_objects o, gv$locked_object l
WHERE 
                o.object_id = l.object_id;

Jenkins est officiellement lancé

Oracle continue de creuser petit à petit son trou. Après la création de LibreOffice (suite au mécontentement de l'équipe OpenOffice concernant Oracle), c'est au tour d'Hudson de gagner son indépendance : Jenkins est lancé.


La communauté Hudson voulait se détacher d'Oracle (surtout au niveau de son infrastructure java.net). Mais Oracle ne voulant rien savoir, la communauté a voté la création du projet Jenkins (Oracle n'a pas du tout voulu lacher le nom "Hudson").

Oracle passe ainsi du coté obscur de la force (tout le contraire de "don't be evil" de Google):
- le prix des licenses MySQL pour les entreprises augmente (d'ailleurs il y a eu un fork, suite au rachat de Sun par Oracle : MariaDB)
- Oracle ne donne pas l'impression de maintenir OpenOffice (peu d'évolution, pas de roadmap réellement définie) -> création de LibreOffice
- Oracle n'écoute pas la communauté Hudson qui critique entre autre java.net (plateforme d'hebergement des projets "open") -> création de Jenkins hébergé sur Google Code
- Oracle ne veut qu'une seule implémentation "open" (OpenJDK) et bloque l'obtention de la license TCK (l'outil qui sert à valider qu'une implémentation est conforme aux specs) par Apache qui en a besoin pour son implémentation Harmony -> Apache se retire du JCP

Avec tout ca, la première chose qui me passe par la tête c'est le slogan de Nespresso : what else ?


Monitoring with JavaMelody

Je vais vous parler d'un outil de monitoring de webapp : JavaMelody, hebergé sur Google Code.

Il permet de monitorer la conso mémoire, CPU, les connexions HTTP/S, les connexions JDBC, les requêtes SQL, les threads, les classes, le garbage collector etc.
Tout y passe :o)

Les prérequis sont minimes : JRE 1.5, Tomcat 5.5, GlassFish 2, JBoss 4, Jonas 4, Jetty 6, WebLogic 9. Les versions supérieures passent sans problème (hormis l'intégration avec Tomcat7 en cours de validation)

Accessoirement, il est même possible de monitorer du Hudson(Jenkins), JIRA, Confluence, Bamboo(connais pas), Grails.

Concernant le monitoring d'une webapp, il y a très peu de modification à faire du coté du WAR (ou EAR). Dans mon cas, j'ai juste rajouter deux 2 libs, modifier le web.xml, l'applicationContext (si on fait du Spring comme moi), l'hibernate.cfg.xml (si on fait du Hibernate). Ça gère même les EJB 3, Struts 2, Guice, Quartz.

En 15 minutes, vous monitorez toute votre application.

La documentation officielle est très claire (et l'installation est méga simple) :
http://code.google.com/p/javamelody/wiki/UserGuide?tm=6#Setup

Allez voir les captures d'écrans afin de vous rendre compte de la quantité d'informations que l'on peut obtenir simplement avec JavaMelody.

PS : JavaMelody est "production ready" :o)
PS : Il peut se plugger avec Nagios ;o)

mardi 1 février 2011

Sega lance les jeux videos dans les urinoirs

Les jeux se controlent avec le jet d'urine. Faut boire beaucoup d'eau si on veut atteindre le boss de fin de niveau ;o)



mercredi 26 janvier 2011

Linux, process defunct

En faisant ce matin un ps aux | grep java sur un serveur, je me suis retrouvé avec ca :
507       9659  0.2  0.0      0     0 pts/7    Z    09:09   0:04 [java] <defunct>

Et lorsque je tapais kill -9 9659 ca ne donnait rien.

Il faut en fait tuer les parents de ce process :
ps -ef | grep defunct | awk '{print "kill -9 ", $3}'


Arrêter proprement un script Java

Ci-dessous un programme qui appelle en boucle la méthode processSomething(...) avec un sleep de 5 secondes.

Il faut donc traiter les user interrupts dans deux cas : 
  • le cas où l'interruption se fait lors de l'exécution d'un processSomething(...) 
  • et le cas où l'interruption se fait lors du sleep de 5 secondes.

public class StopSample{
    public static boolean running = true;

    public static void main(String [] args){
        new StopSample().processMain();
    }
    public void processMain() {
        // si on interrompt durant le processSomething(...) plus bas (cas 1) :
        Runtime.getRuntime().addShutdownHook(new Thread() {
            public void run() {
                StopSample.running = false;
                logger.info("Arret du programme suite à un user interrupt");
            }
        });
        try {
            for (; running;) {
                processSomething(...);
                Thread.sleep(5000);
            }
        } catch (InterruptedException e) {
            // si on interrompt durant le Thread.sleep (cas 2) :
            logger.info("Arret du programme suite à un user interrupt");
            System.exit(0);
        }
}

Lien : http://www.roseindia.net/javatutorials/hooking%20_into_the_shutdown_call.shtml

mardi 25 janvier 2011

Définir une variable d'environnement sous Linux

  • Pour rajouter une variable, le temps de la session linux courante:

          - sous bash/sh :
export PATH=$PATH:/path1/toto:/path1/titi

          - sous tcsh/csh :
set PATH=($PATH /path1/toto /path1/titi)


  • Pour rajouter une variable qui soit visible à chaque login:

          - sous bash/sh :
echo 'export PATH=$PATH:/path1/toto:/path2/titi' >> ~/.bashrc

          - sous tcsh/csh :
echo 'set PATH=($PATH /path1/toto /path2/titi)' >> ~/.cshrc


lundi 24 janvier 2011

Rechercher une boite aux lettres

Le site de LaPoste propose un moteur de recherche permettant de trouver les boîtes aux lettres les plus proches d'une adresse donnée.




jeudi 20 janvier 2011

"Facebook n'existait pas il y a un an" (Valérie Pecresse sur France 2)

Dans l'émission "Face aux Francais" sur France 2, elle a declaré hier :

L’économie numérique connait des révolutions tous les jours, quand on voit qu'aujourd'hui Facebook détrône Google, Facebook qui n'existait pas il y a un an

No comment...

Python élu langage de l'année 2010


Le langage qui a obtenu la plus forte progression est Python, avec +1.81% (passant du 7eme rang au 5eme).

Professionnalisme controleurs SNCF

J attendais que l occasion se présente pour publier ce post. Au moment où je l ecris, je suis dans le TER qui est parti de Melun à 9h15, en direction de Paris.

Il y a en face de moi 6 controleurs (qui n ont controlé que mon wagon) et qui cause depuis au moins une quinzaine de minutes des congés à la SNCF.

Ca ne donne pas du tout une image pro...

mercredi 19 janvier 2011

Silicon Valley vs Europe

Quand on créé une entreprise, il faut penser "globalement" et ne surtout pas penser "localement" si l'on souhaite vraiment que ca marche.

L'immense majorité des gens de la Silicon Valley pense de cette facon et c'est pour ca qu'ils reussissent plus facilement.

Par ailleurs, c'est dans la Silicon Valley que se trouve l'argent.


Voici un post de Loic Le Meur fort interessant.

Jurisprudence délit de marchandage

Trouvé sur Wikipedia :



La jurisprudence établit qu'il y a délit de marchandage notamment dans les cas suivants :

    * le personnel sous-traité travaille pour un seul client depuis plusieurs années ;
    * le personnel sous-traité reçoit ses instructions de l'encadrement du client ; le client contrôle lui-même le suivi, définit les tâches et les lieux d'exécution ;
    * le personnel exécute la totalité de sa mission dans les locaux du client, et est soumis à des horaires identiques à ceux du personnel du client ;
    * le client fournit les matériaux, les pièces de rechange, met à disposition son outillage, ses véhicules, des locaux lui appartenant, ses documents, etc.
    * la rémunération du sous-traitant est calculée au temps passé par son personnel.

mardi 11 janvier 2011

ORA-28000: The Account is locked

Comment unlocker ? ;o)

Ben tout simplement, via un compte admin Oracle :

SQL> alter user scott identified by tiger account unlock;

Crontab, howto

Syntaxe générale :

*    *    *    *    * command to be executed 

-    -    -    -    - 
|    |    |    |    | 
|    |    |    |    +----- day of week (0 - 6) (Sunday=0) 
|    |    | +------- month (1 - 12) 
|    | +--------- day of month (1 - 31) 
| +----------- hour (0 - 23) 
+------------- min (0 - 59)

Générer un fichier de log :

* * * * * rm toto.txt > /var/log/cron_mv.log

Désactiver l'envoi de mail :

Par défaut, un email est envoyé au user lancant le cronjob. Pour ne pas envoyer de mail :
* * * * * rm toto.txt >/dev/null 2>&1

Variables d'environnement par défaut:

Par défaut, crontab initialise 4 variables d'environnement :
HOME=le repertoire home de l'utilisateur
LOGNAME=id de l'utilisateur
PATH=/usr/bin:/usr/sbin:.
SHELL=/usr/bin/sh 


Variables d'environnement personnalisés:
Deux méthodes

-soit les initialiser dans le script appelé par crontab :

crontab:
* * * * * myscript.sh

myscript.sh:
#!/bin/bash
MYVAR=PROD
LANG=en_US.UTF-8
export MYVAR
export LANG
...
 

-soit les initialiser dans crontab :

crontab:
MYVAR=PROD
LANG=en_US.UTF-8
 
* * * * * myscript.sh

Attention, la valeur de la variable n'est jamais interpretée. Ainsi, PATH = $HOME/bin:$PATH ne fonctionnera pas comme on s'y attendrait.

Coder vite / coder bien, pas facile de trouver le juste milieu

Trouvé sur XKCD (le site web du dessinateur Randall Munroe) :



Categories