kyselyn, ping, pubsub, pubsubhub, pubsubhubbub
Jos olet skeptinen, on menetelmä hulluus edellä, otsikossa postitse. Vuonna tech piireissä on epätodennäköistä, että et ole kuullut pubsubhubbub. Nopeasti muutaman kuukauden, se on ollut yksi kolmesta puhui asiaa. Kaksi muuta homomorphic salaus ja Google aalto [ 1. ]. Palatakseni nykyiseen tehtäväänsä - termit otsikossa kertoa, miten saat sisältöä muilta ihmisiltä. Seuraavat tiedot tulee selvemmäksi, jos voit kuvitella mitä tapahtuu suhteessa blogeja, vaikka ne eivät ole käsitteellisesti rajoitu blogeja.
Polling viittaa skenaarioon, jossa asiakkaat Kyselen palvelimeen, jos jotain uutta on keksittävä. Kuinka usein pyytää päivityksiä aina ongelma äänestyspaikalla liian usein tai liian harvoin, mutta kuten eräs lukija huomautti tähän , että yksi suuri, juttu äänestyspaikoilla on, että palvelin ei tarvitse ylläpitää tilaan.
Ping tarkoittaa silloin, kun kirjoittaa artikkeli, sinä (tai ohjelmisto) päivittää myös suosittuja (keskus) Update Services. Jotkut tausta täältä .
Seuraavaksi on pubsub joka kannattaa julkaista / tilata, yksi varhaisimmista piki se tehtiin täällä Evan Henshaw-Plath ja Kellan Elliott-McCrea (72 dioja mutta kannattaa mennä läpi). Vakuuttava esimerkki he antoivat vastaan oli tämä - tiettynä päivänä, FriendFeed ryömi Flickr 2,9 miljoonaa kertaa saada uusimmat kuvia 45754 käyttäjää, joista 6721 oli käynyt Flickr näissä 24 h ja olisi voinut "mahdollisesti" ladattu kuva. Huomaa, että he ehdotti ei ollut uutta teknologiaa, koska he huomauttavat "vallankumouksellinen uusi 20 vuotiaan tekniikalla. Jos teet sen blogeja silloin yksi suurimmista ongelmista xmpp - läsnäolo datarakenteen, joka voi olla jopa 60-70% voidaan vähentää paljon.
pubsubhub sanoista julkaista Tilaa napa ja pubsubhubbub on protokolla, ytimenä on ajatus pubsubhub. Missä julkaisijat (eli bloggaajien) päivittää napa joka (saattaa olla useampia keskuksia, jotka puhuvat keskenään) sijaitsee "jossain pilvessä", koska per protocol tämä voidaan työntää tai vetää kohti protokollan mutta seuraava lenkki ketju, napa asiakkaan (sanoa lukijoille) on aina työntää mallia. Tämä sivu on hyvä lähtökohta pubsubhubbub, yleiskatsaus kalvot ovat hyviä. Koskaan lennokas Anil Dash kuvaa sitä täällä kuin painike web.
Kaksi muuta liittyvät luettu ovat webhooks joka on pohjimmiltaan http kutsuja. Github käyttää sitä, niin ei paypal tahdistamattoman ilmoituksia maksun IPN . Niin tekevät monet muutkin. Related konsepti rsscloud mikä taas pubsub napa. Seuraa tätä linkkiä.
Saatat ihmetellä, mitä järkeä on kirjoittaa kaikki nämä täällä on kaksi 1. Nämä asiat on hyvä tietää, vähän ainakin ja 2. Tämä blogi on pubsubhubbub käyttöön nyt kautta appspot keskittimeen käyttämällä tätä wordpress plugin ja ruokinnasta on pubsubhubbub portin kautta FeedBurner, linkki täällä
-
[ +1 ]. - Hyvä johdanto lukea täysin homomorphic salaus on tämä artikkelin Bruce Schneier, ja tämä puhe on enemmän tai vähemmän ainoa Google aalto.
-UPDATE - Tämä viesti kertoo, kuinka vaatimus julkisen palvelimen soittopyyntö voidaan kiertää pöytäkoneiden asiakkaille käyttäen xmpp gateway (for pubsubhubbub).
Hieman kokoonpano
Kun olet lukenut tämän artikkelin lukko vapaita puskureita ja nähdä käyttöön CAS (vertaa ja vaihtaa), tunsin itseni lähettämistä assembly tekemään samoin. Käytä tapauksessa tuolla oli kirjoittaa natiivi menetelmä ja kutsuvat sitä Java (takaisin 1,5, kun samanaikaisesti tietorakenteita Java olivat enemmän tai vähemmän olematon). Pitemmittä puheitta, minä valloilleen koodia sinuun
. Ensimmäinen on CAS ja toinen on tietotekniikan GCD käyttää Eukleideen algoritmi (tämä löytyy monin paikoin ja tutorials samoin).
Käännä ja suorita ohjeet gcc file_name.c ; ./a.out
Vertaa ja Swap
# Include# Include / / Vaihto - newvalue, comperand on vanha / odotusarvo / * * Toiminto itse asiassa tekee seuraavat asia - jos arvo * dest on sama oldvalue sitten korvata newvalue muuten jätä se ennallaan: eivät kaikki nämä atomisesti * * On kaksi vaihtoehtoa paluuarvon * 1.is alkuarvo * dest ja jättää taakan kutsuvan fxn verrata sitä oldval * 2. tekevät sen tänne ja palauttaa 0 tai 1, tämä olisi tehokkaampaa ** / / * Myöhemmin vaihtaa sen 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 tulos = 1 ;/ * 1 osoittaa, että CAS onnistunut ja 0 osoittaa, että se epäonnistui * / / * Btw tarvitse asettaa CC lippu 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" / * pitäisi lukita olla samalla rivillä * / "JZ DONE \ n \ t" "Movl 0 dollaria,% 1 \ n \ t" "DONE: \ n \ t" : "= M" (dest), "= g" (tulos) : "G" (oldvalue), "g" (newvalue), "m" (dest) : "% EAX", "% EBX", "ECx", "CC" ); printf ("(% d,% d,% d)", * DEST, oldvalue, newvalue); palata tulos; } / * TODO * Kirjoittaa toisen asm fxn joka asettaa edellä fxn ja while-silmukka ja pitää yrittää jos se onnistuu * / 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 ("muuttaminen arvo * 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)); return 0; }
Muotoilu toteaa - näyttää wp syntaksin korostus on lisätä lopulta sivuuttaa sitä.
GCD
# Includeint syt (int, int b) { int tulos; / * Lasketaan Suurin yhteinen tekijä käyttää Eukleideen algoritmi * / __asm__ __ volatile__ ("movl% 1,%% EAX;" "Movl% 2,%% EBX;" "CONTD: CMPL 0 dollaria,%% EBX;" "Je tehty;" "Xorl%% EDX,%% EDX;" "Idivl%% EBX;" "Movl%% EBX,%% EAX;" "Movl%% EDX,%% EBX;" "JMP CONTD;" "DONE: movl%% EAX,% 0," "= g" (tulos): "g" (), "g" (b) ); palata tulos; } int main () { int ensimmäinen, toinen; printf ("Anna kaksi kokonaislukua:"); scanf ("% d% d", ja ensimmäinen, ja toinen); printf ("GCD% d-% d ovat% d \ n", ensimmäinen, toinen, syt (ensimmäinen, toinen)); return 0; }
ruby yksi vuorausta luoda hash
Eilen taas läpi yhtä vanhoista ohjelmista, löysin tämän kirjoittanut minulle joskus takaisin:
#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
Tappaa joitakin suspense haluan paljastaa, että raw_text näyttää
, Oikea se on leikattu paypal maksun kuittaus.
Ennen linja rikkoutuessaan osissa lukee paremmin:
unescaped_array = CGI.unescape (raw_text). split ('&') unescaped_array = unescaped_array.collect {| x | b = x.split ("="); b.push (nolla) jos b.size == 1, b} flattened_array = unescaped_array.flatten hash = Hash [* flattened_array]
Tehdään yksittäisiä askeleita IRB:
IRB (tärkein): 009:0> unescaped_array = CGI.unescape (raw_text). split ('&') => ["SUCCESS", "mc_gross = 10,00", "protection_eligibility = tukikelpoinen", "payer_id = U7PPJJ4TSJ47E", "vero = 0.00", "payment_date = 09:45:30 10 heinäkuu 2009 PDT", "payment_status = Odottaa "] IRB (tärkein): 013:0> unescaped_array = unescaped_array.map {| x | b = x.split ("="); b.push (nolla) jos b.size == 1, b} => [["SUCCESS", nil], ["mc_gross", "10,00"], ["protection_eligibility", "tukikelpoinen"], ["payer_id", "U7PPJJ4TSJ47E"], ["vero", "0.00"] ["payment_date", "09:45:30 10 heinäkuu 2009 PDT"], ["payment_status", "Odottaa"]] IRB (tärkein): 014:0> flattened_array = unescaped_array.flatten => ["Menestys" nolla "mc_gross", "10,00", "protection_eligibility", "Tukikelvottomat", "payer_id", "U7PPJJ4TSJ47E", "vero", "0,00", "payment_date", "9:45: 30 10 heinäkuu 2009 PDT "," payment_status "," Odottaa "] IRB (tärkein): 015:0> hash = Hash [* flattened_array] => {"Vero" => "0.00", "payment_status" => "Odottaa", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10,00", "menestys" => nil "payment_date" = > "09:45:30 10 heinäkuu 2009 PDT", "protection_eligibility" => "tukikelpoinen"}
BTW, * kutsutaan läiske operaattori ruby
Toinen tapa luoda hash osoitteesta "joukko pareja" on käyttää pistät:
hash = [[1,2], [3,4]]. pistää ({}) {| tulos, elementti | tulos [element.first] = tulos [element.last]; tulos} On vielä yksi tapa
Kirjoita silmukka, joka Jätän harjoitustehtäväksi lukijat!
Täällä on vähän liity käyttötapaus luoda hash mistä taulukot:
IRB (tärkein): 005:0> [1,2,3,4,7,9]. group_by {| x | x <5? : Vähemmän :: suurempi} => {: Vähemmässä => [1, 2, 3, 4]: suurempi => [7, 9]}
Voit tehdä enemmän asioita, pohjimmiltaan johtuu lohkon käytetään avain että osa tuloksena hash.
gmail, mutt ja msmtp korjaus
Jos käytät mutt ja SMTP käyttää Gmailia. Tässä on (huono) uutinen. Cool guys at Google jälleen muuttunut todistus. Ai, sinä pyysit - miten se tiedä? Yksinkertainen mutt alkoi valittaa huonoa todistusta, kun yritän käyttää msmpt, pahamaineisen "msmtp: TLS varmenteen todentaminen epäonnistui: todistusta ei ole saanut tunnettu liikkeeseenlaskija." tervehti minua ruudulla.
Rajat vahvistaa -
Juokse jälkeen
$ msmtp --serverinfo --host=smtp.gmail.com --tls=on --port=587 --tls-certcheck=off
Sen sijaan vanhojen Thwate Server nyt saat seuraaminen liikkeeseenlaskijan segmentissä
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US
Onneksi korjaus on yksinkertainen, täällä on mitä sinun tarvitsee tehdä on debian
# apt-get install ca-certificates
# dpkg -s ca-certificates|grep Version
Version: 20090814
Tämän jälkeen vain muuttaa seuraavan rivin sinä ~~~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
ja
tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt
Yhdistäminen tiivisteiden ja yaml conf tiedostojen
YAML on varsin kätevä kirjoittaa asetustiedostoja. Ensisijainen etu on, että se lukee kuin tekstitiedosto. Tämä toimii todella hyvin, jos config tiedosto on tasainen (ei hierarkia) eikä toistoja.
Jos kokoonpanoissa tiedosto on toistoa on järkevää erottaa näitä tekijöitä ja käyttää niitä uudelleen. Tarkoitan siis tämän - sanokaamme sinulle config tiedosto näyttää tältä:
kehitys: input_location: common_input output_location: dev_location mail: smtp_server: oma_palvelimesi login: your_login Salasana: top_secret tuotantoon: input_location: common_input output_location: dev_location mail: smtp_server: oma_palvelimesi login: your_login Salasana: top_secret
Olettaen yli koodi in / tmp / test.yml tässä miten voit lukea Python ja Ruby
$cat readyml.py
#! / Usr / bin / env python mistä pprint tuonti pprint kuin yks # Debianin pitää asentaa python-yaml mistä yaml tuonti kuormitus load_all, dump hash = kuormitus (open ("/ tmp / test.yml ')) pp (hash ['kehitys'])
$ cat readyml.rb
#! / Usr / bin / env ruby vaativat "pp" hash = YAML :: kuormitus (File.open ('/ tmp / test.yml "). luettu) pp hash ["kehitys"]
Tässä on kätevä yhdelle putkelle Ruby version
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' tai voit kokeilla samaa sisäisten luottoluokitusten menetelmän tai python konsolin.
Huomaa, että edellä koodinpätkä, kaikki on muu kuin lähtö paikka on sama kehityksen ja tuotannon osa. Täällä yml solmu tunniste tulee pelastamaan. Idea on yksinkertainen on joukko oletusarvot ja ohittaa ne eri paikkaan.
Voisit vetää sen lisäksi seuraavasti:
defaults: & oletusarvot input_location: common_input output_location: dev_location mail: SENDER_NAME: lähettäjä smtp_server: oma_palvelimesi login: your_login Salasana: top_secret kehitys: <<: * Oletusarvot tuotantoon: <<: * Oletusarvot output_location: prod_location
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Hienoa, se toimii (tm)!.
Todennäköisesti me vaihdettiin joitakin selvyyttä vähän taikuutta. Tässä pieni selitys: &, * ja <<: ja joka on ankkuri tag voidaan ymmärtää solmun tunniste, * on solmu viite ja <<: tarkoittaa hash yhdistämisessä.
Lisätietoja löytyy joko yaml silmälasit tai wikipedia
Hyvä niin, mutta siellä on saalis täällä, nämä hash yhdistämisiä ei ole rekursiivinen. Mitä se tarkoittaa on tämä: Oletetaan, että haluat olla erilaisia lähettäjän nimen postin kahdessa ympäristössä, saatat joutua kiusaukseen tehdä seuraavaa:
defaults: & oletusarvot input_location: common_input output_location: dev_location mail: SENDER_NAME: lähettäjä smtp_server: oma_palvelimesi login: your_login Salasana: top_secret kehitys: <<: * Oletusarvot mail: SENDER_NAME: sender_dev tuotantoon: <<: * Oletusarvot output_location: prod_location mail: SENDER_NAME: sender_prod
Katsotaan
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
nil
$
Oho, jokin meni pieleen, ongelma kuin edellä on mainittu, että hash yhdistäminen ei ole rekursiivinen, ja kun yhdistetään se korvattiin mail laiminlyö postia tuotantoa, joka on vain yksi avain. Ratkaisu / työ ympärillä on kääriä rullalle yksi taso:
common_settings: & common_settings input_location: common_input output_location: dev_location mail_defaults: & mail_defaults SENDER_NAME: lähettäjä smtp_server: oma_palvelimesi login: your_login Salasana: top_secret defaults: & oletusarvot <<: * Common_settings mail: <<: * Mail_defaults kehitys: <<: * Oletusarvot tuotantoon: <<: * Oletusarvot mail: <<: * Mail_defaults SENDER_NAME: sender_prod
Katsotaan uudestaan
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Sanoitko sinulla on yksi sisältymistaso, hyvin voit varmasti levittää yksi taso, mutta silloin siitä tulee sotkua. Joten, jos et yritä kirjoittaa ratkaisua Hanoin tornit on conf tiedostoon, on parempi restucture conf tiedostoon kuin kaivaa yaml tai jotain muuta. Mutta se on teidän puhelu muutenkin.
Hieman kuoren uudelleenohjaus
Tässä on, miten yleensä tee kuori uudelleenohjaus
$ ./pgm.sh args >out.txt 2>err.txt
Halusin muokata sitä hieman ja ajaa seuraava
$ ./pgm.sh args
vaatimusta, ettei tuotantoon ja virhe olisi mennä jonkin tiedoston laskettu sisälle pgm.sh perustuu args. Yksi valaiseva tapaus voisi olla, kun päivä on osa args. Joten haluaisit stdout mennä sanoa / oma / hakemisto / pgm_out_YYYYMMDD.txt 1
Ongelma tavallinen suunnata N>file.txt eli yhdistämällä tiedosto avainsana N tiedosto.txt, että se toimii vain uusien haarainen prosessia eikä nykyinen prosessi.
niin
$ echo hi 1>out.txt ; echo hii lähettää terveisiä out.txt mutta tulostaa hii vakiotulosteeseen. 2
Tässä on exec tulee meidän pelastus. Jos lisäämme exec 1>somefile.txt tulostetaan sitten muusta kirjoitus menee somefile.txt
$. / Test.sh ohjaa hi sekä hii ja out.txt
$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
Samoin voidaan ohjata stdout ja stderr teemme jotain tällaista
cat test2.sh
exec 1>out.txt
exec 2>err.txt
echo out text
echo 1>&2 err text
somenoneexitent command
ls -ld /tmp
Nyt tulossa takaisin alkuperäiseen kohtaan suunnata jossain tiedoston sisällä kuoren, sanotaan ohjelmassa lasketaan tiedostonimen joissakin muuttujan OUTFILE, olisimme voineet vain tehdä exec 1>$OUTFILE
Se ratkaisee nykyisen ongelman. Mutta ehkä haluat käydä läpi seuraava esimerkki, jolla saavutetaan "random access" tiedoston kuorelliset script. Esimerkki on kotoisin täältä
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
Selityksiä, koodi ei ole itsestään selvä.
-
1 Se voi myös tehdä $ ./pgm.sh args >pgm_out`date +%Y%m%d` , mutta idea on luoda tiedoston nimen perusteella logiikkansa itse ohjelmaan.
2 1 1> out.txt on turha, mutta se selventää, että me suuntaavat fd 1
Mittakaavassa tai ei mittakaavassa
Vaikka puhutaan vaaka jakaminen tietokantojen DHH ja ROR fame viittaa siihen, että skaalaus tavaraa voi odottaa, varmasti odota pisteen yrityksesi tarpeet vaativat sitä. Hänen artikkeli ehdottomasti järkevää pienten asennuksissa sanoa startups. Ei sanoa, että startup sinun pitäisi kirjoittaa demo ohjelmia, mutta koska on vain 24 tuntia päivässä sinun pitäisi keskittyä palvelemaan sanoa 1000 käyttäjille enemmän täyttää tavalla kuin menettää nukkua yli murehtia miten minun hakemuksen käsittelee kuorma 13142000 käyttäjille. Jos saat ne monet käyttäjät tiedät miten mittakaavassa. Sillä startup skaalautuvuus on hyvä ongelmia ratkaista, mutta paljon parempi ongelma on, en tarkoita mitään käynnistyksen haluaisivat törmätä tähän ongelmaan!
Toisessa liittyvä artikkeli Jeremy Zawodny kirjoittaa sinun pitäisi riipu Mr. Moore, jos sinulla on skaalautuvuus ongelmia.
Koska nämä artiklat viittaavat Mooren lain En voi muuta kuin kirjoittaa, että Mooren laki on yksi yleinen laki Computer Science. Hänen alkuperäinen ennuste noin transistorin tiheys, tämä laki on nyt mainittu missään olet törmännyt räjähdysmäistä kasvua.



































