apklausa, stalo, pubsub, pubsubhub, pubsubhubbub

Rugsėjo 6, 2009 prashant · Komentarai
Filed under: technologijos

Tuo atveju, jei yra nusiteikusios skeptiškai, yra beprotybė virš metodas, po pavadinimo. Technologijų ratą, ji yra mažai tikėtina, kad jūs dar nesate girdėję apie pubsubhubbub. Greitai keletą mėnesių, jis buvo vienas iš trijų geriausių kalbėjo apie dalykus. Kiti du homomorphic šifravimo ir "Google" banga [ 1 ]. Grįžtant prie dabartinės paštu - pavadinime sąlygos rodo, kaip gauti turinį iš kitų žmonių. Šie duomenys tampa aišku, jei jūs galite įsivaizduoti, kas vyksta atsižvelgiant į dienoraščius, nors jie iš esmės ne tik dienoraščių.

Apklausa nurodo į scenarijų, klientai nuolat klausia serverį, jei kažkas naujo sugalvoti. Kaip dažnai prašyti naujinimų visada su apklausos pernelyg dažnai ar pernelyg menkos problema, bet kaip vienas skaitytojas atkreipė dėmesį, kad vienas puikus dalykas, balsavimas, kad serveris neturi palaikyti būklę.

Ping susijęs su atveju, kai rašyti straipsnį, jūs (ar jūsų programinė įranga) taip pat patikslinami kai kurie populiarus (centrinis) atnaujinimo paslaugas. Kai fonas čia .

Kitas yra pubsub,, kuri stovi už publikuoti / prenumeruoti, viena iš anksčiausiai aikštę buvo čia Evan Henshaw-Plath ir Kellan Elliott-McCrea (72 skaidres, bet verta išgyvena). Viliojančio pavyzdys jie davė prieš tai - tam tikros datos, FriendFeed nuskaityti Flickr 2,9 milijonų kartų, kad gautumėte naujausius nuotraukas 45,754 vartotojų, iš kurių 6721 jau aplankė Flickr tose 24 val. Ir galėjo potencialiai "nuotrauka įkelta. Atkreipkite dėmesį, kad tai, ką jie pasiūlė ne nauja technologija, kaip jie "revoliucinį naują 20 metų senumo technologiją". Jei daryti dienoraščių tada vienas iš pagrindinių problemų, su XMPP - buvimas duomenys lengvosios frakcijos, kurios gali būti toks didelis, kaip 60-70%, galima sumažinti daug.

pubsubhub reiškia skelbti prenumeruoti šakotuvą, ir pubsubhubbub yra protokolas, kurios branduolys yra idėja pubsubhub. Kur svietimo pasakyti Bloggers) atnaujinti koncentratorius, kuri (gali būti daugiau nei vienas mazgai, kalbėtis tarpusavyje) gyvena "kažkur debesyje", kaip numatyta protokole, tai galima stumti arba traukti už protokolo, bet kitą saitą grandinės, koncentratorius klientui (tarkim skaitytojus) visada stumti modelį. Šis puslapis yra geras atspirties taškas, pubsubhubbub apžvalga skaidrės yra geri. Kada nors iškalbingas Anil Dash apibūdina jį kaip mygtukinius internete.
Dvi kitos susijusios skaito tai yra webhooks kuris yra iš esmės http Atgalinės iššūkius. Github naudoja ją, kad PayPal asinchroniniam pranešimus apie mokėjimo IPN . Taigi daugelis kitų. Susiję sąvoka yra rsscloud, kuris yra again pubsub koncentratorius. Sekite šią nuorodą norėdami sužinoti daugiau.

Jums gali būti įdomu, kas yra taškas raštu visa tai čia yra du 1. Šie dalykai yra verta žinoti, minimaliai ne mažiau kaip ir 2. Šis dienoraštis yra dabar įjungtas pubsubhubbub per appspot Stebulės naudojant šią WordPress įskiepiai ir pašarams yra įjungtas pubsubhubbub per FeedBurner, nuorodą čia
-
[ 1 ]. - Geras įvadinis skaityti visiškai homomorphic šifravimo tai Bruce Schneier straipsnis ir šis aptarimas yra daugiau ar mažiau tik "Google" banga šaltinis.

Atnaujinimas - Šis pranešimas paaiškina, kaip visuomenės serveryje atgalinių reikalavimas gali būti dirbo aplink XMPP vartai [pubsubhubbub), stalinių klientų.

Truputis susirinkimų

