anketa, ping, pubsub, pubsubhub, pubsubhubbub
V primeru, da so skeptični, da je metoda v norosti zgoraj, v naslovu delovnega mesta. V tech krogih ni verjetno, da še niste slišali za pubsubhubbub. Na hitro nekaj mesecih, je bil eden od prvih treh govoril o stvareh. Druga dva pa homomorphic šifriranje in Google val [ 1. ]. Prihaja nazaj na sedanje delovno mesto - izrazi v naslovu kažejo, kako dobiš vsebino od drugih ljudi. Po podrobnosti postalo bolj jasno, če si predstavljate stvari dogaja v zvezi z blogi, čeprav so konceptualno ni omejena na blogih.
Anketiranje se nanaša na scenariju, kjer stranke hranijo sprašuje, strežnik, če je kaj novega, pridi gor. Kako pogosto zaprositi za posodobitev bo vedno problem z volišč preveč pogosti ali preveč redko, ampak kot 1 bralec opozoril sem , da je ena super, stvar z volišč je, da strežnik ni nujno, da vzdržuje stanje.
Ping se nanaša na primer, ko, ko post članek, vi (ali vaša programska oprema), prav tako posodablja nekatere popularne (centralne) posodobitev storitev. Nekateri ozadje tukaj .
Naslednja je pubsub ki stoji za objavo / naročiti, eno igrišče za prvi je bil narejen tukaj z Evan Henshaw-Plath in Kellan Elliott-McCrea (72 slides, ampak vredno iti skozi). Nujni primer, da je proti je bilo to - na določen datum, FriendFeed plazil Flickr 2,9 milijona krat, da bi dobili najnovejše fotografije 45,754 uporabnikov, od tega je 6721 obiskal Flickr v teh 24 ur in bi lahko "potencialno" dodal fotografijo. Upoštevajte, da tisto, kar so predlagali ni nova tehnologija, saj poudarjajo out 'revolucionarno novo 20 let staro tehnologijo ". Če si to naredil za bloge kot eno od glavnih težav z XMPP - lahko prisotnost podatkov, plini, ki je lahko tako visoka kot 60-70% zmanjšajo veliko.
pubsubhub pomeni objaviti Naročni vozlišče in pubsubhubbub je protokol, jedro, ki je ideja pubsubhub. Čemer založniki (recimo Bloggers) posodobiti vozlišče, ki (lahko je več kot vozlišča, ki govorijo drug z drugim) prebiva "nekje v oblak", v skladu s protokolom, lahko to potiskanje ali vlečenje kot na protokol pa je naslednji člen v verige, vozlišč do naročnika (recimo bralcev) je vedno potisnite model. Ta stran je dobro izhodišče za pubsubhubbub, pregled diapozitivi so dobri. Kdaj zgovoren Anil Dash ga opisuje tukaj kot Pushbutton spletu.
Dva druge s tem povezane bralcev so webhooks , ki je v osnovi http callbacks. Github uporablja jo, tako da ne paypal za asinhroni obvestil o plačilu v IPN . Torej, to še mnogi drugi. Sorodni koncept rsscloud ki je spet pubsub središče. Sledite to povezavo za podrobnosti.
Morda se sprašujete, kaj je smisel vsega tega pisanja tu, obstajata dve 1. Te stvari je vredno vedeti, vsaj minimalno in 2. Ta blog je pubsubhubbub omogočeno zdaj preko vozlišča appspot uporabo tega WordPress plugin in krmo, preveč je pubsubhubbub omogočeno preko feedburner in povezavo tukaj
-
[ 1 ]. - Dobro uvodno branje za popolnoma homomorphic šifriranje je ta članek Bruce Schneier in ta pogovor je bolj ali manj edini vir za Google Wave.
-UPDATE - To sporočilo pojasnjuje, kako se lahko zahteva javni strežnik za povratni klic delal približno za namizne stranke z uporabo XMPP prehod (za pubsubhubbub).
Malo montažo
Po branju tega članka o prostih rezerv za zaklepanje in videnje uporabe CAS (primerjati in swap), sem se počutil kot objavo montažo kodo, da storijo enako. Uporabite primer več kot je bilo, da bi napisal izvirni način in jo pokličite s Java (nazaj na 1,5, ko so bili sočasno podatkovne strukture v Javi več ali manj ni). Brez odlašanja, se bom sprostil kodo na vas
. Prvi je na CAS in drugo, je za računalniške GCD pomočjo Evklidovega algoritma (ta je mogoče najti v številnih krajih in vajah, pa tudi).
Pripravijo in vodijo navodila gcc file_name.c ; ./a.out
Primerjati in Swap
# Include# Include / / Izmenjave - newvalue, comperand je star / pričakovana vrednost / * * Funkcija v resnici počne to stvar - če je vrednost v * destilirano vodo, je enako potem oldvalue jo nadomestiti s newvalue pa pustimo nespremenjena: vse to ne atomically * * Na voljo sta dve možnosti za vrnitev vrednosti * 1.is začetno vrednost * Podrobnosti destilirano vodo in pustite breme kliče fxn, da ga primerjajo z oldval * 2. to storite tukaj in se vrnil 0 ali 1, bi to moralo biti bolj učinkovito ** / / * Kasneje spremenite v makro * / 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 rezultat = 1 ;/ * 1 kaže, da je cas uspelo in 0 kaže, da ni * / / * Btw morali nastaviti cc za zastava clobbering! * / __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" bi / * LOCK biti v isti vrstici * / "JZ poteka \ n \ t" "Movl $ 0,% 1 \ n \ t" "Sestavljeno: \ n \ t" : "= M" (dest), "= g '(rezultat) : "G" (oldvalue), "g" (newvalue), "M" (dest) : "% EAX", "% ebx", "ECx", "cc" ); printf ("(% d,% d,% d)", * dest, oldvalue, newvalue); vrne rezultat; } / * TODO * Napisati še eno ASM fxn ki postavlja nad fxn v nekaj časa zanke in poskušati, če ne uspe * / 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, a)); printf ("% d \ n", cas (c,,)); printf ("% d \ n", cas (c, b, b)); * C = 6; / * C = 5; * / printf ("spreminja vrednost * c na% d \ n", * c); printf ("% d \ n", cas (c, b, b)); printf ("% d \ n", cas (c, b, a)); printf ("% d \ n", cas (c,,)); printf ("% d \ n", cas (c, a, b)); printf ("% d \ n", cas (c, b, a)); return 0; }
Oblikovanje ugotavlja - se zdi, kot wp sintakso označevalnik je dodal na koncu, da ne upoštevajo.
GCD
# Includeint gcd (int a, int b) { int rezultat; / * Compute Največji skupni delitelj pomočjo Evklidovega algoritma * / __asm__ __ volatile__ ("movl% 1,%% EAX;" "Movl% 2,%% ebx;" "Nadalj.: cmpl $ 0,%% ebx;" "JE SESTAVLJENO;" "Xorl%% EDX, EDX%%;" "Idivl%% ebx;" "Movl%% ebx,%% EAX;" "Movl%% EDX,%% ebx;" "JMP nadalj.;" "Sestavljeno: movl%% EAX,% 0;": "= g '(rezultat):" g "(a)," g "(b) ); vrne rezultat; } int main () { int prvi, drugi; printf ("Vnesite dve celi števili:"); scanf ("% d% d", & prvi, in drugo); printf ("GCD od% d &% d je% d \ n", prva, druga, gcd (prvi, drugi)); return 0; }
ruby 1 podlage za oblikovanje hash
Včeraj, ko je šel skozi enega od mojih starih programov, sem našel to napisal me kdaj nazaj:
#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
Da bi ubil nekaj napetosti naj razkrije, da raw_text izgleda
, Desno je bilo izrezano iz paypal potrditvi plačila.
Nad črto, če razdeljene v dele bere bolje:
unescaped_array = CGI.unescape (raw_text). split ("&") unescaped_array = unescaped_array.collect {| x | b = x.split ("="); b.push (nič), če b.size == 1, b} flattened_array = unescaped_array.flatten hash = Hash [* flattened_array]
Naredimo posamezne korake v pristopu IRB:
IRB (glavni). 009:0> unescaped_array = CGI.unescape (raw_text) split ("&") => ["Uspeh", "mc_gross = 10,00", "protection_eligibility = Neupravičeni", "payer_id = U7PPJJ4TSJ47E", "taksa = 0,00", "payment_date = 09:45:30 10 julij 2009 PDT", "= Do payment_status "] IRB (glavna): 013:0> unescaped_array = unescaped_array.map {| x | b = x.split ("="); b.push (nič), če b.size == 1, b} => [["Uspeh", nič], ["mc_gross", "10,00"] ["protection_eligibility", "Neupravičeni"] ["payer_id", "U7PPJJ4TSJ47E"] ["davek", "0,00"] ["payment_date", "09:45:30 10. julij 2009 PDT"] ["payment_status", "Do"]] IRB (glavna): 014:0> flattened_array = unescaped_array.flatten => ["Uspeh," je nič, "mc_gross", "10,00", "protection_eligibility", "Neupravičeni", "payer_id", "U7PPJJ4TSJ47E", "davek", "0,00", "payment_date", "09:45: 30 10. julij 2009 PDT "," payment_status "," Do "] IRB (glavna): 015:0> hash = Hash [* flattened_array] => {"Davek" => "0,00", "payment_status" => "Do", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10,00", "SUCCESS" => nič, "payment_date" = > "09:45:30 10 julij 2009 PDT", "protection_eligibility" => "Neupravičeni"}
BTW, se imenuje * Hlajenje operater v Ruby
Drug način za ustvarjanje hašiš iz 'paleto parov' je uporaba injicirati:
hash = [[1,2], [3,4]] injekcijo ({}). {| rezultat, element | Rezultat [element.first] = rezultat [element.last]; rezultat} Obstaja še en način
Napiši zanko, da bom zapustiti kot uresničevanje z bralci!
Tukaj je nekoliko povezano primerov uporabe za ustvarjanje haše od polja:
IRB (glavna): 005:0> [1,2,3,4,7,9] group_by {| x | x <5.? : Manj :: večja} => {: Manj => [1, 2, 3, 4]: več => [7, 9]}
To lahko storite več stvari, v bistvu je rezultat bloka uporablja kot ključ za ta element, ki izhaja hash.
gmail, Mutt in msmtp fix
Če uporabljate Mutt in SMTP za dostop do Gmaila. Tukaj je (slaba) novica. Kul fantje na Googlu spet spremenila potrdilo. Oh, pa si vprašal - kako pa to veš? Enostavno Mutt začel pritožujejo nad slabo spričevalo, ko poskuša uporabiti msmpt, ki zloglasni "msmtp: TLS certifikata preverjanje ni uspelo. Potrdila ni dobil znano izdajatelju" me je pozdravil na zaslonu.
Prestopiti potrditi -
Samo teči po
$ msmtp --serverinfo --host=smtp.gmail.com --tls=on --port=587 --tls-certcheck=off
Namesto starega strežnika Thwate zdaj dobiš po v segmentu izdajatelja
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US
Na srečo je popravek preprost, tukaj je tisto, kar morate storiti na Debian
# apt-get install ca-certificates
# dpkg -s ca-certificates|grep Version
Version: 20090814
Po tem samo spremeniti vrstico v ste ~ i /. 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
s
tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt
Združujejo v zgoščeni vsebini yaml datotek conf
YAML je zelo priročen za pisanje nastavitvene datoteke. Osnovna prednost je, da je se bere kot besedilno datoteko. Ta deluje zelo dobro, če je vaš config datoteka stanovanje (brez hierarhije) in nima ponovitev.
Če je vaš konfiguracije datoteka ponovitev potem je smiselno izločiti tiste elemente in jih ponovno. Kaj hočem reči je to - recimo, da ste napisali konfiguracijsko datoteko izgleda takole:
razvoj: input_location: common_input output_location: dev_location mail: smtp_server: your_server Prijava: your_login geslo: top_secret produkcija: input_location: common_input output_location: dev_location mail: smtp_server: your_server Prijava: your_login geslo: top_secret
Ob predpostavki, zgornjo kodo v / tmp / test.yml tukaj je, kako si lahko preberete v jezikih Python in Ruby
$cat readyml.py
#! / Usr / bin / env python pprint od uvoza pprint kot ot # V Debian morali namestiti python-yaml od yaml uvoz obremenitve, load_all, smetišče hash = obremenitev (odprto ('/ tmp / test.yml')) odstotne točke (hash ["razvoj"])
$ cat readyml.rb
#! / Usr / bin / env ruby zahtevajo želiš PP ' hash = YAML :: obremenitev (File.open ('/ tmp / test.yml). branje) pp hash ['razvoj']
Tu je priročna podloga za različico 1 ruby
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' ali lahko poskusite enako v IRB ali python konzolo.
Upoštevajte, da v zgornji del kode, je vse drugo kot je izhodna lega enako na področju razvoja in proizvodnje delom. To je, če yml vozlišče identifikator gre za reševanje. Ideja je preprosta imajo vrsto privzete vrednosti in jih preglasijo na drugem mestu.
Lahko bi ga potegnite narazen, kot sledi:
zamude: & Privzeta input_location: common_input output_location: dev_location mail: SENDER_NAME: pošiljatelj smtp_server: your_server Prijava: your_login geslo: top_secret razvoj: <<: * Podrobnosti privzeto produkcija: <<: * Podrobnosti privzeto output_location: prod_location
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Super, da deluje (tm)!.
Verjetno smo se z njimi trguje nekaj jasnost za malo čarovnijo. Tukaj je majhen razlaga: &, * in <<: in ki je sidro tag lahko razumemo kot vozlišča identifikator, * je vozlišče sklic in <<: pomeni razpršitve dokumentov.
Za več podrobnosti glej bodisi yaml očala ali Izbrani članek
Do sedaj tako dobro, vendar je ulov tukaj, ti zgostitvene združuje so brez rekurzije. Kaj to pomeni je to: recimo, da želite imeti drugačno ime pošiljatelja na pošti v dveh okoljih, vas bo morda zamikalo, da naredite naslednje:
zamude: & Privzeta input_location: common_input output_location: dev_location mail: SENDER_NAME: pošiljatelj smtp_server: your_server Prijava: your_login geslo: top_secret razvoj: <<: * Podrobnosti privzeto mail: SENDER_NAME: sender_dev produkcija: <<: * Podrobnosti privzeto output_location: prod_location mail: SENDER_NAME: sender_prod
Omogoča pregled
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
nil
$
Ups, kaj je šlo narobe, problem, kot je navedeno zgoraj, je, da hash spajanje ni rekurzivna in hkrati združitev je zamenjala naslov neplačila po pošti proizvodnje, ki ima samo eno tipko. Rešitev / delo okoli je Dogaja še eno stopnjo:
common_settings: & common_settings input_location: common_input output_location: dev_location mail_defaults: & mail_defaults SENDER_NAME: pošiljatelj smtp_server: your_server Prijava: your_login geslo: top_secret zamude: & Privzeta <<: * Podrobnosti common_settings mail: <<: * Podrobnosti mail_defaults razvoj: <<: * Podrobnosti privzeto produkcija: <<: * Podrobnosti privzeto mail: <<: * Podrobnosti mail_defaults SENDER_NAME: sender_prod
Omogoča preverjanje še enkrat
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Ali ste, da imate še eno raven gnezdenja, pa lahko zagotovo Dogaja še eno raven, potem pa postane nered. Torej, če se ne poskuša pisati rešitev stolpi Hanoju v conf datoteke, je bolje, da restucture conf datoteko kot kopanje v yaml ali kaj drugega. Ampak to je vaš klic vseeno.
Malo preusmeritve lupine
Tukaj je, kako smo normalno delati lupine preusmeritev
$ ./pgm.sh args >out.txt 2>err.txt
Hotel sem spremeniti to malo in vodijo naslednje
$ ./pgm.sh args
z zahtevo, da mora proizvodnja in napake iti do neke datoteke izračunano v notranjosti pgm.sh na podlagi argumenta. Ena nazoren primer, ko bi lahko datum je del argumenta. Torej bi radi stdout iti reči / vaše / imenik / pgm_out_YYYYMMDD.txt 1
Problem s standardno način preusmerjanje N>file.txt kar pomeni, združuje datoteke deskriptorjev N do datoteka.txt, je, da deluje samo za novo viličasti proces in ne za tekoče procesa.
tako
$ echo hi 1>out.txt ; echo hii . bo poslal na hi out.txt temveč bo izpisal hii v stdout 2
To je, če exec gre za našo pomoč. Če dodamo exec 1>somefile.txt potem izhod iz preostalega scenarij pojdite na somefile.txt
$. / Bo test.sh preusmeriti hi, pa tudi, da hii out.txt
$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
Podobno kot preusmerite stdout ter stderr bomo narediti kaj takega
cat test2.sh
exec 1>out.txt
exec 2>err.txt
echo out text
echo 1>&2 err text
somenoneexitent command
ls -ld /tmp
Zdaj prihajajo nazaj na prvotno točko preusmerjanje do neke datoteke iz notranjosti lupine, recimo Program izračuna ime datoteke v nekaterih spremenljivo izhodna_datoteka, bi lahko storili le exec 1>$OUTFILE
, Ki rešuje trenutni problem. Toda lahko vam je všeč, da gredo skozi naslednji primer, ki dosega "z vzorčenjem dostop 'v datoteko v lupinski skript. Primer je od tu
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
S pripombami, ta koda je samoumevne.
-
1 , lahko je tudi treba storiti z $ ./pgm.sh args >pgm_out`date +%Y%m%d` , ampak ideja je, da ustvari to ime datoteke na osnovi neke logike v sam program.
2 1 na 1> out.txt je odveč, vendar je tu pojasnjuje, da so preusmerjanje FD 1
V merilu ali v merilu
Ko govorimo o horizontalni delitvi baz podatkov, DHH od ROR slave kažejo, da lahko luščenje stvari počakati, vsekakor počakati do točke vaše poslovne potrebe to zahtevajo. Njegov članek zagotovo smiselno za majhne reči postavitve novih podjetij. Ne pomeni, da v ustanavljanjem morate pisati demo programe, vendar ob upoštevanju, da je le 24 ur na dan, ko je treba osredotočiti na služijo pravijo 1000 uporabnikov v več kot izpolnjuje način izgublja svoj spanec več skrbi, kako bo moja vloga ročaj obremenitev 13.142 milijonov uporabniki. Če dobite te veliko uporabnikov, boste vedeli, kako razmerij. Za ustanavljanjem razširljivost je dober problem rešiti, ampak veliko bolje, da imajo problem, mislim vsak zagon bi radi zašli v ta problem!
V druge povezane članku piše Jeremy Zawodny ne bi smelo biti odvisno od gospoda Moore, če imate težave nadgradljivosti.
Ker ti členi nanašajo na Moorov zakon se ne morem pomagati, ampak napisati, da je Moorov zakon je eden od najbolj splošnega prava v računalništvo. Od svoje prvotne napovedi o gostoti tranzistor, ta zakon sedaj praksa povsod naletite na eksponentno rast.



































