Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#2301 Le 04/09/2011, à 16:05

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

@ArkSeth : En fait tout les langages fonctionnels permettent de faire de l’I/O (qui est un donc un traitement qui fait intervenir des effets de bord), donc pas de problème pour faire des trucs graphiques.

Ce qui distingue un langage fonctionnel pur d’un langage fonctionnel c’est la façon dont sont gérés ces opérations d’I/O :
- soit le langage n’est pas fonctionnel pur, donc les opérations d’I/O s’utilisent comme du code impératif standard et se marient très bien avec le reste du code fonctionnel. C’est le cas du Lisp ou d’OCaml par exemple.
- soit le langage est fonctionnel pur et dans ce cas on utilise les monades (y’a ptêtr d’autres mécanismes, mais je connais que celui-là car c’est celui qui est utilisé en Haskell). L’avantage c’est qu’ici le code « pur » ne peut pas se mélanger au code « souillé ».

Pour les monades, tu peux jeter un œil ici et .

Sinon je ne vois pas en quoi l’absence d’affectation est un frein (c’est même un avantage dans de nombreux cas).

Hors ligne

#2302 Le 04/09/2011, à 16:27

tshirtman

Re : /* Topic des codeurs couche-tard [5] */

Comment on fait un automate d'état déterministe en langage fonctionnel pur?

Hors ligne

#2303 Le 04/09/2011, à 16:35

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

Tu veux dire un truc comme ça ?

Hors ligne

#2305 Le 04/09/2011, à 16:57

Elzen

Re : /* Topic des codeurs couche-tard [5] */

grim7reaper a écrit :

Sinon je ne vois pas en quoi l’absence d’affectation est un frein (c’est même un avantage dans de nombreux cas).

C'est juste que je ne voyais pas, pour des applis graphiques, comment on gérait les effets des actions utilisateurs, du genre l'état d'une checkbox ou l'onglet sélectionné d'un notebook, sans mémoriser une variable quelque part.

Si j'ai bien compris le passage de Wikipédia, il y a quand même bien des « briques » en progra classique (donc avec variables) derrière, mais c'est juste qu'on ne les manipule pas directement ?

Hors ligne

#2306 Le 04/09/2011, à 17:16

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

ArkSeth a écrit :
grim7reaper a écrit :

Sinon je ne vois pas en quoi l’absence d’affectation est un frein (c’est même un avantage dans de nombreux cas).

C'est juste que je ne voyais pas, pour des applis graphiques, comment on gérait les effets des actions utilisateurs, du genre l'état d'une checkbox ou l'onglet sélectionné d'un notebook, sans mémoriser une variable quelque part.

Bah ça se fait très bien sans variable ça, suffit d’avoir une structure qui décrive l’état de ta GUI. Ça n’en fait pas une variable pour autant car à chaque modif’, tu refait une nouvelle structure avec le nouvel état (tu ne modifie pas l’existante vue que ce n’est pas une variable).
Dis comme ça ça semble bien moisi car on pourrait croire qu’on fait une copie de la structure à chaque modif’, mais en fait c’est implémenté en tant que structure persistante

ArkSeth a écrit :

Si j'ai bien compris le passage de Wikipédia, il y a quand même bien des « briques » en progra classique (donc avec variables) derrière, mais c'est juste qu'on ne les manipule pas directement ?

C’est plus ou moins ça.
Enfin je crois, je t’avoue que je ne maîtrise pas encore les monades et leurs concepts sur le bout des doigts…

Hors ligne

#2307 Le 04/09/2011, à 20:17

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

Bon, aujourd’hui j’ai pris un peu de temps pour écrire des tests pour mes fonctions de calculs calendaires (égyptien pour le moment, arménien encore en cours…) :

import Test.HUnit
import Data.Calendar.Egyptian

