Leave a comment

Fear litany privacy policy

No data is gathered by me.
I wont know who you are, how many times you run the app.

Nothing.

Leave a comment

Mini cours photo

[French only] J’ai retrouvé le support de cours que j’ai créé et utilisé pour faire un petit training à des copains et collègues il y a quelques années.

A l’époque, nous nous étions lancés dans une série “workshop du midi” où chacun apportait ses connaissances.
Ensuite, nous avons aussi fait du plus lourd, sur plusieurs séances lorsque le sujet était refusé par les RH comme formation professionnelle (j’ai fait la prog Android par exemple)

Il s’agit de la version pdf.

Leave a comment

Quel laptop acheter pour la rentrée ?

Ce post s’adresse aux étudiants des établissements où j’enseigne, je ne prétends pas pouvoir conseiller les étudiants de toutes les formations disponibles.

Pour la rentrée, on souhaite être prêt et avoir une machine toute neuve. C’est naturel.

Tout d’abord, n’oubliez pas de penser au marché de l’occasion.
Cela peut être du recyclé suite à un renouvellement de parc informatique d’une société, de l’occasion entre particuliers, etc …

Vous n’avez pas besoin d’une machine de guerre, j’entends par là un pc gamer surpuissant.
Surtout en première année d’info.
Pourtant ce sont parmi les meilleurs laptops pour programmer car l’écran est au-delà des 60hz, les composants sont censés être meilleurs afin de supporter l’overclocking, le clavier rétro-éclairé permet de coder la nuit, etc …

Les problèmes inhérants aux pc gamer sont:

  • le poids, à transporter tous les jours sur votre trajet jusqu’à l’école
  • le besoin de prise électrique, qui entraine des problèmes de placement dans les salles
  • les salles n’ont pas autant de prises électriques que d’étudiants

Autre évidence, vous n’avez pas besoin d’un mac pro/air/M1 etc …
Ces machines sont chères, ce sont des produits de luxe. De fait, plusieurs fois, j’ai eu des étudiants qui ne pouvaient pas travailler parce que leur mac était plein.
Et la RAM a manqué pour des cours big data.
Bref, vous devez vous équiper pour travailler et non pour paraitre.

A minima, votre laptop devrait tenir pour les 3 premières années de cours.

Idéalement

Idéalement, vous aurez un pc pour travailler et un pc pour jouer.
Parce que c’est dur de ne pas être tenté ou seulement même déconcentré par les icones de jeux AAA sur le bureau.

Ce qui ne veut pas dire “achetez deux machines”. Encore que si vous avez les moyens et la place, une bonne tour pour jouer …

Pensez au dual boot. Vous aurez deux systèmes d’exploitation.

Un pour jouer. L’autre pour travailler.
Linux Mint ne vous dépaysera pas de windows. Avec firefox et libre office, recherches et rapports se font tout aussi bien. Cerise sur le gateau, vous allez apprendre des choses

Au passage, une machine correcte à but sérieux peut tout à fait être un Raspberry Pi 3 ou 4.
Cela suffit pour travailler dans de nombreuses filières.

Mais si vous êtes là, c’est parce que vous allez coder et là, les besoins ne sont pas les mêmes.

Critères

Parmi les critères qui doivent vous guider pour votre choix

  • 16 GB extensibles (8 c’est insuffisant, l’OS en prends un partie, une autre partie peut être utilisée par la puce graphique intégrée dans certains processeurs). Oh, et des téléphones ont 8 Gb de RAM de nos jours.
  • Evitez la RAM soudée.
  • Une prise réseau RJ45
  • une prise HDMI pour présenter au tableau
  • un clavier discret. Sinon, cela sera une évidence quand vous ne prendrez pas de notes et une génance quand vous en prendrez.
  • Un disque dur suffisant pour faire un dual-boot
  • une webcam, pour le distanciel
  • des possibilités d’évolution (ajout de disque dur, de RAM, changer la puce wifi, remplacer la batterie) (donc pas de mac)
  • 4 coeurs minimum, en amd 4xxx ou 5xxx , qui consomment peu d’énergie
  • un disque SSD, surtout si vous achetez un pc d’occasion

Anecdotes

En dernier recours, lorsque des étudiants n’arrivent vraiment pas à installer Java, un IDE, et le projet alors la solution ultime est d’utiliser une machine virtuelle (avec VirtualBox). Cette VM, je la zippe avant de la transférer, ce qui a donné 7 Go la dernière fois.
Il faut donc 7Go pour stocker le zip en local, et un peu plus pour mettre la version dézippée sur le disque et encore quelques gigas our importer cette VM.
Oui, au final, cela chiffre et les SSD 256Go seront définitivement trop petits. Et cela prends un certain temps.