Rugpjūčio 29, 2009 prashant · Komentarai
Filed under: technologijos

Perskaičius šį straipsnį apie stabdžiu laisvų buferių ir matyti CAS naudoti, lyginti ir keistis), jaučiau kaip parašėte surinkimo kodą daryti tą patį. Naudokite bylą ten buvo parašyti gimtoji metodą ir jį vadiname iš Java (1,5, kai tuo pačiu metu duomenų struktūros Java buvo daugiau ar mažiau ne visai). Be tolesnio ceremonija, aš ant jūsų atskleisti kodą :) . Pirmasis yra CAS ir antra skaičiavimo GCD naudojant Euklido algoritmą galima rasti daugelyje vietų ir vadovėliai, taip pat tai vienas).

Sudaryti ir, paleisti instrukcijas gcc file_name.c ; ./a.out

Palyginti ir Swap

   # Include 
  # Include 
 / / Mainai - newvalue comperand metai / laukiama vertė
 / *
  * Funkcija iš tiesų šį dalyką - jei vertė yra lygi, į oldvalue tada pakeisti jį newvalue dar palikti jį nepakeistą * dest: padaryti visus šiuos atominių
  *
  * Yra du variantai sugrįžimo vertę
  * 1.is pradinė vertė * dest ir palikti kurios skambinama fxn, našta, palyginti ją su oldval
  * 2.  padaryti čia ir grąžina 0 arba 1, tai turėtų būti efektyvesnė
  ** /

 / * Vėliau pakeisti jį į makrokomandos * /
 LC 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 rezultatas = 1 ;/ * 1 rodo, kad cas pavyko ir 0 rodo, kad ji nesugebėjo * /
	 / * BTW reikia nustatyti kubinių centimetrų vėliava clobbering!  * /
	 __asm__ __ volatile__ (
			 "Movl% 2% EAX \ n \ t"
			 "Movl% 3%% ebx \ n \ t"
			 "Movl% 0%% ECX \ n \ t"
			 "UŽRAKTAS \ n \ t"
			 "CMPXCHG% ebx (% ECX), \ n \ t" / * LOCK būti toje pačioje eilutėje * /
			 "JZ PRIIMTA \ n \ t"
			 "Movl $ 0,% 1 \ n \ t"
			 "Priimta: \ n \ t"
			 : "=" (DEST), "= g (rezultatas)
			 : G (oldvalue), "g" (newvalue), "M" (dest)
			 : "% EAX", "% ebx", "ECX", "CC"
			 );
	 printf ("(% d% d,% d)" * dest, oldvalue, newvalue),;
	 grįžti rezultatas;
 }

 / * TODO
  * Rašyti kitą ASM fxn, kuris ištaisytų virš fxn į while cikle ir nuolat bando, kol negalės * /

 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));
	 printf ("% d \ n", CAS (c,));
	 printf ("% d \ n", CAS (C, B, b));
	 * C = 6;
	 / * C = 5 * /
	 printf ("Kintantis vertė * c% 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, b));
	 printf ("% d \ n", CAS (c, b));
	 grįžti 0;
 }

Formatavimo pažymi - atrodo kaip wp sintaksės žymėjimą didina galų gale, ignoruoti.

GCD

 # Include 
 LC gcd (int, int b) {
     LC rezultatas;
     / * Apskaičiuokite didžiausias bendras daliklis, Euklido "algoritmas * /
     __asm__ __ volatile__ ("movl% 1%% EAX;"
                           "Movl% 2% ebx;"
                           "CONTD: cmpl $ 0,%% ebx;"
                           "Je PADARYTA;"
                           "Xorl%% EDX,%% EDX;"
                           "Idivl% ebx;"
                           "Movl%% ebx,%% EAX;"
                           "Movl%% EDX, ebx%%;"
                           "JMP CONTD,;"
                           "Priimta: movl%% EAX,% 0;": "= g (rezultatas):" g "a" G "(b)
     );

     grįžti rezultatas;
 }

 int main () {
     int 1. antra;
     printf ("Įveskite du sveikieji skaičiai:");
     scanf ("% d% d", & pirma, ir antrasis);

     printf ("% d ir% d GCD yra% d \ n", pirma, antra, gcd (pirmas, antras));

     grįžti 0;
 }

ruby 1 įklotai sukurti maišos

Rugpjūčio 20, 2009 prashant · Komentarai
Filed under: technologijos

Vakar, o išgyvena vieną iš savo senų programų, radau, tai parašė man kada nors atgal:

