Utiliser Git pour envoyer du code versionné sur Github photo

Utiliser Git pour envoyer du code versionné sur Github

Git – et son homologue Github – permet de versionner votre code afin de pouvoir commenter les changements de code, revenir en arrière et annuler une modification en cas de problème, tenir une feuille de route, accepter des demandes de modifications venant d’autres développeurs (pull requests) et permettre la collaboration de plusieurs personnes sur un même projet.

Voici un petit tuto pour vous donner les commandes essentielles qui permettent de créer le dépôt, ajouter du code et l’envoyer sur Github.

Installation de Git

Commençons par l’étape obligatoire qui est l’installation de Git sur votre système d’exploitation:

MacOSX : résoudre l’erreur xcrun: error: invalid active developer path

Sous MacOSX, lorsque vous lancez une commande git, vous pouvez obtenir le message d’erreur suivant:

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrunCode language: JavaScript (javascript)

Cela signifie qu’il vous manque les outils de développement XCode. Cela peut arriver après chaque mise à jour d’OSX donc vous pouvez les installer avec:

sudo rm /Library/Developer/CommandLineTools -rf
sudo xcode-select --install

Créer un nouveau dépôt Git et l’associer à votre dépôt GitHub

Placez-vous dans le répertoire qui contient votre code. On crée un nouveau dépôt Git avec:

git init

Cela initialise votre répertoire avec les dossiers cachés de git. On ajoute maintenant l’adresse de notre dépôt sur GitHub:

git remote add origin https://github.com/example/example-projectCode language: JavaScript (javascript)

Nous allons maintenant pouvoir ajouter notre code.

Ajouter et valider votre code

Pour ajouter des fichiers, on utilise la directive add:

git add *
git add <filename>Code language: HTML, XML (xml)

Ensuite, on valide avec un message qui explique la validation des changements:

git commit -m "Ajout des fichiers du projet"Code language: JavaScript (javascript)

A ce stade, le fichier est dans le HEAD de git, mais pas encore dans votre dépôt distant. On l’envoie donc sur GitHub avec:

git push origin master

Pour mettre à jour votre dépôt local vers les dernières validations qui se trouvent sur GitHub (attention, cela écrase les fichiers locaux!), exécutez la commande:

git pull

Voilà, c’est un petit mémo simple mais il permet déjà de se servir des principales fonctions de git.

jQuery : sélectionner un élément dont l'ID ou la classe commence ou finit par une chaîne photo 1

jQuery : sélectionner un élément dont l’ID ou la classe commence ou finit par une chaîne

Il peut arriver que l’on ait besoin de sélectionner un élément dont l’ID ou la classe commence ou finit par un nom défini, pour pouvoir le modifier ou le manipuler.

Évidemment, si il possède un ID ou une classe bien défini, on utilisera son ID ou sa classe. Par contre, si aucune classe n’est définie par exemple, il faudra utiliser une expression régulière (regex).

On peut faire cela très simplement avec jQuery.

Sélectionner tous les éléments dont l’ID commence par toto_

Prenons un petit exemple, nous allons chercher à sélectionner tous les élements dont l’ID commence par toto_:

jQuery('[id^=toto_')Code language: JavaScript (javascript)

Le signe ^ signifie que l’on se place en début de chaîne dans l’expression régulière. Ensuite, il suffit d’indiquer la chaîne à chercher, c’est-à-dire toto_ dans notre cas.

S’il s’agit d’un champs de formulaire <input>, on trouvera donc:

<input id="toto_01" type="number" />
<input id="toto_02" type="number" />
<input id="toto_03" type="number" />Code language: HTML, XML (xml)

Sélectionner tous les éléments dont l’ID finit par _toto

Cherchons maintenant à sélectionner tous les éléments dont l’ID finit par _toto:

jQuery('[id$=_toto')Code language: JavaScript (javascript)

Cette fois, on utilise l’argument $, qui signifie la fin d’une chaîne de caractères.

Exemple concret : remplacer le type de tous les champs de formulaire dont l’ID finit par -money

J’ai récemment eu à modifier le comportement d’une page de réglages d’un plugin pour WooCommerce.