-- Based on sample of 33 dates from Appendix C of
-- Calendrical Calculations 3rd edition.
testsAppendixC :: Test
testsAppendixC = TestList
  [ TestCase $ assertEqual "-214193" (Date 161  Phamenoth 15) (fromFixed (-214193))
  , TestCase $ assertEqual "-61387"  (Date 580  Athyr      6) (fromFixed (-61387))
  , TestCase $ assertEqual "25469"   (Date 818  Phaophi   22) (fromFixed 25469)
  , TestCase $ assertEqual "49217"   (Date 883  Athyr     15) (fromFixed 49217)
  , TestCase $ assertEqual "171307"  (Date 1217 Pachon    15) (fromFixed 171307)
  , TestCase $ assertEqual "210155"  (Date 1324 Phaophi   18) (fromFixed 210155)
  , TestCase $ assertEqual "253427"  (Date 1442 Pachon    10) (fromFixed 253427)
  , TestCase $ assertEqual "369740"  (Date 1761 Tybi       8) (fromFixed 369740)
  , TestCase $ assertEqual "400085"  (Date 1844 Mechir    28) (fromFixed 400085)
  , TestCase $ assertEqual "434355"  (Date 1938 Tybi      18) (fromFixed 434355)
  , TestCase $ assertEqual "452605"  (Date 1988 Tybi      18) (fromFixed 452605)
  , TestCase $ assertEqual "470160"  (Date 2036 Mechir    23) (fromFixed 470160)
  , TestCase $ assertEqual "473837"  (Date 2046 Phamenoth 20) (fromFixed 473837)
  , TestCase $ assertEqual "507850"  (Date 2139 Pachon    28) (fromFixed 507850)
  , TestCase $ assertEqual "524156"  (Date 2184 Tybi      29) (fromFixed 524156)
  , TestCase $ assertEqual "544676"  (Date 2240 Pharmuthi 19) (fromFixed 544676)
  , TestCase $ assertEqual "567118"  (Date 2302 Phaophi   11) (fromFixed 567118)
  , TestCase $ assertEqual "569477"  (Date 2308 Phamenoth 30) (fromFixed 569477)
  , TestCase $ assertEqual "601716"  (Date 2396 Epiphi    29) (fromFixed 601716)
  , TestCase $ assertEqual "613424"  (Date 2428 Mesori    27) (fromFixed 613424)
  , TestCase $ assertEqual "626596"  (Date 2465 Thoth     24) (fromFixed 626596)
  , TestCase $ assertEqual "645554"  (Date 2517 Thoth      2) (fromFixed 645554)
  , TestCase $ assertEqual "664224"  (Date 2568 Phaophi   27) (fromFixed 664224)
  , TestCase $ assertEqual "671401"  (Date 2587 Payni     29) (fromFixed 671401)
  , TestCase $ assertEqual "694799"  (Date 2651 Mesori     7) (fromFixed 694799)
  , TestCase $ assertEqual "704424"  (Date 2678 Choiak    17) (fromFixed 704424)
  , TestCase $ assertEqual "708842"  (Date 2690 Tybi      25) (fromFixed 708842)
  , TestCase $ assertEqual "709409"  (Date 2691 Mesori    17) (fromFixed 709409)
  , TestCase $ assertEqual "709580"  (Date 2692 Mechir     3) (fromFixed 709580)
  , TestCase $ assertEqual "727274"  (Date 2740 Epiphi    27) (fromFixed 727274)
  , TestCase $ assertEqual "728714"  (Date 2744 Epiphi     7) (fromFixed 728714)
  , TestCase $ assertEqual "744313"  (Date 2787 Pharmuthi  1) (fromFixed 744313)
  , TestCase $ assertEqual "764652"  (Date 2843 Choiak    20) (fromFixed 764652)
  ]

main :: IO Counts
main = runTestTT testsAppendixC

Bon cela dit, rien ne me dit que les dates de la table sont correctes.
Pour plus de sûreté faudrait que je teste les propriétés de mes fonctions. Il va falloir que /me se documente sur QuickCheck.

Hors ligne

#2308 Le 04/09/2011, à 21:15

Pylades

Re : /* Topic des codeurs couche-tard [5] */

J’ai revu l’API de ma Libstropt. J’arrive à un truc comme ça :

#include <stropt.h>

LS_Option** invok(void)
{
    LS_Option** opts = LS_new_option_table(3)
    if (opts)
    {
        const char* err=NULL;
        LS_set_option(opts[0], &err, 1, LS_VALFORCE, "fup", "val-1",
                "test-val-1");
        LS_set_option(opts[0], &err, 0, LS_NOVAL, "n");
        LS_flag_option(opts[0], LS_VAL_LIST);
        LS_set_value(opts[0], &err, "foo");
    /* etouq */
        if (err)
            puts("shit happened");
    }
    return opts;
}

