Trochu montáže
Po prečítaní tohto článku o nárazníky Lock Free a videl využitie CAS (porovnanie a výmena), pripadal som si ako vysielanie kód assembleri, aby urobili to isté. Use case tam bolo napísať natívne metódy a volať z Java späť do 1.5, kedy súbežné dátové štruktúry v Jave boli viac či menej neexistuje). Bez ďalších okolkov, ja sa uvoľnil kód na vás
. Prvým z nich je pre CAS a druhý je pre výpočtovú GCD pomocou Euclid algoritmus (ten možno nájsť na mnohých miestach a cvičenie i).
Kompilovať a spúšťať inštrukcie gcc file_name.c ; ./a.out
Porovnajte a Swap
# Include# Include / / Výmena - newValue, comperand je starý / očakávaná hodnota / * * Funkcia vlastne robí nasledujúce vec - ak je hodnota na * dest sa rovná oldvalue potom ho nahradiť iným newValue ponechať bezo zmeny: to všetko atomárny * * Existujú dve možnosti pre návratové hodnoty * 1.is počiatočná hodnota z * dest a nechať záťaže volajúceho FXN porovnať ju s oldval * 2. to sem a vráti 0 alebo 1, malo by to byť efektívnejšie ** / / * Neskôr zmeniť v makre * / 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 result = 1 ;/ * 1 ukazuje, že sa podarilo cas a 0 ukazuje, že sa nepodarilo * / / * Btw treba nastaviť cc pre vlajky prepisovanie! * / __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" / * LOCK by mal byť na rovnakom riadku * / "JZ Dané \ n \ t" "Movl $ 0,% 1 \ n \ t" "Dané: \ n \ t" : "= M" (dest), "= g" (výsledok) : "G" (oldvalue), "G" (newValue), "m" (dest) : "% EAX", "% EBX", "ECx", "cc" ); printf ("(% d,% d,% d)", * dest, oldvalue, newValue); return vysledok; } / * TODO * Napísať ďalšie asm FXN ktorý sa prejavuje predovšetkým FXN v cykle while a ďalej snažiť, ak uspeje * / int main () { int = 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,)); printf ("% d \ n", CAS (c,,)); printf ("% d \ n", CAS (c, b, b)); * C = 6; / * C = 5; * / printf ("meniace sa hodnota * c k% d \ n", * c); printf ("% d \ n", CAS (c, b, b)); printf ("% d \ n", CAS (c, b,)); printf ("% d \ n", CAS (c,,)); printf ("% d \ n", CAS (c, a, b)); printf ("% d \ n", CAS (c, b,)); return 0; }
Formátovanie poznámky - sa zdá byť ako zvýrazňovač syntaxe wp je pridanie nakoniec ignorovať.
GCD
# Includeint GCD (int, int b) { int vysledok; / * Počítať najväčší spoločný deliteľ pomocou Euclid algoritmus * / __asm__ __ volatile__ ("movl% 1,%% EAX;" "Movl% 2,%% EBX;" "CONTD: cMpl $ 0,%% EBX;" "Je vykonané;" "Xorl%% EDX,%% EDX;" "Idivl%% EBX;" "Movl%% EBX,%% EAX;" "Movl%% EDX,%% EBX;" "JMP CONTD;" "Dané: movl%% EAX,% 0;": "= g" (výsledok): "g" (), "G" (b) ); return vysledok; } int main () { int prvý, druhý, printf ("Zadajte dve celé čísla:"); scanf ("% d% d", a prvý a druhý); printf ("% d GCD zo &% d je% d \ n", prvá, druhá, GCD (prvá, druhá)); return 0; }
Kriketové Svet čaká na nového svetového poriadku
Po sérii trvajúcej päť testov a približne dva mesiace, Anglicko regenerované popol.
Poďme hovoriť o víťazný tím prvý - ich strede, aby ich "priemerná", ak nechcete, aby kritická. Greame Swann príspevok s netopierom bude počítať minimálne príspevku s loptou. Stuart Broad - najlepšie všetci univerzál bol bez štartéra pre 5. test. Andrew Strauss bol iba v súlade pálkar a Jimmy Anderson bol iba v súlade nadhadzovač.
Bod tu nie je nadávať úspechy víťazného tímu, ale dať do perspektívy, že aj cez všetky tieto, Austrália stratila. budete musieť myslieť na pár sekúnd, je ak sú požiadaní o zadanie názvu svoje najlepšie nadhadzovača. Správne, je to BW Hilfenhaus. Hauritz prekonal očakávania everbody je ale stále nie je dosť dobrý, ktoré budú vybrané v dvoch z piatich testov. Južná Afrika nikdy sa stal svet šláger bez svetovej triedy kužeľ, možno dúfať, že Austrália nie je zostávajú raz, bez toho, aby jeden dobrý dosť a aspoň jeden. Kúzelník opustil javisko a to nevyzerá ako umenie už, zabudni na mágiu. Ponting stojí vysoký u menších smrteľníkov a Michael Clarke vstane veľmi často, ale to z nich robí tím s niekoľkými veľmi dobrých hráčov a nie veľmi dobrý tím.
Popol 2009 sa bude spomínať za posledných Ashes Andrew Flintoff je, Stuart Broad príchode ako všetky univerzálne (ak pridá nejaký ďalší Ashes folklór jeho sľubný začiatok), a jeden z najvýrečnejšie debutového storočia všetkých čias podľa Trott, ale bude tiež spomínať ako na miesto, kde IFS a Buts o nadvládu v Austrálii boli nakoniec dal k odpočinku, to je u konca. Nechápte ma zle, že môžu ešte objaviť Mike Hussey, alebo Stuart Clark, ale máte pocit, že príspevok všetkých časových velikánov, keď sa stratí. Niekedy prídu, ktorá vám pripomenie seba v IPL, ale napriek tomu ich nemožno nahradiť. Poďme sa cítim požehnaný za to vidieť Warne, McGrath a Gilchrist hrať spolu a je podporovaný Waughs, Ponting, Hyden, Martin a Langer.
Do budúcna bude Južná Afrika stále ešte je veľmi dobrý tím, ale oni potrebujú vyhrať semifinále a byť viac konzistentné po celom svete, bude Pakistan zostáva tajomne brilantný, bude indickej Mladé pušky pravdepodobne zistíte, že ťažké vyplniť topánky mimoriadnych predchodcov. Srí Lanka by mali aj naďalej ukazovať záblesky umenie remeslá. Ale môžeme čakať niekedy pred mať všetci von dominantný tím alebo predtým, ako kapitán sa sťažuje na nedostatočné hospodárskej súťaže, ako Steve Waugh urobil raz.
Na príbuznú notu - poďme privítať nadchádzajúce chrbát Asif, on má sakra veľký potenciál, dúfajme, že vidieť niečo z toho a tiež vítaní Andy kvetina v novom awatar, priamo nemôžete udržať dobrých ľudí sa na dlho.
Ruby jeden vložky pre vytvorenie hash
Včera pri prechode jedného z mojich starých programov, našiel som to napísal ja niekedy späť:
#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
Zabiť niektoré z napätia dovoľte mi prezradiť, že raw_text vyzerá
, Priamo to bolo rez od paypal platby potvrdenie.
Nad riadku, ak rozdelené do častí znie lepšie:
unescaped_array = CGI.unescape (raw_text). split ('&') unescaped_array = unescaped_array.collect {| x | = b x.split ("="); b.push (nula), ak b.size == 1, b} flattened_array = unescaped_array.flatten hash = Hash [* flattened_array]
Urobme jednotlivé kroky v IRB:
IRB (hlavný):. 009:0> unescaped_array = CGI.unescape (raw_text) split ('&') => ["Úspech", "mc_gross = 10,00", "protection_eligibility = nespôsobilý", "payer_id = U7PPJJ4TSJ47E", "daň = 0,00", "payment_date = 09:45:30 10.07.2009 PDT", "payment_status = Do "] IRB (hlavný): 013:0> unescaped_array = unescaped_array.map {| x | = b x.split ("="); b.push (nula), ak b.size == 1, b} => [["Úspech", nil], ["mc_gross", "10,00"], ["protection_eligibility", "Zákaz činnosti"], ["payer_id", "U7PPJJ4TSJ47E"], ["daň", "0.00"] ["payment_date", "09:45:30 10.07.2009 PDT"], ["payment_status", "Do"]] IRB (hlavný): 014:0> flattened_array = unescaped_array.flatten => ["Úspech", nula, "mc_gross", "10,00", "protection_eligibility", "nespôsobilý", "payer_id", "U7PPJJ4TSJ47E", "daň", "0.00", "payment_date", "9:45: 30 10.07.2009 PDT "," payment_status "," Do "] IRB (hlavný): 015:0> hash = Hash [* flattened_array] => {"Daň" => "0.00", "payment_status" => "Do", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10,00", "úspech" => nula, "payment_date" = > "09:45:30 10.07.2009 PDT", "protection_eligibility" => "nespôsobilý"}
BTW, je nazývaný * ikona operátor v ruby
Ďalší spôsob, ako vytvoriť hash z 'radu párov je použiť injekciu:
hash = [[1,2], [3,4]] injekciu ({}). {| výsledok, prvok | výsledok [element.first] = výsledok [element.last];} výsledok Existuje ešte jeden spôsob, ako
Napíšte slučku, že nechám ako cvičenie na čitateľa!
Tu je trochu nesúvisí prípad použitia vytváraní hash z poľa:
IRB (hlavný): 005:0> [1,2,3,4,7,9] group_by {| x | x <5.? : Menšie väčšie ::} => {: Menšie => [1, 2, 3, 4]: väčšie => [7, 9]}
Môžete to urobiť viac vecí, v podstate výsledok bloku sa používa ako kľúč pre tento prvok vo výslednej hodnoty hash.
gmail, mutt a msmtp oprava
Ak používate mutt a SMTP pre prístup k službe Gmail. Tu je (zlé) správy. Skvelé chlapci na Google opäť zmenil certifikát. Ach, vy ste sa opýtať - ako to vieš? Jednoduché mutt začal sťažovať na zlé certifikátu pri pokuse o použitie msmpt, neslávne známy Hasičské msmtp: TLS overenie certifikátu zlyhal:. Certifikát nemá známeho vydavateľa " privítal ma na obrazovke.
Prejsť potvrdenie -
Stačí spustiť po
$ msmtp --serverinfo --host=smtp.gmail.com --tls=on --port=587 --tls-certcheck=off
Na mieste starej Thwate serveri sa dostanete po emitenta v segmente
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US
Našťastie oprava je jednoduchá, tu je to, čo musíte urobiť na debian
# apt-get install ca-certificates
# dpkg -s ca-certificates|grep Version
Version: 20090814
Po tomto stačí zmeniť nasledujúce riadky vo vás ~ ~ ~ V /. 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
na
tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt
Git a skvelý prehľad
Tu sú dva odkazy pre prieskum uvedený GIT (systém pre správu verzií) a úžasné (window manager) komunity. Ak používate niektorý z nich, nájdite si na nejaký čas na vyplnenie dotazníka. Ber to ako najjednoduchší spôsob, ako prispieť späť na softvér, ktorý používate.
Tu sú odkazy:
Git - http://www.survs.com/survey?id=2PIMZGU0&channel=Q0EKJ3NF54
Awesome - http://www.survs.com/survey?id=8BVEV3FO&channel=BH07CQ040D
Poznámka - (Ako nájsť na týchto stránkach, ale na dne
) -
"Ak máte povolené cookies, môžete vždy predložiť vyplnený čiastočne prieskum, a vrátiť sa do odpovedí na neskoršiu dobu, dokončenie neskôr."



