J’ai eu des cas de “monsieur je ne peux pas installer le logiciel, je n’ai plus de place”.
Symptomatique de l’étudiant qui a pris un mac book air, mais le moins cher.
Résultat, l’étudiant ne peut suivre le cours se dérouler.

Bon, on ne va pas au front avec un canif. Je ne parle pas du front-end 🙂

Conseils

N’oubliez pas d’acheter des cahiers et des stylos, c’est encore ce qui est le plus naturel et efficace pour la prise de notes.

La dure réalité est que les écoles sont souvent mal équipées en wifi et en prises électriques.
Alors, ne comptez pas sur un pc gamer et un drive dans le cloud.

Les marques “professionnelles” sont à privilégier. Ce post et de nombreuses autres choses sont écrites sur un pc d’occasion avec un i5-2540M donc un i5 de 2e génération (en 2021, nous en sommes à la 12e génération) acheté d’occasion 200€ (+100€ de SSD et +100€ pour 16Go de RAM).
Pour les curieux, c’est un HP elitebook 2560p.



Leave a comment

Wake up sounds

Do you know that using a song for waking up makes it sound despicable thereafter.
Even Bohemian Rhapsody. Could you believe that ?

Unless you love to get up

So, HERE IS a trio of files that you can use as ringtones. They are not as repetitive as default ringtones can be.
The multiple signals will wake you up in a state of creative mood

And because I’m generous, they are free for you (for private use of course) else send me money.

Unfortunately, I cant find the name of the online tool I used to create those masterpieces, my three best compositions.


Put them on your phone. Share your impressions

Leave a comment

CPC Memories

If we have met, you saw I am an older geek.
I’m from the Amstrad CPC Generation, I was blessed with a 6128 as my dad thought it was wasted time to watch a game load on 464 (from K7 tape).

While looking for vids of the Technimusique speech synthetizer to evaluate the gap with actual solutions, I found this video about Multiface II (which I hadnt). At 16:16 , I recognize a long forgotten familiar syntax

So here it is :

first : out &bc00, REGISTER

second out &bd00,VALUE

With the register being from this list , taken from https://cpcrulez.fr/coding_src-list-graphic-crtc-on-screen_effects_on_the_CPC464_POPU.htm


Register Function
0 Horizontal Total
1 Horizontal Displayed
2 Horizontal Sync Position
3 Sync Widths
4 Vertical Total
5 Vertical Total Adjust Vertical Displayed
7 Vertical Sync Position
8 Interlace and Skew
9 Maximum Raster Address
12 Start Address (high)
13 Start Address (low)

Messing with the registers I did two programs : a hacks and a “demo” which I share here from memory

HACK: Making sprites taller in Horizontal Beat’em up game (double dragon, vigilante, …)

How, messing with the interlacing so that there is an empty line between each real horizontal line. Needed to tweak the knob of “vertical something” at the back of the monitor.
Made my Amstrad less ridiculous compared to my friend’s Amiga

Demo: A fullscreen starfield (one layer only, no parallax) scrolling horizontally

Steps were
Paint it black : border 0, paper 0
Mode 0 ?
Draw random white dots on the screen
Mess with video register so that lines are not aligned but take full Horizontal space
Mess with video register so that lines take full Vertical space
Make a simple loop on register ?, from ? to ? and it simuletes movement

Extra layer: Add a logo to starfield.
1/ with drawing software make a logo with your nickname save it and close software
2/ Mess the video
3/Reopen drawing software load pic + ?nothing? + save it again

4/ restart computer for video reset, display pic. Must be messed, with lines shifted. Its the expected result

5/ Modify main prog to load pic

6/ Admire you name in full screen, moving indefinitely


I wonder if it would work as well on an emulator.
If you code it, capture video and share it !
Have fun.


Leave a comment

Some Bash magic, graph, csv

Unix shells are powerful. Scripts are useful.

I am working on a project for which I want to know if the master data is already present in my graph as I’ll process CSV files.

So, the idea is to get all the distinct unique values from a given column in all the csv file and count the

From this list, I then create an array that I use in a Cypher query like

MATCH (n:Label) 
WHERE n.property IN [The Array I created with the values]
RETURN count(n)

Here is the script, in Bash, the trick is to create an awk command for each file. It take an integer as parameter, 1 for the first column and so on (not 0, 0 is for the whole line for awk)

