Un peu d'assemblage

29 août 2009 par Prashant · Commentaires
Filed under: la technologie

Après avoir lu cette article sur les tampons de blocage libres et voir l'utilisation de la CSA (comparer et échanger), je me suis senti comme l'affichage du code assembleur pour faire la même chose. Cas d'utilisation là-bas était d'écrire une méthode native et l'appeler à partir de Java (retour à 1,5, lorsque les structures de données simultanés en Java étaient plus ou moins inexistant). Sans plus tarder, je vais libérer le code sur vous :) . La première est pour le CAS et le second est pour le calcul GCD en utilisant l'algorithme d'Euclide (celui-ci peut être trouvée dans de nombreux endroits et des tutoriels ainsi).

Compiler et exécuter des instructions gcc file_name.c ; ./a.out

Comparer et Swap

   # Include 
  # Include 
 / / Change - newvalue, comperand est vieux / valeur attendue
 / *
  * Fonction ne fait la chose suivante - si la valeur au * dest est égale à oldValue puis le remplacer par autre newvalue laisser inchangé: faire toutes ces atomiquement
  *
  * Il ya deux options pour la valeur de retour
  * La valeur initiale de 1.is * dest et laisser le fardeau de la FXN appelant à le comparer avec oldval
  * 2.  le faire ici et retourner 0 ou 1, ce devrait être plus efficace
  ** /

 / * Plus tard, il se transformer en macro * /
 int CAS (int * dest, int oldValue, int newvalue) {
	 printf ("(% d,% d,% d)", * dest, oldValue, newvalue);
	 / * Int CAS (int dest, int oldValue, int newvalue) {* /
	 / * Int CAS (int dest, int newvalue, int oldValue) {* /
	 int résultat = 1 ;/ * 1 montre que les CA ont réussi et 0 montre qu'il a échoué * /
	 / * Btw besoin de mettre en cc pour le drapeau démolir!  * /
	 __ volatile__ __asm__ (
			 "Movl% 2,%% eax \ n \ t"
			 "Movl% 3,%% ebx \ n \ t"
			 "0% movl,%% ecx \ n \ t"
			 "LOCK \ n \ t"
			 "CMPXCHG% ebx%, (%% ecx) \ n \ t" / * doit se verrouiller être sur la même ligne * /
			 "Jz FAIT \ n \ t"
			 "Movl $ 0,% 1 \ n \ t"
			 "FAIT: \ n \ t"
			 : "= M" (dest), "= g" (résultat)
			 : "G" (oldValue), "g" (newvalue), "m" (dest)
			 : "% Eax", "% ebx", "ecx", "cc"
			 );
	 printf ("(% d,% d,% d)", * dest, oldValue, newvalue);
	 renvoyer le résultat;
 }

 / * TODO
  * Écrire un autre FXN asm qui met au-dessus FXN dans une boucle while et continuer à essayer si elle réussit * /

 int main () {
	 int a = 5, b = 6;
	 int * c = (int *) malloc (sizeof (int));
	 * C = 6;
	 / * Int c = 6; * /
	 printf ("% d \ n", CAS (c, b, b));
	 printf ("% d \ n", CAS (c, b, a));
	 printf ("% d \ n", CAS (c, a, a));
	 printf ("% d \ n", CAS (c, b, b));
	 * C = 6;
	 / C * = 5; * /
	 printf ("valeur changeante des * c à% d \ n", * c);
	 printf ("% d \ n", CAS (c, b, b));
	 printf ("% d \ n", CAS (c, b, a));
	 printf ("% d \ n", CAS (c, a, a));
	 printf ("% d \ n", CAS (c, a, b));
	 printf ("% d \ n", CAS (c, b, a));
	 retourner 0;
 }

Mise en forme des notes - apparaît comme la coloration syntaxique wp est l'ajout à la fin, l'ignorer.

GCD

 # Include 
 int pgcd (int a, int b) {
     int résultat;
     / * Calcul Plus Grand Commun Diviseur utilisant l'algorithme d'Euclide * /
     __ volatile__ __asm__ ("movl% 1,%% eax;"
                           "Movl% 2,%% ebx;"
                           "SUITE: CMPL 0 $,%% ebx;"
                           "Je FAIT;"
                           "Xorl%% edx,%% edx;"
                           "Idivl%% ebx;"
                           "Ebx movl%%,%% eax;"
                           "Movl%% edx,% ebx%;"
                           "Jmp suite;"
                           "FAIT: movl%% eax,% 0;": "= g" (résultat): "g" (a), "g" (b)
     );

     renvoyer le résultat;
 }

 int main () {
     int premier, deuxième;
     printf ("Entrez deux entiers:");
     scanf ("% d% d", & d'abord, et seconde);

     printf ("% d PGCD de &% d est% d \ n", premier, deuxième, pgcd (premier, deuxième));

     retourner 0;
 }

Mondiale de cricket attend un Nouvel Ordre Mondial

25 août 2009 par Prashant · Commentaires
Filed under: misc

Après une série qui s'étend sur cinq essais et environ deux mois, les cendres récupérées Angleterre.

Parlons de l'équipe gagnante premier - leur ordre du milieu est «moyenne» si vous ne voulez pas critique. Contribution Greame Swann avec la chauve-souris comptera pas moins de contribution avec le ballon. Stuart Broad - meilleure polyvalent était entrée non pour le test 5ème. Andrew Strauss était le batteur seulement conforme et Jimmy Anderson a été le lanceur seulement conforme.

Point ici n'est pas de fustiger les réalisations de l'équipe gagnante, mais à mettre en perspective le fait que, malgré tout cela, l'Australie a perdu. vous aurez à penser pendant quelques secondes, si on lui demande de nommer leur meilleur lanceur. A droite, il était BW Hilfenhaus. Hauritz surpassé les attentes, mais everbody n'était pas encore assez bon pour être sélectionné pour deux des cinq essais. Afrique du Sud n'a jamais été un batteur monde sans une fileuse de classe mondiale, l'Australie ne peut pas espérer rester l'un sans un un assez bon au moins. Magicien a quitté la scène et il ne ressemble pas à l'art plus, oublier la magie. Ponting se dresse fièrement parmi les simples mortels et Michael Clarke se lève très souvent, mais qui en fait une équipe avec de très bons joueurs et non pas une très bonne équipe.
Ashes 2009 restera dans les mémoires pour Ashes dernières Andrew Flintoff, l'arrivée de Stuart Broad en tant que polyvalent (si il ajoute un peu plus du folklore Ashes à son début prometteur), et un du siècle débuts le plus révélateur de tous les temps par Trott, mais il sera également dans les mémoires comme le point où si et les mais sur la suprématie de l'Australie ont finalement été mis au repos, c'est fini. Ne vous méprenez pas, ils peuvent encore dénicher Mike Hussey ou Stuart Clark, mais vous vous sentez la contribution de tous les grands temps quand ils sont portés disparus. Parfois, ils viennent pour vous rappeler d'eux-mêmes dans de l'IPL, mais encore ils ne peuvent pas être remplacés. Disons me sens béni d'avoir vu Warne, McGrath et Gilchrist jouer ensemble et étant supporté par Waughs, Ponting, Hyden, Martin et Langer.

À l'avenir, l'Afrique du Sud restera toujours une très bonne équipe, mais ils ont besoin pour gagner demi-finale et d'être plus cohérente dans le monde entier, le Pakistan restera énigmatique brillante, indiennes canons jeunes trouveront probablement difficile à combler les chaussures de ses prédécesseurs extraordinaires. Sri Lanka devrait continuer de montrer un aperçu de l'art dans l'artisanat. Mais, nous pourrions avoir à attendre pendant un certain temps avant d'avoir une équipe tout à dominante ou avant un capitaine se plaint du manque de concurrence, comme Steve Waugh a fait une fois.

Dans une note relative - nous allons accueillir le retour de Asif, il a un enfer beaucoup de potentiel, espérons de voir certains de cela, et aussi accueillir Fleur Andy dans le awatar nouvelle, à droite, vous ne pouvez pas empêcher les hommes de bonnes bas pour longtemps.

rubis: une ligne pour créer de hachage

20 août 2009 par Prashant · Commentaires
Filed under: la technologie

Hier en passant par l'un de mes anciens programmes, j'ai trouvé cela par écrit par moi ya un certain temps:

#begin magic
hash=Hash[*CGI.unescape(raw_text).split('&').map{|x| b=x.split("=");b.push(nil) if b.size==1;b}.flatten]
#end magic

Pour tuer le suspense permettez-moi de révéler que raw_text ressemble

 

, Le droit qu'il a été coupé de la reconnaissance de paiement paypal.

Au-dessus de la ligne si elle est brisée en pièces se lit mieux:

  unescaped_array = CGI.unescape (raw_text). split ('&')
   unescaped_array = {unescaped_array.collect | x | b = x.split ("="); b.push (néant) si b.size == 1;} b
   flattened_array = unescaped_array.flatten
   hash = Hash [* flattened_array] 

Faisons différentes étapes de la CISR:

  irb (main):. 009:0> unescaped_array = CGI.unescape (raw_text) split ('&')    

 => ["SUCCESS", "mc_gross = 10.00", "protection_eligibility = non admissibles», «payer_id = U7PPJJ4TSJ47E", "impôt = 0.00", "payment_date = 09:45:30 10 juillet 2009 PDT", "payment_status = En attente "]                                                                         

 irb (main): 013:0> unescaped_array = {unescaped_array.map | x | b = x.split ("="); b.push (néant) si b.size == 1;} b  

 => [["SUCCESS", nil], ["mc_gross", "10.00"], ["protection_eligibility", "inadmissible"], ["payer_id", "U7PPJJ4TSJ47E"], ["impôt", "0.00"] , ["payment_date", "09:45:30 10 juillet 2009 PDT"], ["payment_status", "En attente"]]                               

 irb (main): 014:0> flattened_array = unescaped_array.flatten     

 => ["SUCCESS", nil, "mc_gross", "10.00", "protection_eligibility", "inadmissible", "payer_id", "U7PPJJ4TSJ47E", "impôts", "0.00", "payment_date", "09:45: 30 10 juillet 2009 PDT "," payment_status "," En attente "]
 irb (main): 015:0>
 hash = Hash [* flattened_array]
 => {"Impôt" => "0.00", "payment_status" => "En attente", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10.00", "SUCCESS" => nil, "payment_date" = > "09:45:30 10 juillet 2009 PDT", "protection_eligibility" => "Inadmissible"} 

BTW, * est appelé opérateur splat en ruby

Une autre façon de créer de hachage à partir «tableau de paires" est d'utiliser l'injection:

  hash = [[1,2], [3,4]] injecter ({}). {| résultat, élément | résultat [element.first] = résultat [element.last];} résultat 

Il ya une façon de plus :) Rédiger une boucle, que je vais laisser comme un exercice pour les lecteurs!

Voici un cas d'utilisation sans rapport avec peu de création de hachage à partir des tableaux:

  irb (main): 005:0> [1,2,3,4,7,9] group_by {| x | x <5.?  : Moindre :: plus}

 => {: Moins => [1, 2, 3, 4],: une plus grande => [7, 9]} 

Vous pouvez faire plus de choses, essentiellement suite du bloc est utilisé comme la clé de cet élément dans la table de hachage qui en résulte.

fix gmail, mutt et msmtp

17 août 2009 par Prashant · Commentaires
Filed under: la technologie

Si vous utilisez mutt et smtp pour accéder à Gmail. Voici une nouvelles (mauvaise). Refroidir les gars de Google à nouveau changé certificat. Oh, avez-vous demandé - comment il le sait? Mutt Simple commencé à se plaindre mauvais certificat lorsque vous essayez d'utiliser msmpt, tristement célèbre «msmtp: la vérification du certificat TLS a échoué:. Le certificat n'a pas obtenu un émetteur connu" m'a accueilli à l'écran.

Pour traverser le confirmer -
Il suffit de lancer la suite

$ msmtp --serverinfo --host=smtp.gmail.com --tls=on --port=587 --tls-certcheck=off

En lieu et place du serveur Thwate vieux maintenant vous êtes à la suite dans le segment émetteur
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US

Heureusement solution est simple, voici ce que vous devez faire sur debian

# apt-get install ca-certificates
# dpkg -s ca-certificates|grep Version
Version: 20090814

Après il suffit de changer cette ligne suivante dans you ~ /. Msmtprc

tls_trust_file /certs/Thawte SSLWeb Server Roots/thawte Premium Server CA/Thawte Premium Server CA.pem

tls_trust_file /certs/Thawte SSLWeb Server Roots/thawte Premium Server CA/Thawte Premium Server CA.pem

à

tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt

Git et Enquête sur Impressionnant

15 août 2009 par Prashant · Commentaires
Filed under: misc

Voici deux liens pour l'enquête par git (système de contrôle de version) et génial (gestionnaire de fenêtres) de la communauté. Si vous utilisez un de ceux-ci, s'il vous plaît prendre quelque temps pour remplir le questionnaire. Pensez-y comme la façon la plus simple de contribuer en retour au logiciel que vous utilisez.
Voici les liens:

Git - http://www.survs.com/survey?id=2PIMZGU0&channel=Q0EKJ3NF54

Awesome - http://www.survs.com/survey?id=8BVEV3FO&channel=BH07CQ040D

Remarque - (Comme l'a constaté sur ces pages, mais au fond :) ) -
"Si vous avez activé les cookies, vous pouvez toujours soumettre l'enquête partiellement rempli, et retourner à vos réponses à une date ultérieure, en la complétant plus tard."