Litt av forsamlingen
Etter å ha lest denne artikkelen om lock gratis buffere og se bruken av CAS (sammenligne og bytte), følte jeg meg som legger forsamlingen koden for å gjøre det samme. Bruk tilfelle der borte var å skrive en innfødt metode og kalle det fra Java (tilbake i 1.5, da samtidige datastrukturer i Java var mer eller mindre ikke eksisterende). Uten videre, vil jeg utnytte koden til deg
. Først er for CAS og andre er for databehandling GCD bruke Euklids algoritme (denne kan finnes i mange steder og opplæring i tillegg).
Kompilere og kjøre instruksjoner gcc file_name.c ; ./a.out
Sammenlign og Bytt
# Include# Include / / Bytte - newvalue, er comperand gammel / forventet verdi / * * Funksjon gjør faktisk det følgende ting - hvis verdien på * dest er lik oldvalue deretter erstatte det med newvalue ellers la den uendret: å gjøre alle disse atomically * * Det er to alternativer for returverdi * 1.is initial verdi på * dest og la byrden av å kalle fxn å sammenligne den med oldval * 2. gjør det over her og returnere 0 eller 1, bør dette være mer effektiv ** / / * Senere endre den til makro * / 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 resultat = 1 ;/ * 1 viser at CAS lyktes og 0 viser at det sviktet * / / * Btw må sette cc for flagg clobbering! * / __asm__ __ volatile__ ( "Movl% 2,%% eax \ n \ t" "Movl% 3,%% EBX \ n \ t" "Movl% 0,%% ECx \ n \ t" "LOCK \ n \ t" «CMPXCHG%% EBX, (%% ECx) \ n \ t" / * skal LOCK være på samme linje * / "JZ FERDIG \ n \ t" "Movl $ 0,% 1 \ n \ t" "FERDIG: \ n \ t" : "= M" (dest), "= g" (resultat) : "G" (oldvalue), "g" (newvalue), "M" (dest) : "% Eax", "% EBX", "ECx", "CC" ); printf ("(% d,% d,% d)", * dest, oldvalue, newvalue); returnere resultatet; } / * TODO * Skrive et annet asm fxn som setter ovenfor fxn på en stund løkke og fortsette å prøve med mindre det lykkes * / 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 ("endring verdi * c til% 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)); returnere 0; }
Formatering notater - virker som wp-syntaks highlighter er å legge til slutt, ignorere det.
GCD
# Includeint gcd (int a, int b) { int resultat; / * Beregn største felles divisor bruke Euklids algoritme * / __asm__ __ volatile__ ("movl% 1,%% EAX;" "Movl% 2,%% EBX;" "Forts: cmpl $ 0,%% EBX;" "Je gjort;" «Xorl%% EDX,%% EDX;" «Idivl%% EBX;" «Movl%% EBX,%% EAX;" «Movl%% EDX,%% EBX;" "JMP forts;" "FERDIG: movl%% eax,% 0;": "= g" (resultat): "g" (a), "g" (b) ); returnere resultatet; } int main () { int første, andre; printf ("Skriv to heltall:"); scanf ("% d% d", & første, og andre); printf ("GCD av% d &% d er% d \ n", første, andre, gcd (første, andre)); returnere 0; }
Cricketing verden venter en New World Order
Etter en serie som spenner over fem tester og ca to måneder, England gjenvunnet aske.
La oss snakke om det vinnende laget første - sitt midten rekkefølgen er "gjennomsnittlig" hvis du ikke ønsker å kritisk. Greame Swann bidrag med balltre teller ikke mindre enn bidraget med ballen. Stuart Broad - best allrounder var ikke starter for den femte prøven. Andrew Strauss var den eneste konsekvente batsman og Jimmy Anderson var den eneste konsekvente bowler.
Poenget her er ikke å skjelle resultatene av det vinnende laget, men å sette i perspektiv det faktum at til tross for alle disse, Australia tapt. du må tenke noen sekunder, hvis bedt om å navngi sitt beste bowler. Høyre, var det BW Hilfenhaus. Hauritz overgikk Everbody forventning, men var likevel ikke god nok til å bli valgt for to av de fem testene. Sør-Afrika ble aldri en verden beater uten en verdensklasse spinner, kan Australia ikke håpe på å forbli en uten en god nok minst ett. Magiker forlot scenen og det ser ikke ut som kunst lenger, glem magi. Ponting står høyt blant mindre dødelige og Michael Clarke står opp veldig ofte, men det gjør dem et lag med noen veldig gode spillere og ikke et veldig godt lag.
Ashes 2009 vil bli husket for Andrew Flintoff siste Aske, Stuart Bred ankomst som en all rounder (hvis han legger litt mer Ashes folklore til sin lovende start), og en av de mest talende debut-tallet av all tid ved Trott men det vil også være husket som det punktet der IFS og buts om Australias overhøyhet ble endelig satt til hvile, er det over. Ikke misforstå de fortsatt kan grave Mike Hussey eller Stuart Clark, men du føler at bidraget all time storheter når de går glipp av. Noen ganger kommer de til å minne deg selv i IPL, men fortsatt er de ikke kan erstattes. La oss føler meg velsignet for å ha sett Warne, McGrath og Gilchrist spille sammen og blir støttet av Waughs, Ponting, Hyden, Martin og Langer.
Fremover vil Sør-Afrika alltid forbli et veldig godt lag, men de trenger for å vinne semifinalen, og være mer konsekvent i hele verden, vil Pakistan forblir gåtefullt strålende, vil indiske Young Guns trolig finne det tøft å fylle skoene til ekstraordinære forgjengere. Sri Lanka skal fortsette å vise glimt av kunst i håndverket. Men, kanskje vi må vente på en gang før å ha en alt ut dominerende lag eller før en kaptein klager over mangel på konkurranse, som Steve Waugh gjorde en gang.
På et beslektet notat - la oss velkommen den kommende baksiden av Asif, har han en helvetes masse potensiale, la oss håper å se noen av det og også velkommen Andy Flower i den nye awatar, rett du ikke kan holde gode menn nede for lenge.
Ruby en liners å lage hasj
I går mens du går gjennom en av mine gamle programmer, fant jeg dette skrevet av meg en gang tilbake:
#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
Å drepe noen av spenning la meg avsløre at raw_text ser ut
, Rett den har blitt kuttet fra paypal betaling bekreftelse.
Over linjen hvis brutt i deler lyder bedre:
unescaped_array = CGI.unescape (raw_text). split ('&') unescaped_array = unescaped_array.collect {| x | b = x.split ("="); b.push (null) hvis b.size == 1; b} flattened_array = unescaped_array.flatten hash = Hash [* flattened_array]
La oss gjøre individuelle trinn i IRB:
IRB (hoved):. 009:0> unescaped_array = CGI.unescape (raw_text) split ('&') => ["Suksess", "mc_gross = 10,00", "protection_eligibility = ikke kvalifisert", "payer_id = U7PPJJ4TSJ47E", "skatt = 0.00", "payment_date = 09:45:30 10 juli 2009 PDT", "payment_status = Venter "] IRB (hoved): 013:0> unescaped_array = unescaped_array.map {| x | b = x.split ("="); b.push (null) hvis b.size == 1; b} => [["Suksess", null], ["mc_gross", "10.00"], ["protection_eligibility", "ikke kvalifisert"], ["payer_id", "U7PPJJ4TSJ47E"], ["skatt", "0.00"] , ["payment_date", "09:45:30 den 10 juli 2009 PDT"], ["payment_status", "Venter"]] IRB (hoved): 014:0> flattened_array = unescaped_array.flatten => ["Suksess", null, "mc_gross", "10.00", "protection_eligibility", "ikke kvalifisert", "payer_id", "U7PPJJ4TSJ47E", "skatt", "0.00", "payment_date", "09:45: 30 10 juli 2009 PDT "," payment_status "," Venter "] IRB (hoved): 015:0> hash = Hash [* flattened_array] => {"Skatt" => "0.00", "payment_status" => "Pending", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10.00", "suksess" => nil, "payment_date" = > "09:45:30 den 10 juli 2009 PDT", "protection_eligibility" => "kvalifisert"}
BTW, er * kalles feilindikator operatør i rubin
En annen måte å lage hasj fra 'utvalg av parene "er å bruke injisere:
hash = [[1,2], [3,4]] injisere ({}). {| Resultatet, element | Resultatet [element.first] = resultat [element.last]; resultat} Det er enda en måte
Skriv en loop, som jeg vil forlate som en øvelse til leserne!
Her er litt urelatert brukstilfellet med å lage hasj fra arrays:
IRB (hoved): 005:0> [1,2,3,4,7,9] group_by {| x | x <5.? : Mindre :: større} => {: Lesser => [1, 2, 3, 4],: større => [7, 9]}
Du kan gjøre flere ting, i utgangspunktet resultat av blokken brukes som nøkkel for at element i den resulterende hash.
gmail, Mutt og msmtp fix
Hvis du bruker mutt og smtp tilgang til Gmail. Her er en (dårlig) nyheter. Kule gutter på Google igjen endret sertifikat. Å, fikk du spørre - hvordan vet det det? Enkelt Mutt begynte klager om dårlig attest når du prøver å bruke msmpt, beryktede «msmtp: TLS sertifikat mislyktes:. Sertifikatet har ikke fått en kjent utsteders hilste på meg på skjermen.
For å krysse bekrefte -
Bare kjør etter
$ msmtp --serverinfo --host=smtp.gmail.com --tls=on --port=587 --tls-certcheck=off
I stedet for gamle Thwate Server Nå får du følge i utsteder segment
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US
Heldigvis fix er enkel, her er hva du trenger å gjøre på debian
# apt-get install ca-certificates
# dpkg -s ca-certificates|grep Version
Version: 20090814
Etter dette bare endre følgende linje i deg ~ / må. 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
til
tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt
Git og Awesome Survey
Her er to linker for undersøkelse av GIT (versjonskontrollsystem) og kjempeflott (vindusbehandler) samfunnet. Hvis du bruker en av disse, kan du ta ut litt tid å fylle ut spørreskjemaet. Tenk på det som den enkleste måten å bidra tilbake til programvaren du bruker.
Her er linkene:
Git - http://www.survs.com/survey?id=2PIMZGU0&channel=Q0EKJ3NF54
Awesome - http://www.survs.com/survey?id=8BVEV3FO&channel=BH07CQ040D
Note - (Som finnes på disse sidene, men på bunnen
) -
"Hvis du har aktivert informasjonskapsler, kan du alltids sende delvis fylt undersøkelsen, og gå tilbake til dine svar på senere tidspunkt, fullføre det senere."



