#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

Siekiant sunaikinti kai nežinia, leiskite man atskleisti, kad raw_text atrodo

 

, Tiesa ji buvo sumažinta nuo paypal mokėjimo patvirtinimą.

Virš linijos, jei neveikia dalimis skaito geriau:

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

Leiskite Padarykim atskirus veiksmus IRB:

  IRB (Pagrindinė): 009:0.> unescaped_array = CGI.unescape (raw_text) padalijimas ("&")    

 => ["SĖKMĖ", "mc_gross = 10,00", "protection_eligibility = Netinkamos", "payer_id = U7PPJJ4TSJ47E", "mokestis = 0.00", "payment_date = 09:45:30 Lie 10, 2009 PDT", "payment_status = Kol "]                                                                         

 IRB (Pagrindinė): 013:0> unescaped_array = unescaped_array.map {| x | b = x.split ("="); b.push (nulinis), jei b.size == 1;}  

 => ["SĖKMĖ", nulis], ["mc_gross", "10,00"] ["protection_eligibility", "netinkamas"] ["payer_id", "U7PPJJ4TSJ47E"] ["mokesčių", "0.00"] ["payment_date", "09:45:30 Jul 10, 2009 PDT"] ["payment_status", "Iki"]]                               

 IRB (Pagrindinė): 014:0> flattened_array = unescaped_array.flatten.     

 => ["SĖKMĖ" nulinis ", mc_gross", "10,00", "protection_eligibility", "netinkamas", "payer_id", "U7PPJJ4TSJ47E", "mokestis", "0,00", "payment_date", "09:45: 30 Lie 10, 2009 PDT "," payment_status "," Iki "]
 IRB (Pagrindinė): 015:0>
 hash = hash [* flattened_array]
 => {"Mokestis" => "0,00", "payment_status" => "Iki", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10,00", "SĖKMĖ" => nulis, "payment_date" = > "09:45:30 Lie 10, 2009 PDT", "protection_eligibility" => "netinkamas"} 

BTW, * vadinama šauktukas operatorius, ruby

Kitas būdas sukurti maišos iš "masyvas porų", - naudoti švirkšti:

  hash = [1,2] [3,4] švirkšti ({}). {| rezultatas, elementas | rezultatas [element.first] = rezultatas [element.last];} 

Yra dar vienas būdas :) Rašyti kilpą, kad aš paliksiu kaip pratybose skaitytojų!!

Čia yra šiek tiek nesusijęs sukurti maišos iš masyvų naudojimo atvejis:

  IRB (Pagrindinė): 005:0> [1,2,3,4,7,9] group_by {| x | x <5.?  : Mažesnio :: didesnė}

 => {: Mažiau => [1, 2, 3, 4]: daugiau => [7, 9]} 

Tai galite padaryti daugiau dalykų, iš esmės rezultatas bloko naudojamas kaip šio elemento, hash raktas.

Gmail Mutt ir msmtp, nustatyti

Rugpjūčio 17, 2009 prashant · Komentarai
Filed under: technologijos

Jei naudojate Mutt ir SMTP Prieiga "Gmail". Čia yra (blogas) naujienos. Cool vaikinai "Google" vėl pasikeitė sertifikatą. O, tu paklausti - kaip jis tai žino? Paprasta mutt pradėjo skųstis apie netinkamą sertifikato bandant naudoti msmpt, liūdnai "msmtp,: TLS pažymėjimas patikrinimas nepavyko. Sertifikatas ne got a žinomą emitentą pasitiko mane ekrane.

Norėdami kirsti patvirtinti -
Tiesiog paleisti po

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

Vietoj senosios Thwate Server dabar jums po emitento segmente
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US

Laimei nustatyti yra labai paprasta, čia yra tai, ką reikia daryti debian

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

Po to tiesiog pakeisti šią eilutę. Jūs ~~ /. 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

Sisteminį maišos yaml conf failus

Liepos 31, 2009 prashant · Komentarai
Filed under: technologijos

Yaml yra gana patogu rašyti konfigūracijos failus. Pagrindinis privalumas yra tai, kad ji skamba kaip tekstinį failą. Tai veikia tikrai gerai, jei jūsų konfigūracijos failas yra plokščia (ne hierarchija) ir neturi pakartojimų.
Jei Jūsų konfigūracijos failas yra pakartojimų tada prasminga išskirti šiuos elementus ir pakartotinai juos. Ką reiškia tai, tarkime, jūsų konfigūracijos failas atrodo taip:

  plėtra:
   input_location: common_input
   output_location: dev_location
   paštas:
     smtp_server: your_server
     Vartotojas: your_login
     slaptažodis: top_secret
 gamyba:
   input_location: common_input
   output_location: dev_location
   paštas:
     smtp_server: your_server
     Vartotojas: your_login
     slaptažodis: top_secret 