Donc on a LS_set_option qui sert principalement à configurer l’option. Le premier argument passe un pointeur vers le LS_Option à configurer, le second sert à récupérer une chaîne en cas d’erreur, le troisième sert à indiquer quel statut faire prendre au LS_Option lorsque l’on trouve les activateurs dans leur forme longue au courte sur la  ligne de commande, le quatrième sert à décrire comment ces formes peuvent assigner des valeurs. LS_VAL pour prendre une valeur, LS_NOVAL pour ne pas en prendre, LS_VALFORCE pour en prendre une même si l’argument suivant sur la ligne de commande semble aussi être une option (ne sert que pour les formes courtes). Le cinquième argument, c’est les activateur sous forme courte ("" pour aucun), et ensuite c’est la liste des formes longues.
Par exemple, avec cette invocation :

./test -f -d

Le premier LS_Option verra son statut passé à 1 et la valeur "-d" lui être assignée.
LS_flag_option sert à configurer plus généralement le LS_Option. Pour le moment, c’est juste pour savoir ce que l’on fait avec plusieurs valeurs assigné : LS_VAL_FIRST, LS_VAL_LAST ou LS_VAL_LIST.
LS_set_value, c’est pour assigner une ou des valeurs par défaut.

Alors ? Vous en pensez quoi ?


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#2309 Le 04/09/2011, à 22:07

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

Ça me semble plutôt bien.

Au fait, quand tu passes "fup" ça veut dire que l’option est activée par -f, -u ou -p ?
Si oui, j’ai un peu de mal avec ce concept.
En général une option = une version courte et eventuellement une version longue.
Je vois pas trop l’intérêt d’en avoir plusieurs pour la même option, limite je trouve ça confusant tongue

Hors ligne

#2310 Le 05/09/2011, à 00:09

Pylades

Re : /* Topic des codeurs couche-tard [5] */

grim7reaper a écrit :

[…]
Au fait, quand tu passes "fup" ça veut dire que l’option est activée par -f, -u ou -p ?
[…]

Yep. C’est parce que des fois, on a des options qui sont synonymes. Je veux faire le truc le plus puissant possible ; donc je prévois cette possibilité. C’est aussi pratique quand t’as des options qui sont ignorées pour des raisons historiques…

Mais sinon, c’est cool, alors. smile

Vous voyez d’autres configurations que je pourrais ajouter ?


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#2311 Le 05/09/2011, à 06:43

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

Πυλάδης a écrit :

des fois, on a des options qui sont synonymes.

Ça c'est que l'interface de ton programme est mal pensé, ça ne devrait pas arriver.

Πυλάδης a écrit :

C’est aussi pratique quand t’as des options qui sont ignorées pour des raisons historiques…

Ouais, le coup de la retro-compat j'y avais pensé et c'est vrai que c'est une raison valable (plus que la précédente).

Πυλάδης a écrit :

Vous voyez d’autres configurations que je pourrais ajouter ?

Pour le moment je vois pas trop ce que tu pourrais ajouter. Faut aussi garder une API aussi simple que possible donc pas besoin de rajouter juste pour ajouter wink

Hors ligne

#2312 Le 06/09/2011, à 09:21

Ras&#039;

Re : /* Topic des codeurs couche-tard [5] */

S'il y a des codeurs couche-tard qui s'ennuient, ça vous dirait d'étudier la faisabilité d'un reuploadeur d'image ?
Je m'explique : la plupart des sites d'images (tumblr and co) sont bloqués au taff, alors que ni mon pix, ni celui du tdct, ni celui de toile-libre ne sont bloqués. Le but serait juste d'avoir une page web avec un endroit ou mettre l'url de l'image bloquée, pour que le serveur la télécharge et la reupload sur l'un des sites sus-cité (possibilité de mettre un tag en option).

Vu que tout le monde utilise les sources de toile-libre, ça en ferait un service réutilisable par tout le monde en plus smile

Je suis sûr que ça doit être très simple à faire, mais j'en suis incapable neutral


Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
 
Les types awesome n'ont rien à prouver. À personne.
'k bye là

