Trochu montáže

29.srpna 2009 od Prashant · Komentáře
Soubor pod: technologie

Po přečtení tohoto článku o nárazníky Lock Free a viděl využití CAS (srovnání a výměna), připadal jsem si jako vysílání kód assembleru, aby učinily totéž. Use case tam bylo napsat nativní metody a volat z Java zpět do 1.5, kdy souběžné datové struktury v Javě byly více či méně neexistuje). Bez dalších okolků, já se uvolnil kód na vás :) . Prvním z nich je pro CAS a druhý je pro výpočetní GCD pomocí Euclida algoritmus (ten lze nalézt na mnoha místech a cvičení i).

Kompilovat a spouštět instrukce gcc file_name.c ; ./a.out

Porovnejte a Swap

   # Include 
  # Include 
 / / Výměna - newValue, comperand je starý / očekávaná hodnota
 / *
  * Funkce vlastně dělá následující věc - pokud je hodnota na * dest se rovná oldvalue pak jej nahradit jiným newValue ponechat beze změny: to vše atomicky
  *
  * Existují dvě možnosti pro návratové hodnoty
  * 1.is počáteční hodnota z * dest a nechat zátěže volajícího fxn porovnat ji s oldval
  * 2.  to sem a vrátí 0 nebo 1, mělo by to být efektivnější
  ** /

 / * Později změnit v makru * /
 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 se podařilo cas a 0 ukazuje, že se nezdařilo * /
	 / * Btw třeba nastavit cc pro vlajky přepisování!  * /
	 __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 měl být na stejném řádku * /
			 "JZ Dáno \ n \ t"
			 "Movl $ 0,% 1 \ n \ t"
			 "Dáno: \ n \ t"
			 : "= M" (dest), "= g" (výsledek)
			 : "G" (oldvalue), "G" (newValue), "m" (dest)
			 : "% Eax", "% ebx", "ecx", "cc"
			 );
	 printf ("(% d,% d,% d)", * dest, oldvalue, newValue);
	 return vysledek;
 }

 / * TODO
  * Napsat další asm fxn který se projevuje především fxn v cyklu while a dál snažit, pokud uspěje * /

 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 ("měnící se 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átování poznámky - se zdá být jako zvýrazňovač syntaxe wp je přidání nakonec ignorovat.

GCD

 # Include 
 int gcd (int, int b) {
     int vysledek;
     / * Počítat největší společný dělitel pomocí Euclida algoritmus * /
     __asm__ __ volatile__ ("movl% 1,%% eax;"
                           "Movl% 2,%% ebx;"
                           "CONTD: cMpl $ 0,%% ebx;"
                           "Je provedeno;"
                           "Xorl%% edx,%% edx;"
                           "Idivl%% ebx;"
                           "Movl%% ebx,%% eax;"
                           "Movl%% edx,%% ebx;"
                           "Jmp CONTD;"
                           "Dáno: movl%% eax,% 0;": "= g" (výsledek): "g" (), "G" (b)
     );

     return vysledek;
 }

 int main () {
     int první, druhý,
     printf ("Zadejte dvě celá čísla:");
     scanf ("% d% d", a první, a druhý);

     printf ("% d GCD ze &% d je% d \ n", první, druhá, gcd (první, druhá));

     return 0;
 }

Kriketovou Svět čeká na nového světového řádu

25.srpna 2009 od Prashant · Komentáře
Soubor pod: misc

Po sérii trvající pět testů a přibližně dva měsíce, Anglie regenerované popel.

Pojďme mluvit o vítězný tým první - jejich středu, aby je "průměrná", pokud nechcete, aby kritická. Greame Swann příspěvek s netopýrem bude počítat minimálně příspěvku s míčem. Stuart Broad - nejlepší všichni univerzál byl bez startéru pro 5. test. Andrew Strauss byl pouze v souladu pálkař a Jimmy Anderson byl pouze v souladu nadhazovač.

Bod zde není nadávat úspěchy vítězného týmu, ale dát do perspektivy, že i přes všechny tyto, Austrálie ztratila. budete muset myslet na pár vteřin, je-li požádáni o zadání názvu své nejlepší nadhazovače. Správně, je to BW Hilfenhaus. Hauritz překonal očekávání everbody je ale stále není dost dobrý, které budou vybrány ve dvou z pěti testů. Jižní Afrika nikdy se stal svět šlágr bez světové třídy kužel, lze doufat, že Austrálie není zůstávají jednou, aniž by jeden dobrý dost a alespoň jeden. Kouzelník opustil jeviště a to nevypadá jako umění už, zapomeň na magii. Ponting stojí vysoký u menších smrtelníků a Michael Clarke vstane velmi často, ale to z nich dělá tým s několika velmi dobrých hráčů a ne velmi dobrý tým.
Popel 2009 se bude vzpomínat za posledních Ashes Andrew Flintoff je, Stuart Broad příchodu jako všechny univerzální (pokud přidá nějaký další Ashes folklor jeho slibný začátek), a jeden z nejvýmluvnější debutového století všech dob podle Trott, ale bude také vzpomínat jako na místo, kde IFS a Buts o nadvládu v Austrálii byly nakonec dal k odpočinku, to je u konce. Nechápejte mě špatně, že mohou ještě objevit Mike Hussey, nebo Stuart Clark, ale máte pocit, že přínos všech časových velikánů, když se ztratí. Někdy přijdou, která vám připomene sebe v IPL, ale přesto je nelze nahradit. Pojďme se cítím požehnán za to vidět Warne, McGrath a Gilchrist hrát spolu a je podporován Waughs, Ponting, Hyden, Martin a Langer.

Do budoucna bude Jižní Afrika stále ještě je velmi dobrý tým, ale oni potřebují vyhrát semifinále a být více konzistentní po celém světě, bude Pákistán zůstává tajemně brilantní, bude indické Mladé pušky pravděpodobně zjistíte, že těžké vyplnit boty mimořádných předchůdců. Srí Lanka by měly i nadále ukazovat záblesky umění řemesla. Ale můžeme čekat někdy před mít všichni ven dominantní tým nebo předtím, než kapitán si stěžuje na nedostatečné hospodářské soutěže, jak Steve Waugh udělal jednou.

Na příbuznou notu - pojďme přivítat nadcházející záda Asif, on má sakra velký potenciál, doufejme, že vidět něco z toho a také vítáni Andy květina v novém awatar, přímo nemůžete udržet dobré lidi se na dlouho.

Ruby jeden vložky pro vytvoření hash

20.srpna 2009 od Prashant · Komentáře
Soubor pod: technologie

Včera při průchodu jednoho z mých starých programů, našel jsem to napsal já někdy zpět:

#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

Zabít některé z napětí dovolte mi prozradit, že raw_text vypadá

 

, Přímo to bylo řez od paypal platby potvrzení.

Nad řádku, pokud rozděleny do částí zní lépe:

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

Udělejme jednotlivé kroky v IRB:

  IRB (hlavní):. 009:0> unescaped_array = CGI.unescape (raw_text) split ('&')    

 => ["Úspěch", "mc_gross = 10,00", "protection_eligibility = nezpů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), pokud b.size == 1, b}  

 => [["Úspěch", 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     

 => ["Úspěch", nula, "mc_gross", "10,00", "protection_eligibility", "nezpů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", "úspěch" => nula, "payment_date" = > "09:45:30 10.07.2009 PDT", "protection_eligibility" => "nezpůsobilý"} 

BTW, je nazýván * ikona operátor v ruby

Další způsob, jak vytvořit hash z 'řady párů je použít injekci:

  hash = [[1,2], [3,4]] injekci ({}). {| výsledek, prvek | výsledek [element.first] = výsledek [element.last];} výsledek 

Existuje ještě jeden způsob, jak :) Napište smyčku, že nechám jako cvičení na čtenáře!

Zde je trochu nesouvisí případ užití vytváření hash z pole:

  IRB (hlavní): 005:0> [1,2,3,4,7,9] group_by {| x | x <5.?  : Menší větší ::}

 => {: Menší => [1, 2, 3, 4]: větší => [7, 9]} 

Můžete to udělat více věcí, v podstatě výsledek bloku se používá jako klíč pro tento prvek ve výsledné hodnoty hash.

gmail, mutt a msmtp oprava

17.srpna 2009 od Prashant · Komentáře
Soubor pod: technologie

Pokud používáte mutt a SMTP pro přístup ke službě Gmail. Zde je (špatné) zprávy. Skvělé kluci na Google opět změnil certifikát. Ach, vy jste se zeptat - jak to víš? Jednoduché mutt začal stěžovat na špatné certifikátu při pokusu o použití msmpt, nechvalně známý Hasičské msmtp: TLS ověření certifikátu selhal:. Certifikát nemá známého vydavatele " přivítal mě na obrazovce.

Přejít potvrzení -
Stačí spustit po

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

Na místě staré Thwate serveru se dostanete po emitenta v segmentu
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US

Naštěstí oprava je jednoduchá, tady je to, co musíte udělat na debian

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

Po tomto stačí změnit následující řádky ve 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 skvělý přehled

15.srpna 2009 od Prashant · Komentáře
Soubor pod: misc

Zde jsou dva odkazy pro průzkum podle GIT (systém pro správu verzí) a úžasné (window manager) komunity. Používáte-li některý z nich, najděte si na nějaký čas na vyplnění dotazníku. Ber to jako nejjednodušší způsob, jak přispět zpět na software, který používáte.
Zde jsou odkazy:

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

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

Poznámka - (Jak najít na těchto stránkách, ale na dně :) ) -
"Pokud máte povoleny cookies, můžete vždy předložit vyplněný zčásti průzkum, a vrátit se do odpovědí na pozdější dobu, dokončení později."