apklausa, stalo, pubsub, pubsubhub, pubsubhubbub
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ų
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
# IncludeLC 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
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
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
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
Š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
$. / Test.sh bus nukreipti hi kaip gerai kaip hii out.txt
$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
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į
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.



