Hors ligne

#2313 Le 06/09/2011, à 09:34

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

Ras' a écrit :

Le but serait juste d'avoir une page web avec un endroit ou mettre l'url de l'image bloquée, pour que le serveur la télécharge et la reupload sur l'un des sites sus-cité (possibilité de mettre un tag en option).

En entrée tu passerais un lien direct vers l'image ou un lien vers la page web qui contient l'image ?

Si c'est un lien direct, ça doit être faisable très simplement et je peux toujours essayer de faire une PoC ce soir en rentrant du taff'.

Si c'est un lien vers la page web, ça doit pas être bien sorcier non plus mais ça demande un peu plus de boulot quoi (boulot qui dépend de la gueule du code de la page en question...)

Hors ligne

#2314 Le 06/09/2011, à 09:45

Ras&#039;

Re : /* Topic des codeurs couche-tard [5] */

Un lien direct vers l'image, pour commencer wink
(c'est par exemple pour le topic mème, ou on récupère des liens d'images directes wink)


Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
 
Les types awesome n'ont rien à prouver. À personne.
'k bye là

Hors ligne

#2315 Le 06/09/2011, à 09:53

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

Ok, si c'est direct jpeux commencer à bidouiller un truc ce soir alors.

T'as 2-3 liens "problématiques" pour que je me base dessus pour mes tests ?

Dernière modification par grim7reaper (Le 06/09/2011, à 09:53)

Hors ligne

#2316 Le 06/09/2011, à 10:09

Ras&#039;

Re : /* Topic des codeurs couche-tard [5] */

Nimporte quelle image sur le net wink
Exemple : http://24.media.tumblr.com/tumblr_lqics … o1_400.png
Bien sûr, il faut que ce soit le serveur qui dl l'image et la reupload sur son pix wink


Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
 
Les types awesome n'ont rien à prouver. À personne.
'k bye là

Hors ligne

#2317 Le 06/09/2011, à 10:16

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

Ok, bah je vais voir ce que je peux faire.
Avec un peu de chance, y'aura un ersatz de truc fonctionnel ce soir.

Hors ligne

#2318 Le 06/09/2011, à 17:44

Pylades

Re : /* Topic des codeurs couche-tard [5] */

Justement, comme tout le monde utilise le pix de toile-libre, ça n’est pas bien sorcier d’aller chercher dans /upload/original/

Sinon on peut toujours se contenter de la miniature…


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#2319 Le 06/09/2011, à 17:47

Ras&#039;

Re : /* Topic des codeurs couche-tard [5] */

Ah ben non, ça n'dois pas être compliqué à faire, le seul truc c'est de ré-uploader l'image automatiquement wink

Sinon on peut toujours se contenter de la miniature…

Ca n'sert à rien, autant prendre l'image directement wink

Plop !

Dernière modification par Ras' (Le 06/09/2011, à 17:48)


Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
 
Les types awesome n'ont rien à prouver. À personne.
'k bye là

Hors ligne

#2320 Le 06/09/2011, à 17:51

Pylades

Re : /* Topic des codeurs couche-tard [5] */

Euh… si le type du pix est inconnu, comment veux-tu retrouver l’image originale ?


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#2321 Le 06/09/2011, à 17:56

Ras&#039;

Re : /* Topic des codeurs couche-tard [5] */

Le type de pix est connu, vu que c'est le tiens wink

Ben, quand tu upload une image sur ton pix, t'as les liens vers l'image direct en dessous.
Et puis si c'est hébergé sur le même serveur, il doit y'avoir moyen de les faire communiquer, non ?
[/noob]

Dernière modification par Ras' (Le 06/09/2011, à 17:56)


Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
 
Les types awesome n'ont rien à prouver. À personne.
'k bye là

Hors ligne

#2322 Le 06/09/2011, à 17:56

kamui57

Re : /* Topic des codeurs couche-tard [5] */

Πυλάδης a écrit :

Justement, comme tout le monde utilise le pix de toile-libre, ça n’est pas bien sorcier d’aller chercher dans /upload/original/

Sinon on peut toujours se contenter de la miniature…

il veut dire que dans le topic des mêmes, certaines images ne sont pas uploadées par les posteurs mais trouvées sur internet, donc hébergées un peu partout, y compris sur des sites bloqués à son taf.

