kyselyn, ping, pubsub, pubsubhub, pubsubhubbub

06 syyskuu 2009 by Prashant · Comments
Filed under: tekniikka

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

29 elokuu 2009 by Prashant · Comments
Filed under: tekniikka

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

 # Include 
 int 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

20 elokuu 2009 by Prashant · Comments
Filed under: tekniikka

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

17 elokuu 2009 by Prashant · Comments
Filed under: tekniikka

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

31 heinäkuu 2009 by Prashant · Comments
Filed under: tekniikka

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

10 toukokuu 2009 by Prashant · Comments
Filed under: tekniikka

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

$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
$. / Test.sh ohjaa hi sekä hii ja out.txt

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

11 tammikuu 2009 by Prashant · Comments
Filed under: tekniikka

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.