Derniers billets

Flux Rss
<< previous 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 next >>
 

[cakephp]Link in post method - en

By esion - the 2007-09-20 14:57:00 - in Cakephp

(0) Comments

The problem :


CakePhp helpers does link only with GET method. Well It's not the better way to delete a resource and it should be POST method.

How to


... make a hypertext link with POST method :

Then we should use javascript in order to create a form :
Delete

When the user confirm the action, this will create a form which will be sent to the application.

In CakePhp


The helper


The way I use, I create a custom helper which use the original html->link helper :
//file: app/views/helpers/html2.php
class Html2Helper extends Helper {
//this allow my helper to use the original one
var $helpers = array('Html');

function link($title, $url = null, $htmlAttributes = array(), $confirmMessage = false, $escapeTitle = true, $return = false) {
//add form with post method thanks to javascript only if confirmMessage present

if ($confirmMessage) {
$confirmMessage = str_replace("'", "\'", $confirmMessage);
$confirmMessage = str_replace('"', '\"', $confirmMessage);
//here we set our POST method
$htmlAttributes['onclick']="if (confirm('$confirmMessage')) { var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'post'; f.action = this.href;f.submit(); };return false;";
}
//we use the link helper to finalized it
$output = $this->Html->link($title, $url, $htmlAttributes, null, $escapeTitle, $return);
return $this->output($output, $return);
}
}
?>

Use it : the view


You can insert into any view. Don't forget to specified it in your controller. Confirm Message is required :

link('post link', '/pages/index', null, 'Are you sure?'); ?>

The Controller


Specify the helper and check this:
//file: app/controller/pages_controller.php

class PagesController extends AppController {

var $name = 'Posts';
//hell yeah! the helper :
var $helpers = array('Html2');
//check the request type :
var $components = array('RequestHandler');

function index(){
//if the request use post method : return true
if($this->RequestHandler->isPost())
debug('request is post');
else
debug('request is not post T_T');
}
}
?>

Then ...


Now you can modify those scripts to fit with RESTful app using PUT, DELETE ...
 
 

[ruby]Typo installation svn

By esion - the 2007-09-10 12:43:00 - in Code

(0) Comments

Ruby on rail c'est marrant, ça c'est dit. Un des concepts de ce framework est de ne pas réinventer la roue (peut être est-ce une évidence?! Captain Obvious). Ce qui m'a ammené à tester Typo et ainsi le selectionner comme support pour de futurs applications. Typo est un moteur de blog (weblog engine ... suis-je clair ?).

Je débute alors sur la version stable 4.1.1. Aujourd'hui j'ai quelque bout de code à intégrer, le problème c'est que la nouvelle version risque de chambvouler tout ça et de fortement limiter les futurs migrations. Le système de plugins n'est pas très souple. Alors autant bosser sur la version SVN qui integre une nouvelle gestion des plugins.

Mais ... woops pourquoi ça marcheupas?!

La méthode :


Tirée d'un blog nippon

Prérequis


* Ruby et Ruby on Rails installés et fonctionnels
-> tuto : la totale sur serveur dédié verifier les versions des softs.
-> tuto : Environnement de développement sur ubuntu

Downloading =====> |