En substance, les champs étaient de type number, ce qui est problématique car ils ne permettent que des nombres entiers. Or, s’agissant d’un système de conversion de devises, il était primordial d’avoir accès à des nombres flottants, avec des virgules.

La solution est de cibler tous les champs finissant par -moneyet d’en changer le type de number à text, ce qui se fait très facilement avec la requête suivante:

jQuery('[id$=-money]').attr('type', 'text');Code language: JavaScript (javascript)

Et si l’on veut cibler les classes?

Dans les exemples précédents, il suffit de remplacer le mot id par le mot class.

Flipsyde - Someday photo

Flipsyde – Someday

[Chorus]
Someday we gonna rise up on that wind you know
Someday we gonna dance with those lions
Someday we gonna break free from these chains and keep on flyin’

[Verse 1]
They tellin’ me it’s all good just wait
You know you’re gonna be there someday
Sippin’ on Jim Beam ok
Gotta get these things one day
Till then do another line you know
Searching for that other high
Stop or I gotta steal then steal
Kill or I’m gonna be killed
I got a sack in my pocket
Conscious yellin’ drop it
You know we’re gonna lose it someday
And we tryin’ to hold it all together but the devil is too clever so
I’m gonna die you gonna die we gonna die Someday one day I said

[Chorus]
Someday we gonna rise up on the wind you know
Someday we gonna dance with those lions
Someday we gonna break free from these chains and keep on flyin’

[Verse 2]
Try to lie but it ain’t me Ain’t me
Try to look but I can’t see
Can’t stop right now cause I’m too far and I can’t keep goin’ cause it’s too hard
In the day in the night it’s the same thing
On the field on the block it’s the same game
On the real if you stop then it’s no pain but if you can’t feel pain then it’s no gain
Rearrange and you change and it’s all bad and you try to maintain but you fall back
And you crawl and you slip and you slide down
Wanna make it to the top better start now
So I hold my soul and I die hard
All alone in the night in the graveyard
Someday one day I’m gonna be free and they won’t try to kill me for being me
Hey someday

[Chorus]
Someday we gonna rise up on that wind you know
Someday we gonna dance with those lions
Someday we gonna break free from these chains and keep on flyin’

If you know how this is
Gonna see it’s not that easy
Don’t stop get it till it’s done
From where you are or have begun
I said keep on try a little harder to see everything you need to be
Believe in your dreams
That you see when you’re asleep

[Chorus]
Someday we gonna rise up on that wind you know
Someday we gonna dance with those lions
Someday we gonna break free from these chains and keep on flyin’

Activer SSH sous CPanel photo 4

Résoudre l’erreur SSH: Missing privilege separation directory: /run/sshd

Sur un nouveau serveur à base d’Ubuntu Server 18.04, j’obtiens cette erreur à la suite d’un test du service ssh:

sshd -t

Could not load host key: /etc/ssh/ssh_host_ed25519_key
Missing privilege separation directory: /run/sshdCode language: JavaScript (javascript)

Les solutions à ces deux problèmes sont triviales, cela se règle en deux petites commandes.

L’erreur Could not load host key

L’erreur Could not load host key survient lorsque certaines clés SSH n’ont pas été générées lors de l’installation du système d’exploitation du serveur.

Dans le cas du serveur qui nous occupe, il nous manque la clé de chiffrement ED25519 qui doit se trouver à l’adresse /etc/ssh/ssh_host_ed25519_key.

Pour générer toutes les clés de chiffrement SSH manquantes, une seule commande suffit:

ssh-keygen -A

L’argument -A signifie que l’on génère toutes les clés (All keys). Voici le résultat sur le serveur:

ssh-keygen: generating new host keys: ED25519Code language: JavaScript (javascript)

L’erreur Missing privilege separation directory: /run/sshd

Cette erreur apparaît lorsque le répertoire mentionné – ici /run/sshd – n’a pas été correctement créé. Il suffit de le créer:

mkdir -p /run/sshd

Vérifiez la configuration SSH:

sshd -t

S’il n’y a plus d’erreur, vous pouvez alors redémarrer le service ssh:

service ssh restart

Et voilà, problèmes réglés.

Tony Jaa photo

Kung Fu : Tony Jaa

Tony Jaa, est un acteur thaï d’arts martiaux et un chorégraphe spécialisé en Kung Fu, Muay Boran et Taekwondo, ainsi que dans le maniement d’épées et en gymnastique.