#!/bin/bash
#Get the unique values in a given csv file by providing a column number (starts at 1 in awk)
#$1 means first param value of this script, should be an integer
# will form with the $ in the string the column number for awk (again $1 = first column, because $0 is whole line)
# awk 'BEGIN {FS=';'}{print $3}END{}' $file >> sumFile.txt
theline="BEGIN{FS=\";\"}{print $"$1"}END{}"
filename=/tmp/getUniqueValues_sh.date +%F
touch $filename
for file in *_*.csv;
do
   command="/usr/bin/awk '"$theline"' "$file" >>"$filename
   eval $command
done
# display unique values
cat $filename |sort|uniq|more
rm $filename

The script writes in a temp file in /tmp that is removed after use.

Find the file in https://drive.google.com/file/d/1Jo5tY7IaEek4NFRTZWea4TvSw8KdKC45/view?usp=sharing

The column separator is ; you can change it easily

Execute it like this “getUniqueValues.sh 2” for the second column

Leave a comment

Neo4j Favorites

You certainly already know that you can add a Cypher statement as a favorite by hitting the star button next to the input box

A very useful trick is to start it with a comment, so that the comment appears as the title of the favorite in the favorites tab.

// Isolated nodes - count by label
MATCH (n)
WHERE NOT ((n)--())
RETURN DISTINCT (labels(n)), count(n)

Will be listed as “Isolated nodes – count by labels”

Useful isnt it ?

Leave a comment

Linux Mint 20 / dual monitors / redshift

I previously was a user of f.lux On my new install of mint20, Redshift is already installed. Was annoyed that it only managed one monitor after I plugged a second. Some searching took me to http://jonls.dk/redshift/ and I tried my luck with creating the configuration file. Made two updates:
  • commented screen=1 at the end
  • updated with the lat/long values for my place
restart redshift and all fine, both monitors are dimmed in sync
Leave a comment

APOC to the rescue #2

In this short post, another APOC feature worth its weight.

The function apoc.any.property takes two parameters, first being the object (node, relation) the second being the name of a property of that object.

It returns the value of any property of an object.   <– genius 🙂

That is super useful when you want to use several columns from a CSV* that have alike names, like pos(swa) pos (fra) pos (eng).

Here is an example to return wanted columns from the line object

WITH ['eng', 'swa', 'fra'] AS lngs
LOAD CSV WITH HEADERS FROM "file:///my_12_langs.csv.file" AS line FIELDTERMINATOR ';'
UNWIND lngs AS lng
WITH 'pos ('+ lng + ')' AS colName, line
RETURN apoc.any.property(line, colName) LIMIT 10

 

 

Here is something a little closer to the real Cypher I use. I create temp nodes. Because then I check for the presence of properties in conditions.

WITH ['eng', 'swa', 'fra'] AS lngs   # just 3 here, has 12
LOAD CSV WITH HEADERS FROM "file:///my_12_langs.csv.file" AS line FIELDTERMINATOR ';'
CREATE (t:TEMP)
SET t += line
WITH t,lngs
UNWIND lngs AS lng
WITH 'pos ('+ lng + ')' AS colName,t
RETURN colName, apoc.any.property(t, colName) LIMIT 50

MATCH (t:TEMP)
DELETE t   # clean up

 

Hope this is useful for you.

Big up to the APOC maintainers.

Leave a comment

APOC to the rescue #1

Picture yourself, querying on a text property, looking for duplicates and BOOM you see they not only have the same text but also the same Identifier !!!

Your brain screams “OMG I have nodes with the same identifier ! How can that be !”

Your start to wonder if all the confidence you put on Neo is misplaced.
A true trial of faith.

Doubt not.
This can happen, even though you created a fine constraint on the property, even though Neo is written by fine brains and IDs is MVP level for a DB.
You dont believe it ?

The reason it can happen is data type.

123456 and ‘123456’ are not the same.
So if you (like me) forgot to convert from string to integer in your LOAD CSV script, thats what happens.

To solve this and identify the nodes you just created, APOC can help.
What can APOC not do ?

There is a function apoc.meta.cypher.type(property) returning STRING where the property is stored as a String.

Other values are INTEGER,FLOAT,STRING,BOOLEAN,RELATIONSHIP,NODE,PATH,NULL,MAP,LIST OF ,POINT,DATE,DATE_TIME,LOCAL_TIME,LOCAL_DATE_TIME,TIME,DURATION

MATCH (n:Label)
WHERE apoc.meta.cypher.type(n.property) = 'STRING'
RETURN count(s)

That code will give you an idea of the width of the mistake.

The Cypher code to solve this is coming next 🙂