On récupère la dernière version de typo sur le serveur SVN (sur linux c'est plus facile ^_^)
$ mkdir mytypo && cd mytypo
$ svn checkout http://svn.typosphere.org/typo/trunk typo

Configuration


Ensuite on configure l'accès à la base de donnée :
$ gedit config/database.yml

login: &login
adapter: mysql
host: localhost
username: mon_nom
password: mon_password
Il suffira de remplir avec les bons paramètres.

Par défaut les applications rails utilisent l'environnement de développement, on creer la base de données qui va bien :
$ sudo mysql> create database typo_dev;

Et maintenant on install les tables :
$ rake db:migrate

no such file to load -- rcov/rcovtask
...

Whooops !
Et oui il manque un petit truc :

$ sudo gem install rcov
Optez pour le premier choix : 1. rcov 0.8.0.2 (ruby)

Et maintenant la migration fonctionne :
$ rake db:migrate

Fight Oh


Il ne reste qu'à lancer le serveur et à configurer le blog :
$ ruby script/server

Si tout s'est bien passé, le serveur est lancé : http://localhost:3000
 
 

[DEV] MyCalc - Ma première appli Java

By esion - the 2007-09-05 12:33:00 - in Code

(0) Comments

Après un retour aux sources de quelques jours, c'est à dire avec pour seule connexion un bon vieux modem bas-débit facturé au coût d'une communication locale, je me lance dans le langage Java.

Ok, ce langage a fait ses preuves (en tout cas il reste à la mode). Je me devais alors de prendre un aperçu pour ne pas rester dans le flou intersidéral à ce sujet. Alors avant de prendre mon billet pour la cambrousse je charge sur mon portable (l'ordinateur) une documentation (avec quelques fautes de frappe, succincte mais suffisante et assez claire) ainsi qu'un JDK (Java Dev Kit) un peu au hasard.

Je n'ai pas encore tout capté des concepts du langage comme par exemple la création d 'évènements multi-thread ou ce genre de bizarreries sûrement très pratique pour une meilleurs optimisation des ressources (bla blabla), mais quelle joie d'avoir une interface utilisateur fonctionnelle en quelques jours.

Le résultat, une application qui ne sert à rien et qui affiche le contenu des boutons sur lesquels on clique... (Mais c'est z'ubër!) Le but serait de réaliser une petite calculette.

C'est partit pour un code source commenté :
/**File : MyCalc.java
* version : 0.000000.1
* Ma première application en Java
* Ne fait rien mis à part afficher les boutons cliqués
*/


//Compilation : javac MyCalc.class
//2 warnings sur le jdk 1.5 :'(
//Lancement : java MyCalc

import javax.swing.*;
//je dois melange swing et awt pour l'interface graphique : a revoir
//import javax.swing.border.*;
import java.awt.*;
//permet de gerer les évennements utilisateurs
import java.awt.event.*;

//definition d'une classe correspondant au nom de fichier
public class MyCalc extends JFrame implements ActionListener{

//Message par défaut
protected JLabel view_msg = new JLabel("Hello World!");

public MyCalc(){
super();
setTitle(" My Calc ");

//Définition de la fenêtre principale
this.initGraphic();

//Todo: implement action in menu
//setMenuBar(new InitMenu());

//Style de layout principal (5 positions de composant possible)
//(haut, bas, gauche, droite, centre : NORTH, SOUTH ...)
setLayout(new BorderLayout());

this.initBody();
this.buttonBoard();

//Pour que les composants de l'interface soient correctement placés
//Mais fout en l'air la taille de la fenêtre quand elle est spécifiée
pack();
//Remplace show() qui est deprecated :
setVisible(true);
}

protected void initGraphic(){
//taille de la fenetre
setSize(205, 155);
//setResizable(false);
//position de la fenetre
setLocation(250, 250);
//permet de quitter l'application
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
}

protected void initBody(){
Panel p_body = new Panel();
add(p_body, BorderLayout.NORTH);
//Message d'accueil et boutons cliqués dans un panel au nord
//faire 5 pas après le cocotier pour trouver le trésor
p_body.add(view_msg);
}

protected void buttonBoard(){
//Ah! et le panel est un composant conteneur de composants
//pratique!
Panel p_btns = new Panel();
add(p_btns, BorderLayout.SOUTH);

//FlowLayout affiche les composants à l'affilé
//La grille est mieux ici
p_btns.setLayout(new GridLayout(4,3));

for (int num = 1; num <= 9; num++){
String name = "b_" + num;
//On ne fait pas n'importe quoi avec les types : Integer.toString
//Mon chiffre devient une chaîne de charactères
JButton $name = new JButton(Integer.toString(num));
//$ pour accéder à "l'adresse" de la variable (merci pif)
$name.addActionListener (this);
p_btns.add($name);
}

//Button c'est moins stylé
JButton b_star = new JButton("*");
b_star.addActionListener (this);
JButton b_0 = new JButton("0");
b_0.addActionListener (this);
JButton b_diese = new JButton("#");
b_diese.addActionListener (this);

p_btns.add(b_star);
p_btns.add(b_0);
p_btns.add(b_diese);

//une class "bouton" serait utile pour éviter de se repeter (DRY)
}

public void actionPerformed (ActionEvent e) {
//Le meilleur moyen pour activer telle ou telle action en fonction de l'interaction
//Object source = e.getSource();
//if(source == b_star) this.view_msg.setText("Star");
//Sinon utiliser le texte du bouton (pas bien):
//if(e.getActionCommand() == "*") this.view_msg.setText("*");

this.view_msg.setText(e.getActionCommand());
}

//pas necessaire pour un applet
public static void main(String argv []){
new MyCalc();
}
}
 
 

[design]Icônes

By esion - the 2007-07-13 12:33:00 - in Infographie

(0) Comments

Je continue mes fabulations de designer et me suis lancé dans la créations d'icônes personnalisés pour mes différentes et futurs applications. Autant avoir les siennes plutôt que de les pomper allègrement sur le net ou devoir mettre un lien vers le site de l'auteur qui les a gentillement mis à disposition sous licence plus ou moins libre.

 

Bien sûr je ne nierai pas que je me suis inspiré de ces différentes sources, et d'ailleurs ce qui m'a frappé dans cette exercice c'est que la recherche de l'illustration liée au sens comme lors de la création d'un logo n'est pas du tout évidente (et puis ça ne serait pas drôle dans le cas contraire).
Par exemple comment symboliser quelque chose de completement abstrait ou immateriel : comment illustrer le concept de "catégorie"?

 

Alors on se fait une jolie introspection des vieux cours sur la sémiologie que l'on avait trop largement survolés pendant les études et on se balade sur des sites qui claquent et qui parle de pictogrammes.

 

D'une certaine manière on peut penser "verbe" puis ne pas réflechir et lacher en déchaînant la fureur et en criant très fort à quoi ça fait penser, un peu comme dans les jeux de société style Pictionary© (En fait j'aurai dû y jouer plus souvant étant gamin, ça m'aurait sûrement aidé). Exemple : "Réparer" => "Clé à molette" (facile).
Mais on parle de web et certains verbes reviennent sans relache, peu importe si l'application est RESTful ou non :

 

  • GET : "recevoir" =>
  • POST : "envoyer" => ou
  • DELETE : "effacer" => ou
  • PUT : "mettre à jour" ... et M@**#!

Tout ceci pour dire que, wé bin woulà quoi :

 

Même si on a une illustration chargé de sens, il faut nécessairement il faut la mettre en adéquation avec des mots, qui ne seront plus forcément obligatoires grâce à l'habitude que l'on obtient avec l'utilisation de l'application en question.

L'option "title" en html est alors fort pratique pour accompagner ces images :

  1. Accueil administration
  2. Nouveau billet
  3. Liste des billets (que je vais très vite revoir)
  4. Nouvelle catégorie
  5. Liste des catégories
  6. Liste de commentaires
  7. Nouvel administrateur (ou utilisateur)
  8. Liste des administrateurs
  9. Traduire

 

Une dernière note au sujet de l'exemple avec la clé à molette, cela nous amène directement à faire une recherche sur le symbole, qui n'en est pas moins "super" important. (Bien se concentrer au moment de lire "super" et bien forcer sur chaque début de syllabe).

 

[update]

Tout autant important, l'aspect multi-culturel de l'icônes qui ouvre encore beaucoup de portes pour se compliquer la vie, (Bien vu keusta ;).

 

Une dernière chose dont je n'ai pas parlé, ce sont les couleurs, qui meriteraient aussi une reflexion de toute une vie. Exemple le vert qui sous-entend "Wouai c'est bon" et le rouge "Oulà fais gaffe là!"

 
 

[Skate] Session verticale à Montpellier

By esion - the 2007-07-07 21:36:00 - in Skate

(0) Comments

Ouais verticale, verticale pas éxagerer non-plus, on se contente de ce qu'on a et c'est déjà pas mal, n'est-ce pas?!

Donc petite session, 2 riders, du soleil et quelques guêpes qui écourteront la séance photo souvenir.

 

 

 

 

Alley hop, votre hôte en fakie stalefish (pour les non-initiés : à reculons + la planche attrapée avec la main arrière par l'arrière ... en triangle évidemment)

 

Mr Thomas qui nous vient tout droit de montpellier (enfin juste à coté) en smith grind (c'est à dire le truck arrière sur le coping et celui de l'avant en dessous)


Et pour finir une photo qui n'a pas aucun interêt mis à part que je prêche ubuntu même sur les skateparks ^___^ avec mon super casque de gran'pa schtroumpf ... une raison en plus du logo de quake 3 que j'ai sur le bras pour me faire passer pour un taré.
Myself en sortie de fronside indy :


Pas fameux ou un goût de trop peu ou encore peut mieux faire?!
Béh l'attaque des guêpes a eu malheureusement un effet désastreux sur notre motivation. Et bien peut être un peu plus tard.

 
<< previous | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 next >>