À 15 ans Tony Jaa devient l’élève de Panna Rittikrai qui dirige une équipe de cascadeurs nommée Muay Thai Stunt. Jaa fait diverses apparitions dans ses films.

Il continue à travailler en tant que cascadeur, apparaissant dans le film Mortal Kombat, destruction finale (Mortal Kombat: Annihilation).

Son premier grand film, dans lequel il tient le rôle principal Ting, fut Ong-bak co-réalisé en 2003 avec Panna Rittikrai. Tony Jaa y effectue toutes les cascades sans assistance technique ou effets spéciaux.

Ensuite, il fera un autre film dont il a le rôle principal: Tom-Yum-Goong (The Protector aux États-Unis).

Il déclare avoir été influencé dès sa jeunesse par les stars chinoises de films d’actions : Bruce Lee, Jet Li et Jackie Chan, bien que son style de combat dans Ong-Bak soit fidèle à ses racines thaïlandaises.

Une détente et un style phénoménal!

No hotlinking for images

NginX: éviter le hotlinking

Le hotlinking

Le hotlinking (ou liaison automatique ; aussi connu en anglais sous les noms de inline linking, leeching, piggy-backing, direct linking ou offsite image grabs) consiste à utiliser l’adresse d’un fichier publié sur un site web, le plus souvent une image, pour l’afficher sur un autre site, sur un blog, dans un forum, etc.

En d’autres termes, au lieu d’enregistrer l’image et de l’installer sur son propre serveur Web, le hotlinkeur crée un lien direct vers le serveur d’origine.

Si vous êtes sous Apache, voici comment supprimer le hotlinking sous Apache Server.

Désactiver le hotlinking sous NginX

Sous NginX, il peut être très utile d’éviter que des gens publient vos photos ou images depuis votre site sur le leur, en gardant les liens de votre serveur et en consommant toute votre bande passante (ce qui peut représenter un surcoût pour vous).

Il suffit d’éditer votre server block et d’y ajouter cette directive:

location ~ \.(gif|png|jpeg|jpg|svg|webp|avif)$ {
    # Define allowed referers - your own domain and specific external domains
    valid_referers none blocked 
                  ~\.google\. 
                  ~\.bing\. 
                  ~\.yahoo\. 
                  ~\.facebook\. 
                  ~\.pinterest\. 
                  ~\.twitter\. 
                  yourdomain.com 
                  *.yourdomain.com 
                  server_names;

    # Block requests with no or invalid referer
    if ($invalid_referer) {
        return 403;
    }
}
Code language: PHP (php)

N’hésitez pas à rajouter les domaines que vous souhaitez whitelister et qui sont autorisés à utiliser vos fichiers média.

Relancez ensuite NginX avec:

service nginx restart

Cela devrait quelque peu soulager votre serveur et garantir votre bande passante à vos visiteurs.

Buckethead - The Interworld And The New Innocence photo

Buckethead – The Interworld And The New Innocence

Praxis est le nom d’un projet de rock expérimental dirigé par le producteur et bassiste Bill Laswell et mettant en vedette le guitariste Buckethead et le batteur Bryan “Brain” Mantia dans presque toutes les incarnations du groupe.

Le groupe a travaillé avec de nombreux autres artistes tels que Serj Tankian de System of a Down, Iggy Pop, DXT et DJ Disk.

Praxis combine des éléments de différents genres musicaux tels que le funk, le jazz, le hip-hop et le heavy metal dans une musique hautement improvisée.

Le premier album du groupe, Transmutation (Mutatis Mutandis), sorti en 1992, a été bien accueilli par les critiques. Praxis était composé de Buckethead, du clavier Bernie Worrell, du batteur Brain, du bassiste Bootsy Collins et d’Afrika Baby Bam dans le rôle “AF Next Man Flip” sur les platines. Bill Laswell a dirigé le projet et a servi de producteur et de co-auteur d’une grande partie du matériel de l’album.

Voici The Interworld And The New Innocence, interprété par Buckethead:

Extrait du concert de Giant Robot du 29 mai 2004 à l’Independent de San Francisco, California.

Linux : obtenir la valeur numérique du chmod photo

