Малко на събранията

След като прочетете тази статия за свободните буфери заключване и виждат използването на CAS (сравни и суапови), аз се почувствах като публикуване на Асамблеята код, за да направят същото. Използвайте случай там е да пишат на родния метод и го наричат ​​от Java (в 1,5, когато едновременно структури от данни в Java са повече или по-малко не съществуват). Без повече приказки, аз ще отприщи кода върху вас :) . Първият е за КО и втората е за изчисляване на GCD използва алгоритъм на Евклид (това може да се намери на много места и уроци, както и).

Компилирате и изпълнявате инструкциите gcc file_name.c ; ./a.out

Сравнете и суапови

   # Include 
  # Include 
 / / Обмен - newvalue, comperand е стар / очакваната стойност
 / *
  * Функция всъщност прави следното нещо - ако стойността AT * DEST е равна на oldvalue след това да го замените с newvalue друг го остави непроменен: вършим всички тези атомично
  *
  * Има два варианта за връщане стойност
  * 1.is първоначалната стойност на целевите и с напусне тежест на повикващата fxn да го сравни с oldval
  * 2.  го направя тук и да се върне 0 или 1, това трябва да бъде по-ефективно
  ** /

 / * По-късно го промените в макро * /
 INT CAS (Int * DEST, Int oldvalue, вътр newvalue) {
	 ФОРМАТ ("(% d,% D,% г)" * DEST, oldvalue, newvalue),;
	 / * Int CAS (INT DEST, Int oldvalue, вътр newvalue) {* /
	 / * Int CAS (INT DEST, Int newvalue, вътр oldvalue) {* /
	 Int резултат = 1 ;/ * 1 показва, че CAS успели и 0 показва, че не успя * /
	 / * Между другото трябва да зададете CC за знаме clobbering,,!  * /
	 volatile__ __asm__ __ (
			 "Movl 2%,% EAX \ n \ т"
			 "Movl% 3,% ebx \ n \ т"
			 "Movl% 0% ECX \ n \ т"
			 "LOCK \ n \ т"
			 "CMPXCHG ebx%, (% ECX) \ n \ т" / * следва да заключите е на същия ред * /
			 "JZ \ n \ т"
			 "Movl $ 0,% 1 \ n \ т"
			 "Готово: \ n \ т"
			 : "= M" (DEST), "= G" (резултат)
			 : "G" (oldvalue), "ж" (newvalue), "M" (DEST)
			 : "EAX%",% ebx ", - ECX", "CC"
			 );
	 ФОРМАТ ("(% d,% D,% г)" * DEST, oldvalue, newvalue),;
	 върне резултат;
 }

 / * TODO
  * Напише друга ASM fxn, която поставя над fxn в последно време контур и продължаваме да опитваме, освен ако не успее * /

 INT главната () {
	 Int A = 5, B = 6;
	 и Int * C = (INT *) изчистване (sizeof (INT));
	 * C = 6;
	 / * Int C = 6; * /
	 ФОРМАТ ("% г \ n", CAS (C, B, б));
	 ФОРМАТ ("% г \ n", CAS (C, B, а));
	 ФОРМАТ ("% D \ n", CAS (C, A, а));
	 ФОРМАТ ("% г \ n", CAS (C, B, б));
	 * C = 6;
	 / * C = 5; * /
	 ФОРМАТ ("смяна на стойността на * C% г \ n", * в);
	 ФОРМАТ ("% г \ n", CAS (C, B, б));
	 ФОРМАТ ("% г \ n", CAS (C, B, а));
	 ФОРМАТ ("% D \ n", CAS (C, A, а));
	 ФОРМАТ ("% г \ n", CAS (C, A, б));
	 ФОРМАТ ("% г \ n", CAS (C, B, а));
	 връщането на 0;
 }

Форматиране на бележки - изглежда като маркер WP синтаксис е добавянето в края на краищата, игнорирайте.

GCD

 # Include 
 INT GCD (INT един, вътр б) {
     Int резултат;
     / * Compute-големия общ делител, използвайки алгоритъм на Евклид * /
     volatile__ __asm__ __ ("movl% 1,% EAX;"
                           "Movl 2%,% ebx;"
                           "CONTD: cmpl $ 0,%% ebx;"
                           "Je свърши;"
                           "Xorl% EDX,% EDX;"
                           "Idivl% ebx;"
                           "Movl ebx%,% EAX;"
                           "Movl% EDX,% ebx;"
                           "JMP CONTD,;"
                           "Готово: movl% EAX, 0%;": "= G" (резултат): "ж" (а), "G" (б)
     );

     върне резултат;
 }

 INT главната () {
     вътр първо, второ;
     ФОРМАТ ("Въведете две цели числа:");
     scanf ("% г% D", и на първо място, и втория);

     ФОРМАТ ("GCD% D &% D% D \ n", първо, второ, GCD (първо, второ));

     връщането на 0;
 }

Cricketing World очаква Новия Световен Ред

25 август 2009 г. от Prashant · Коментари
Пила под: Други

След серия, която обхваща пет тестове и приблизително два месеца, Англия възстановени пепел.

Нека поговорим за първият печеливш екип - тяхната среда за е "средна", ако не искате до критичната. Принос greame Суон с бухалката ще се брои не по-малко от приноса с топката. Стюарт широка - най-добрите на всички универсален е стартер за 5-ти тест. Андрю Строс е само в съответствие батсман и Джими Андерсън е само в съответствие бомбе.

Въпросът тук не е да ругайте постиженията на печеливш екип, но да постави в перспектива на факта, че въпреки всички тези, Австралия загуби. ще трябва да се мисли за няколко секунди, ако са помолени да назоват най-доброто им бомбе. Добре, че е BW Hilfenhaus. Hauritz надмина очакванията everbody, но все още не е достатъчно добър, за да бъде избран за два от петте теста. Южна Африка никога не се превръща в световен тупалка без световно фабрика клас, Австралия не могат да се надяват да остане без една достатъчно добра поне един. Магьосник излезе на сцената и той не изглежда повече като изкуство, забравете магия. Ponting издигат сред малки смъртните и Майкъл Кларк се изправя много често, но това ги прави отбор с няколко много добри играчи, а не много добър отбор.
Ashes 2009 ще се помни за последните Ashes Андрю Флинтоф ", пристигане Стюарт Широк, като един милион всички универсален (ако той добавя още малко Ashes фолклор обещаващ му старт), и един от на най-показателен дебют век на всички времена от Трот, но това ще също да бъде запомнен като точка, IFS и но-та за надмощие на Австралия са най-накрая за почивка, тя е приключила. Не ме разбирайте погрешно, те все още могат да изкопаят Майк Hussey или Стюарт Кларк, но се чувстват приноса на великите за всички времена, когато те изчезват. Понякога те идват да ви напомня за себе си в IPL, но все още те не могат да бъдат заменени. Да се ​​чувствам благословена за Warne, МакГрат и Gilchrist играе заедно и подкрепена от Waughs, Ponting, Hyden, Мартин и Langer.

Продължавайки напред, Южна Африка, винаги ще остане един много добър отбор, но те трябва да спечели на полуфинала и да бъде по-последователно по целия свят, Пакистан ще остане загадъчно блестящ, индийските Млади стрелци-вероятно ще откриете, че е трудно да запълни обувките на извънредни предшественици. Шри Ланка трябва да продължи да показва проблясъци на изкуството в занаят. Но, ние може да се наложи да изчакате за някой, преди всичко от доминиращата екип, или пред капитан се оплаква от липса на конкуренция, като стори това веднъж Стив Уо.

На свързан нота - нека добре дошли на идването гърба на Асиф, той има една ада много потенциал, нека, се надявам да видите част от това и също добре дошли Анди цветя на нова awatar, точно за вас не може да запази добри мъже надолу за дълго.

Ruby един покритие, за да създаде хеш

Вчера, докато преминава през един от старите ми програми, намерих тази написана от мен някъде назад:

#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

За да убие някои от съспенс, позволете ми да оповести че raw_text прилича

 

, Нали той е намален от PayPal плащане признание.

Горният ред, ако е разделен на части чете по-добре:

  unescaped_array = CGI.unescape (raw_text). Сплит ("&")
   unescaped_array = unescaped_array.collect {| X | B = x.split ("="); b.push (нула), ако b.size == 1;}
   flattened_array = unescaped_array.flatten
   Hash = Hash [* flattened_array.] 

Нека да направим отделни стъпки в IRB:

  IRB (Основно): 009:0> unescaped_array = CGI.unescape, (raw_text) Сплит ("&")    

 => ["Успех", "mc_gross = 10,00", "protection_eligibility = Не могат", "payer_id = U7PPJJ4TSJ47E", "данък = 0,00", "payment_date = 09:45:30 10 Юли, 2009 PDT", "payment_status = До "]                                                                         

 IRB (Основно): 013:0> unescaped_array = unescaped_array.map {| X | B = x.split ("="); b.push (нула), ако b.size == 1;}  

 => [["Успех", нула], ["mc_gross", "10,00"], ["protection_eligibility", "Не могат"], ["payer_id", "U7PPJJ4TSJ47E"] ["данък", "0,00"] ["payment_date", "09:45:30 10 Юли, 2009 PDT"], ["payment_status", "В очакване"]]                               

 IRB (Основно): 014:0> flattened_array = unescaped_array.flatten     

 => ["Успех", нула "mc_gross", "10,00", "protection_eligibility", "Не могат", "payer_id", "U7PPJJ4TSJ47E", "данък", "0,00", "payment_date", "09:45: 30 Юли 10, 2009 PDT "," payment_status "," В очакване "]
 IRB (Основно): 015:0>
 Hash = Hash [* flattened_array.]
 => {"Данък" => "0,00", "payment_status" => "В очакване", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10,00", "успех" => нула "payment_date" = > "09:45:30 10 Юли, 2009 PDT", "protection_eligibility" => "Не могат"} 

BTW, * се нарича кръгче оператор в Ruby

Друг начин за създаване на хеша "масив от двойки" е да се използва инжектират:

  Hash = [[1,2], [3,4]] се инжектира ({}). | резултат, елемент | резултат [element.first] = резултат [element.last]; резултат} 

Налице е още един начин :) Напишете една линия, че ще си отида като упражнение на читателите!!

Тук е малко несвързан случай използването на създаване на хеша масиви:

  IRB (Основно): 005:0> [1,2,3,4,7,9] group_by {| X | X <5?  : По-малка :: голяма}

 => {: По-малка => [1, 2, 3, 4]: по-голяма => [7, 9]} 

Можете да правите повече неща, основно в резултат на блока се използва като ключ за този елемент в хеш.

Gmail, пес и msmtp, корекция

Ако използвате пес и SMTP достъп до Gmail. Ето новини (лош). Готини момчета на Google отново сменя сертификат. О, не ви попитам - как да го знаем? Simple пес започна да се оплаква за лош сертификат, когато се опитват да използват msmpt, скандален "msmtp,: TLS сертификат проверка не успя на сертификата не е известен емитент" - поздрави ме на екрана.

За да пресече потвърди -
Просто стартирате след

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

На мястото на стария Thwate сървър, сега да се следват в емитента сегмент
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US

За щастие корекция е проста, тук е какво трябва да се направи на Debian

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

След това просто променя следния ред в ~~ /. 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 и Awesome Проучване

15 август 2009 г. от Prashant · Коментари
Пила под: Други

Ето две връзки за проучване Git (версия система за контрол) и страхотен мениджър на прозорци общността. Ако използвате някоя от тези, моля, отделете малко време, за да попълнят въпросника. Мислете за това като най-простият начин да допринесем обратно за софтуера, който използвате.
Ето линкове:

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

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

Забележка - (както е на тези страници, но в долната част :) ) -
"Ако имате бисквитки поддръжка, вие винаги може да представи частично пълни проучване, и да се върнете към вашите отговори на по-късен срок, като попълва по-късно."