Een beetje van vergadering
Na het lezen van dit artikel over lock vrij buffers en het zien van het gebruik van CAS (te vergelijken en te wisselen), voelde ik me net als het plaatsen van de assemblage-code om hetzelfde te doen. Gebruik geval daar was om een eigen methode te schrijven en het noemen van Java (terug in 1.5, wanneer gelijktijdige datastructuren in Java waren min of meer ontbreekt). Zonder verdere omhaal, ik zal de code los te laten op je
. De eerste is voor de CAS en de tweede is voor het berekenen van GCD met behulp van het algoritme van Euclides (deze is te vinden op vele plaatsen en tutorials ook).
Compileer en uitvoeren instructies gcc file_name.c ; ./a.out
Vergelijk en Swap
# Include# Include / / Uitwisseling - newValue, comperand is oud / verwachte waarde / * * Functie doet eigenlijk het volgende ding - als de waarde op * dest is gelijk aan dan oldvalue te vervangen door newValue anders laat het onveranderd: niet al deze atomair * * Er zijn twee opties voor de return waarde * 1.is initiële waarde van * dest en laat de last van de oproep FXN te vergelijken met oldval * 2. doen het hier over en weer 0 of 1, moet dit efficiënter ** / / * Later veranderen in 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 resultaat = 1 ;/ * 1 laat zien dat cas geslaagd en 0 geeft aan dat het * niet / / * Btw moeten cc voor vlag verpesten! * / __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" / * moet LOCK op dezelfde lijn * / "JZ GEDAAN \ n \ t" "Movl $ 0,% 1 \ n \ t" "DONE: \ n \ t" : "= M" (DEST), "= g" (resultaat) : "G" (oldvalue), "G" (newValue), "m" (DEST) "% Eax", "% ebx", "ecx", "cc" ); printf ("(% d,% d,% d)", * DEST, oldvalue, newValue); terug te keren resultaat; } / * TODO * Schrijf een andere asm FXN die hierboven FXN zet in de zoveel tijd loop en blijf proberen, tenzij het lukt * / 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 ("veranderende waarde van * c om% 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)); return 0; }
Opmaak van nota's - lijkt wp syntax highlighter is het toevoegen van op het einde, negeren dat.
GCD
# Includeint ggd (int a, int b) { int resultaat; / * Compute Grootste gemene deler met behulp van het algoritme van Euclides * / __asm__ __ volatile__ ("movl% 1,%% eax;" "Movl% 2,%% ebx;" "Vervolg: cmpl $ 0,%% ebx;" "Je gedaan;" "Xorl%% edx,%% edx;" "Idivl%% ebx;" "Movl%% ebx,%% eax;" "Movl%% edx,%% ebx;" "Jmp Vervolg;" "DONE: movl%% eax,% 0;": "= g" (resultaat): "g" (a), "G" (b) ); terug te keren resultaat; } int main () { int eerste, tweede; printf ("Geef twee gehele getallen:"); scanf ("% d% d", & eerste en tweede); printf ("GCD van% d &% d is% d \ n", eerste, tweede, ggd (eerste, tweede)); return 0; }
Cricket wereld wacht op een Nieuwe Wereld Orde
Na een reeks verspreid over vijf tests en ongeveer twee maanden, Engeland teruggewonnen as.
Laten we praten over het winnende team voor het eerst - hun midden orde is 'gemiddeld' als je niet wilt kritisch. Greame Swann de bijdrage met de knuppel telt niet minder dan bijdrage met de bal. Stuart Broad - de beste allrounder was niet starter voor de 5e test. Andrew Strauss was de enige consistente batsman en Jimmy Anderson was de enige consistente bowler.
Punt is hier niet om de verworvenheden van het winnende team hekelen, maar om in het juiste perspectief het feit dat ondanks al deze, Australië verloren. je zult moeten denken voor enkele seconden, indien gevraagd om hun beste bowler te noemen. Juist, het was BW Hilfenhaus. Hauritz beter dan everbody de verwachting, maar was nog niet goed genoeg om te worden geselecteerd voor twee van de vijf tests. Zuid-Afrika werd nooit een wereld zonder een klopper wereldklasse spinner, kan Australië niet hopen te blijven een zonder een goed genoeg is en waarvan ten minste. Magician verliet het podium en het niet meer uit als kunst, vergeet magie. Ponting staat hoog bij mindere stervelingen en Michael Clarke staat op heel vaak, maar dat maakt ze een team met een aantal zeer goede spelers en niet een heel goed team.
Ashes 2009 zal de geschiedenis ingaan van de laatste Ashes Andrew Flintoff's, Stuart Broad de komst van als een all rounder (als hij voegt wat meer Ashes folklore om zijn veelbelovende start), en een van de meest sprekende debuut eeuw aller tijden door Trott, maar het zal ook herinnerd als het punt waar mitsen en maren over de suprematie van Australië werden eindelijk tot rust, het is voorbij. Begrijp me niet verkeerd kunnen ze nog steeds opgraven Mike Hussey en Stuart Clark, maar je voelt dat de bijdrage van alle tijd groten wanneer ze gaan missen. Soms komen ze om u te herinneren van zichzelf in IPL, maar nog steeds kunnen ze niet worden vervangen. Laten we voel me gezegend voor het zien van Warne, McGrath en Gilchrist samen spelen en wordt ondersteund door Waughs, Ponting, Hyden, Martin en Langer.
In de toekomst, Zuid-Afrika altijd blijft een zeer goed team maar ze moeten naar halve finale te winnen en meer consistent over de hele wereld te zijn, Pakistan blijft raadselachtig briljant, zullen Indiase jonge honden vindt het waarschijnlijk moeilijk om de schoenen van buitengewone voorgangers te vullen. Sri Lanka moet blijven glimp van de kunst laten zien in ambacht. Maar, misschien moeten we voor bepaalde tijd te wachten alvorens met een all out dominante team of voor een kapitein klaagt over gebrek aan concurrentie, zoals Steve Waugh deed een keer.
Op een verwante nota - laten we blij met de komst achterkant van Asif hij een hel veel potentie heeft, laten we hopen een aantal van die te zien en ook van harte welkom Andy Flower in de nieuwe awatar, rechts kun je niet blijven goede mannen naar beneden voor lang.
robijn One Liners te creëren hash
Gisteren terwijl er door een van mijn oude programma's, vond ik deze door mij geschreven eens weer:
#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
Om enkele van spanning te doden laat me onthullen dat raw_text lijkt
, Rechts het is gesneden uit PayPal-betaling bevestiging.
Boven regel als gebroken in delen leest beter:
unescaped_array = CGI.unescape (raw_text). split ('&') unescaped_array = unescaped_array.collect {| x | b = x.split ("="); b.push (nihil) als b.size == 1, b} flattened_array = unescaped_array.flatten hash = Hash [* flattened_array]
Laten we de afzonderlijke stappen in irb:
IRB (hoofd):. 009:0> unescaped_array = CGI.unescape (raw_text) split ('&') => ["SUCCES", "mc_gross = 10,00", "protection_eligibility = niet in aanmerking", "payer_id = U7PPJJ4TSJ47E", "belasting = 0.00", "payment_date = 09:45:30 10 juli 2009 PDT", "payment_status = In afwachting van "] IRB (hoofd): 013:0> unescaped_array = unescaped_array.map {| x | b = x.split ("="); b.push (nihil) als b.size == 1, b} => [["Succes", nihil], ["mc_gross", "10,00"], ["protection_eligibility", "niet in aanmerking"], ["payer_id", "U7PPJJ4TSJ47E"], ["belasting", "0.00"] , ["payment_date", "09:45:30 10 juli 2009 PDT"], ["payment_status", "In afwachting van"]] IRB (hoofd): 014:0> flattened_array = unescaped_array.flatten => ["Succes", nihil, "mc_gross", "10,00", "protection_eligibility", "niet in aanmerking", "payer_id", "U7PPJJ4TSJ47E", "belasting", "0.00", "payment_date", "09:45: 30 juli 10 2009 PDT "," payment_status "," In afwachting van "] IRB (hoofd): 015:0> hash = Hash [* flattened_array] => {"Belasting" => "0.00", "payment_status" => "In afwachting van", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10,00", "SUCCES" => nihil, "payment_date" = > "09:45:30 10 juli 2009 PDT", "protection_eligibility" => "niet in aanmerking"}
BTW, wordt genoemd * splat operator in robijn
Een andere manier om te creëren hash van 'array van paren' is om te injecteren gebruiken:
hash = [[1,2], [3,4]] injecteren ({}). {| resultaat, element | resultaat [element.first] = resultaat [element.last]; resultaat} Er is nog een manier
Schrijf een lus, die ik laat als oefening voor de lezers!
Hier is een beetje los use case van het creëren van hash van arrays:
IRB (hoofd): 005:0> [1,2,3,4,7,9] group_by {| x | x <5.? : Mindere :: groter} => {: Minder => [1, 2, 3, 4]: groter => [7, 9]}
Je kan meer dingen, voornamelijk door het blok wordt gebruikt als sleutel voor dat element in de resulterende hash.
gmail, mutt en msmtp fix
Als u mutt en smtp om Gmail te openen. Hier is een (slechte) nieuws. Cool jongens op Google opnieuw gewijzigd certificaat. Oh, heb je vragen - hoe kan het kennen? Eenvoudige mutt begonnen te klagen over de slechte certificaat wanneer het proberen om msmpt, beruchte gebruik van 'msmtp: TLS-certificaat verificatie mislukt:. Het certificaat heeft nog een bekende uitgever' begroette me op het scherm.
Om te bevestigen over te steken -
Start gewoon na
$ msmtp --serverinfo --host=smtp.gmail.com --tls=on --port=587 --tls-certcheck=off
In plaats van oude Thawte Server Nu krijg je volgen in emittent segment
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US
Gelukkig fix is simpel, hier is wat je moet doen op debian
# apt-get install ca-certificates
# dpkg -s ca-certificates|grep Version
Version: 20090814
Na dit gewoon volgende regel te veranderen in je op ~ /. 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
naar
tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt
Git en Awesome Survey
Hier zijn twee links voor onderzoek van Git (version control systeem) en awesome (window manager) gemeenschap. Als u een van deze, dan kunt u nemen wat tijd in te vullen de vragenlijst. Zie het als de eenvoudigste manier om terug te dragen aan de software die u gebruikt.
Hier zijn de links:
Git - http://www.survs.com/survey?id=2PIMZGU0&channel=Q0EKJ3NF54
Awesome - http://www.survs.com/survey?id=8BVEV3FO&channel=BH07CQ040D
Opmerking - (zoals in de deze pagina's, maar aan de onderkant
) -
"Als je cookies aangeschakeld hebben, dan kunt u altijd in te dienen gedeeltelijk gevuld enquête, en keer terug naar uw antwoorden op een later tijdstip, het invullen van het later."



