Linux : obtenir la valeur numérique du chmod

chmod permissions compressor

Je vous ai déjà parlé du chmod et du chown de manière extensive mais aujourd’hui on va un tout petit peu plus loin.

La valeur du chmod telle qu’elle apparaît dans le terminal est un peu esotérique. Prenons par exemple le chmod d’un fichier standard de WordPress : -rw-r-----, cela demande une petite gymnastique intellectuelle pour réaliser quels sont les droits véritables.

Je vous propose donc une petite commande qui va vous simplifier la vie, de manière à vous donner la valeur numérique du chmod des fichiers et répertoires.

Il vous suffit d’utiliser la commande stat comme ceci, dans votre fenêtre de terminal:

stat -c '%a %U:%G %n' *Code language: JavaScript (javascript)

Notes:

  • -c permet de formater la sortie avec la template entre apostrophes
  • %a donne la valeur octale du chmod
  • %U donne le nom de l’utilisateur du chown
  • %G donne le groupe de l’utilisateur du chown
  • %n donne le nom du fichier

Et voilà simple et efficace!

Zack Hemsey - Vengeance photo

Zack Hemsey – Vengeance

Zack Hemsey est un compositeur et musicien américain qui a produit pas mal de musiques pour des films et bande-annonces. L’une de ses musiques, “Mind Heist” a notamment été utilisée pour le trailer d’Inception.

Voici “Vengeance” :

On peut retrouver “Vengeance” dans l’excellent film The Equalizer, dans un des trailer de la saison 2 de Game of Thrones, et dans celui de 24: Live Another Day.

Death of a Salesman: Tragedy versus Social Drama photo

Death of a Salesman: Tragedy versus Social Drama

  1. Death of a Salesman : an extended introduction
  2. Family in Death of a Salesman
  3. Death of a Salesman: Tragedy versus Social Drama
  4. Death of a Salesman: the play’s structure, a memory play

Lots of critics have debated the tragic dimension of Death of a Salesman. Two levels have often been considered: the notion of genre, by referring to Aristotle’s Poetics, and the possibility of a new approach to tragedy, that would be concerned with the response of mankind to rapid technological advance.

The generic discussion (from genre) has often borne on an opposition between social drama dealing with the little man as a victim of an oppressive, social and economic system, and tragedy in which the transcendental aspect is emphasized.

Miller himself has reflected on this issue in a seminal essay Tragedy and the Common Man (The New York Times, February 27, 1949). It is clear that Death of a Salesman raises the possibility of a modern tragedy because unlike the absurdist theatre (Ionesco and Beckett), it postulates that ‘life has meaning’.

The question of the tragedy in contradistinction to social drama will be treated along three axes.

Firstly, it can be argued that Death of a Salesman is more than a social document in that it creates a modern myth through a central symbol: salesmanship (Eugene O’Neill: The Iceman Cometh).

Secondly, we may wonder whether or not Loman is invested with a tragic dimension.

Thirdly, is Death of a Salesman a ruthless indictment of American Society, along Marxist or, at least radical (in the American acceptation) lines, or does it go much beyond its social and historical context to bring about tragic catharsis in the audience?

Social testimony versus tragic myth?

The contemporary absence of tragedy

According to Miller, the absence of tragedy in contemporary American drama (1949) can be explained by the fact that man’s motivations are increasingly accounted for in purely psychiatric and sociological terms.

Literature tends to suggest that man’s miseries are born and bred within man’s mind: this is the psychological argument or, that society must be held responsible for man’s distress because of the deterministic laws that govern it – this is the point made by sociologists.

In each case, the possibility of the tragedy is denied because tragedy stems from an individual choice to assess, then to call into question and ultimately to rebel against the order of things.

“The thrust for freedom is equality in tragedy which exalts” (Tragedy and the Common Man, p.5)

If Willy Loman is simply considered as the poor, helpless victim of capitalist big business, then he is deprived of any tragic dimension. If he is merely a cog in the gigantic capitalist wheel that eventually crushes him to death, he is denied a tragic dimension. If he’s driven to madness, he has no tragic potential either.

Lire la suite

Activer SSH sous CPanel photo 4

Activer SSH sous CPanel

ssh logo