Darant prielaidą, kad virš kodą į / tmp / test.yml čia, kaip jūs galite skaityti python ir Ruby
$cat readyml.py

 #! / Usr / bin / env python
 , iš pprint importo pprint kaip pp
 # Debian reikia instaliuoti python-yaml
 yaml importo apkrovos, load_all, sąvartynas
 hash = apkrova (atvira ('/ tmp / test.yml "))
 PP (maišos ["tobulinimas ']) 


$ cat readyml.rb

  #! / Usr / bin / env ruby
 reikalauti "pp '
 hash = yaml :: apkrova (File.open ('/ tmp / test.yml ") ... skaityti)
 PP maišos ['vystymasis'] 

čia yra patogus įdėklas ruby ​​versija
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' arba galite pabandyti pats IRB ar python konsolės.

Atkreipkite dėmesį, kad pirmiau kodo fragmentą, viskas išskyrus išėjimo vieta yra pati kūrimo ir gamybos daliai. Tai, kur yml mazgas identifikatorius ateina gelbėti. Idėja yra labai paprasta, numatytųjų reikšmių rinkinį ir perrašyti jas kitoje vietoje.
Jūs galite ištraukti jį išskiria taip:

  defaults: ir pagal nutylėjimą
   input_location: common_input
   output_location: dev_location
   paštas:
     Sender_name: siuntėjas
     smtp_server: your_server
     Vartotojas: your_login
     slaptažodis: top_secret
 plėtra:
   <<: * Pagal nutylėjimą
 gamyba:
   <<: * Pagal nutylėjimą
   output_location: prod_location 


$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$

Puiku, ji veikia (tm)!.
Be abejonės mes prekiaujama šiek tiek aiškumo šiek tiek magijos. Čia yra nedidelis paaiškinimas: &, * ir <<: ir kuris yra žymės saito gali būti suprantama kaip mazgo identifikatoriaus * mazgas nuoroda ir <<: reiškia maišos suliejimą.

Dėl išsamesnės informacijos žr. Arba yaml specifikacijų arba Wikipedia
Iki šiol tokia gera, bet čia yra laimikis, šios maišos susilieja nėra rekursinis. Ką tai reiškia yra tokia: tarkime, norite turėti skirtingą dviejų aplinkų paštu siuntėjo vardą, jums gali būti linkusios daryti taip:

  defaults: ir pagal nutylėjimą
   input_location: common_input
   output_location: dev_location
   paštas:
     Sender_name: siuntėjas
     smtp_server: your_server
     Vartotojas: your_login
     slaptažodis: top_secret
 plėtra:
   <<: * Pagal nutylėjimą
   paštas:
     Sender_name: sender_dev
 gamyba:
   <<: * Pagal nutylėjimą
   output_location: prod_location
   paštas:
     Sender_name: sender_prod 

Leidžia patikrinti,

$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
nil
$

Oi, kažkas nutiko, kaip minėta problema yra ta, kad maišos suliejimas nėra rekursinis o sujungus jis pakeitė laišką įsipareigojimų nevykdymo paštu produkcija, kuri turi tik vieną klavišą. Sprendimas / darbas aplink išsivynioti daugiau vieną lygį:

  common_settings: & common_settings
 input_location: common_input
 output_location: dev_location
 mail_defaults: ir mail_defaults
  Sender_name: siuntėjas
   smtp_server: your_server
   Vartotojas: your_login
   slaptažodis: top_secret

 defaults: ir pagal nutylėjimą
   <<: * Common_settings
   paštas:
     <<: * Mail_defaults
 plėtra:
   <<: * Pagal nutylėjimą
 gamyba:
   <<: * Pagal nutylėjimą
   paštas:
     <<: * Mail_defaults
     Sender_name: sender_prod

Leidžia patikrinti dar kartą

$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$

Ar jūs kalbate, jūs turite dar vieną lygį, lizdus, ​​gerai jūs tikrai gali išsivynioti dar vieną lygį, bet tada ji tampa netvarka. Taigi, jei esate ne bando parašyti sprendimą bokštus Hanojus conf faile, geriau, į restucture conf failą ne kasti į yaml ar kažkas kita. Bet tai jūsų skambutis vistiek.

Truputis korpuso peradresavimo

Gegužės 10, 2009 prashant · Komentarai
Filed under: technologijos

Štai kaip mes paprastai padaryti shell peradresavimą
$ ./pgm.sh args >out.txt 2>err.txt
Norėjau pakeisti, jis šiek tiek ir taip paleisti
$ ./pgm.sh args
reikalavimo, kad išėjimo ir klaidos turėtų eiti tam tikru failo vardą, apskaičiuotą args pagrįstas viduje pgm.sh. Vienas pavyzdinis atvejis galėtų būti, kai data args dalis. Taigi norėtumėte STDOUT eiti say / jūsų / katalogą / pgm_out_YYYYMMDD.txt 1

Su standartiniu būdu nukreipiant problema N>file.txt ty, derinant failo deskriptorius N į plik.txt, yra, kad jis veikia tik naujai išsišakojęs, o ne dabartiniu metu.
taip
$ echo hi 1>out.txt ; echo hii . bus išsiųsti hi į out.txt, bet spausdinti hii stdout 2

Tai kur exec ateina į mūsų gelbėjimo. Jei mes pridėti exec 1>somefile.txt tada produkcija nuo likusios scenarijaus vyks somefile.txt

$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
$. / Test.sh bus nukreipti hi kaip gerai kaip hii out.txt

Panašiai nukreipti STDOUT taip pat stderr mes padarysime kažką panašaus į tai
cat test2.sh
exec 1>out.txt
exec 2>err.txt
echo out text
echo 1>&2 err text
somenoneexitent command
ls -ld /tmp

Dabar grįžtant prie pradinio taško, nukreipiant tam tikra failą iš korpuso viduje, tegul sako, kad programa skaičiuojamas failo pavadinimą, kai kintamojo OUTFILE, mes galėjo tik padaryti exec 1>$OUTFILE

Tai išsprendžia problemą. Bet tu gali eiti per tokiu pavyzdžiu, kuriuo pasiekiamas "laisvą prieigą failo apvalkalo scenarijus. Pavyzdys yra iš čia
echo 1234567890 > File # Write string to "File".
exec 3<> File # Open "File" and assign fd 3 to it.
read -n 4 <&3 # Read only 4 characters.
echo -n . >&3 # Write a decimal point there.
exec 3>&- # Close fd 3.
cat File # ==> 1234.67890

Su pastabomis, šis kodas yra savaime suprantama.
-
1 Jis taip pat gali būti padaryta $ ./pgm.sh args >pgm_out`date +%Y%m%d` , tačiau idėja yra sukurti šio failo pavadinimą, nors pačios programos logika.
2 1 1> out.txt yra nereikalingas, bet jis paaiškina, kad mes nukreipiant fd 1

Mastelį, arba ne pagal mastelį

Sausio 11, 2009 prashant · Komentarai
Filed under: technologijos

Kalbėdami apie horizontalaus padalijimo duomenų bazių, Delniniai šlovės DHH siūlo, kad mastelio dalykai gali palaukti, tikrai palaukti iki taško, reikalauti, kad jūsų verslo poreikius. Jo straipsnis tikrai prasminga, mažos konfigūracijos pasakyti pradedantiesiems. Nesakau, kad į pradedantiesiems turėtumėte rašyti demo programas, tačiau atsižvelgiant į tai, kad yra tik 24 valandas per dieną, reikia sutelkti dėmesį į aptarnavimo pasakyti 1000 vartotojams daugiau atitinkančia būdu, kaip prarasti savo miego per nerimauti, kaip mano prašymas rankena apkrova 13.142 mln. vartotojai. Jei jūs gaunate šias daug vartotojų, jūs žinosite, kaip masto. Mastelio pradedantiesiems yra gera problema spręsti, bet daug geriau problema, kad aš turiu galvoje, bet paleisties norėčiau paleisti į šią problemą!

Jeremy Zawodny susijusios kitos straipsnyje rašo, neturėtų priklausys nuo pono Moore, jei turite problemų su mastelio.

Kadangi šie straipsniai susiję su Moore'o dėsnis aš negaliu padėti, bet rašyti, kad Moore'o dėsnis turi būti vienas iš labiausiai apibendrintas teisės Computer Science. Nuo jo originalaus prognozavimas apie tranzistorių tankio, šis įstatymas dabar įvardija, kur jums Natknąć eksponentinio augimo.