il mentionne pix.toile-libre.org pour éventuellement se baser sur son code.

Euh… si le type du pix est inconnu, comment veux-tu retrouver l’image originale ?

Pour l'instant le but est, en ayant le lien direct vers une image sur un hébergeur bloqué, de télécharger cette image, et de la réuploader ailleurs (non bloqué), automatiquement (une page web sur laquelle on colle le lien, on valide, et ça télécharge puis uploade). Comme le serveur a accès à l'image bloquée au taf' de Ras', il peut le faire.

Dernière modification par kamui57 (Le 06/09/2011, à 17:57)


Quand le dernier arbre aura été abattu, et le dernier animal exterminé, les hommes se rendront compte que l'argent ne se mange pas (proverbe indien)
Toshiba Satellite L655 4 Go RAM, Archlinux Gnome-shell,LXDE / W7
Toshiba Satellite M30 512 Mo RAM, Archlinux Gnome 3 restreint / Crunchbang LXDE
https://help.ubuntu.com/community/Pastebinit pour poster du texte sur internet en console

Hors ligne

#2323 Le 06/09/2011, à 17:59

Ras&#039;

Re : /* Topic des codeurs couche-tard [5] */

kamui57 a écrit :

il mentionne pix.toile-libre.org pour éventuellement se baser sur son code.

C'est surtout que l'image est réuploadée sur un pix qui utilise le code de pix.toile-libre wink
Enfin, dans l'idéal, hein. D'ailleurs, dans l'idéal, on peut même mettre un tag, comme ça c'est exactement comme si on l'avait fait à la main, avec le tag qu'on veut et tout smile
Sinon, il enregistre ça dans un dossier web, et donne une url differente, sur un service dédié, genre rehost.xserver-x.org


Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
 
Les types awesome n'ont rien à prouver. À personne.
'k bye là

Hors ligne

#2324 Le 06/09/2011, à 18:29

Elzen

Re : /* Topic des codeurs couche-tard [5] */

Sinon, un genre de proxy perso (sur un serveur à domicile auquel tu aurais accès à ton taf) qui te télécharge l'image depuis le site d'origine et te la renvoie tel quel, sans la stocker, ça irait pas ? 'me semble que c'est assez facilement faisable en PHP ( tongue )

Les gens : mon navigateur de fichiers avance à peu près bien (j'attends d'avoir mon nouvel ordi qui a eu du retard au départ pour me mettre à bosser sur le reste), mais il y a quatre trucs que j'voudrais et que j'n'arrive pas à récupérer directement en python :
– le nom du propriétaire d'un fichier.
– le nom du groupe d'un fichier.
– les permissions d'un fichier, si possible de la forme « rwxr-xr-x »
– un booléen qui indique si le répertoire passé en paramètre est inscriptible pour l'utilisateur actif ou pas.
(Éventuellement, j'dois pouvoir me débrouiller pour déduire le dernier points des trois autres si j'arrive aussi à identifier les différents groupes auxquels appartient l'utilisateur actif).
J'pourrais faire un p'tit parsage de ls -l, mais vu que j'arrive à récupérer tout le reste directement en python, ça m'embêterait quand même un peu de devoir faire un appel shell juste pour ça.
Quelqu'un verrait comment faire ?

J'ai aussi toujours mon bête problème de taille d'image décrit ci-dessus, j'ai pas encore eu le temps/courage de m'y repencher.

Dernière modification par ArkSeth (Le 06/09/2011, à 18:30)

Hors ligne

#2325 Le 06/09/2011, à 19:10

Ras&#039;

Re : /* Topic des codeurs couche-tard [5] */

ArkSeth a écrit :

Sinon, un genre de proxy perso (sur un serveur à domicile auquel tu aurais accès à ton taf) qui te télécharge l'image depuis le site d'origine et te la renvoie tel quel, sans la stocker, ça irait pas ? 'me semble que c'est assez facilement faisable en PHP ( tongue )

J'n'arrive pas à me servir d'un proxy de mon taff, y'a déja un proxy interne, et très peu de ports sont ouverts...


Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
 
Les types awesome n'ont rien à prouver. À personne.
'k bye là

Hors ligne