Il peut être extrêmement utile d’activer la connexion SSH chez certains hébergeurs qui la proposent, comme SiteGround. Cela permet de gagner pas mal de temps, notamment lorsque l’on utilise wp-cli.

Mais avant de pouvoir se connecter, il faut d’abord l’activer dans les options de CPanel.

Activation de la connection SSH dans CPanel

Rendez-vous dans CPanel > Security > SSH Shell Access :

cpanel ssh

Ensuite, cliquez sur le bouton Manage SSH Keys:

cpanel ssh manage

Nous avons ensuite le choix entre deux solutions : soit nous créons la paire de clés privées/publiques sur le serveur et nous les copions sur notre machine locale, soit nous la créons en locale et l’envoyons sur le serveur. Je suis plutôt pour la seconde solution.

Création des clés SSH

On se rend dans le répertoire SSH de notre utilisateur et on liste le répertoire:

cd ~/.ssh
ls

Si le fichier id_rsa.pub existe déjà, il suffit d’afficher son contenu:

cat id_rsa.pubCode language: CSS (css)

Si le fichier n’existe pas, il suffit de le créer:

ssh-keygen

Copiez le contenu du fichier, il s’agit de la clé publique que nous allons importer dans CPanel.

Import de notre clé SSH dans CPanel

Cliquez sur Import Key:

cpanel ssh import

Renommez la clé pour id_rsa puis collez le contenu de votre clé SSH publique:

cpanel ssh import ssh key

Il ne vous reste plus qu’à vous connecter en SSH au serveur. Suivant votre hébergeur, le numéro du port SSH peut changer pour des raisons de sécurité. Chez SiteGround, SSH tourne sur le port 18765:

ssh CPANEL_USER@CPANEL_SERVER -p18765Code language: CSS (css)

Bon ssh !

Death of a Salesman: the play's structure, a memory play photo

Death of a Salesman: the play’s structure, a memory play

  1. Death of a Salesman : an extended introduction
  2. Family in Death of a Salesman
  3. Death of a Salesman: Tragedy versus Social Drama
  4. Death of a Salesman: the play’s structure, a memory play

If the external plot of Death of a Salesman may be divided into chronologically organised sequences: Act One (Monday evening and night); Act Two (Tuesday), and the Requiem a few days after (Willy’s burial), the same is not true of the internal plot: Willy’s stream of consciousness.

In “the inside of Willy’s head”, past and present are blurred. Memories constantly impinge on present situations and, conversely, the present is put at some distance by the flood of recollections.

The past/present dichotomy is replaced by a non-past; non-present, in which different temporal layers commingle and coalesce. This non-past/non-present is confined to Willy’s inner mind, to Willy’s subjective world.

‘A mobile concurrency of past and present’

(The expression is by Miller, from his introduction to his Collected Plays, p.26)

Miller’s aim in Death of a Salesman is to erase any gap between a remembered past – that would be evoked through words – and a present that would be performed on stage. In Death of a Salesman both past and present are given theatrical representation.

There is no clear-cut boundary between them. Thanks to the expressionistic technique of scrim and curtain, the characters may exist in both the present and the past. For example, Biff and Happy are seen as teenagers and adults successively.

There are no flashbacks in Death of a Salesman. Better than the erroneous term flashback, the phrase double exposure would be more appropriate. In Willy’s mind, past and present exist on the same level, Willy perceives himself both in the present and in the past – which is made up of various strata.

In a way, Willy is schizophrenic; overwork, worry and repressed guilt have caused his mental collapse. In this state of nervous breakdown, past and present are inextricably mingled, time is, as it were, exploded.

In Death of a Salesman, Willy is both the self-remembering I, looking back upon himself, and the remembered I itself, that is to say the salesman as he used to be. Similarly, the same actors play their present and past selves, this is the case not only for Willy’s sons but also for Bernard, who has become a successful lawyer.

The dramatic unities, notably time, have been abolished in the most radical sense, indeed the function of memory entails a multiplicity of temporal levels, a series of different locations (Boston; New York but also the Prairie – through Willy’s father), and finally a loss of any fixed identity.

In a sense, the exploded house, with its transparent walls, its scrims and curtains is an objective correlative (a concrete, practical, tangible image) for an exploding consciousness, in which spatial and temporal fragments get intertwined.

Lire la suite