анкета, пинг пубсуб, пубсубхуб, пубсубхуббуб
У случају да сте скептични, постоји метод у лудило изнад, у наслову овог поста. У технолошким круговима мало је вероватно да нисте чули за пубсубхуббуб. У брзим неколико месеци, он је био један од топ три разговарали о стварима. Друга два бића хомоморпхиц шифровање и Гоогле Ваве [ 1.. ]. Враћајући се на тренутну поруку - термини у наслову указују како сте добили садржаје од других људи. Следећи детаљи бити јасније, ако замислите ствари дешава у вези са блоговима, иако су концептуално не ограничава само на блогове.
Анкетирање се односи на сценарију, где клијенти стално постављају нови сервер, ако нешто није искрсло. Колико често се питају да ли постоје исправке ће увек бити проблем са гласања сувише често или сувише ретки, али као један читалац је указао овде да је једна велика, ствар са гласања је да сервер не мора да одржи стање.
Пинг се односи на случај кад су писати чланак, ви (или ваш софтвер) такође ажурира неке популарне (централна) Упдате Сервицес. Неки позадина овде .
Следећа је пубсуб што је скраћеница за објављивање / претплатите, једна од најранијих терену јер је направљен овде је Еван Хенсхав-Платх и Келлан Елиот-МцЦреа (72 слајдова али вреди пролази кроз). Убедљив пример дали су против била ова - одређеног датума, Фриендфеед Флицкр индексирао 2,9 милиона пута да бисте добили најновије фотографије 45,754 корисника, од чега је 6.721 је посетио Флицкр у тим од 24 часова и могли су 'потенцијално' уплоадед а пхото. Имајте на уму да оно што није предложио нове технологије, како истичу, револуционарне нове 20 година стару технологију ". Ако то урадите за блогове Тада један од главних проблема са КСМПП подаци - присуство изнад главе, што може бити као висок као 60-70 одсто може се смањити много.
пубсубхуб скраћеница за објављивање субсцрибе чвориште и пубсубхуббуб је протокол, језгро које је идеја пубсубхуб. Где издавачи (рецимо блогере) ажурирате чвориште које (може бити више од једног чворишта, који разговарају једни с другима) налази 'негде у Облак ", по протоколу ово се може гурнути или повући по протоколу, али следећа карика у ланац, чвориште за клијента (рецимо читаоце) увек је пусх модел. Ова страница је добра полазна тачка за пубсубхуббуб, преглед слајдови су добри. Икада елоквентан Анил цртица га описује овде као тастером Интернету.
Два других сродних цитано су вебхоокс која је у основи хттп повратних позива. Гитхуб користи га, тако се за ПаиПал асинхроних обавештења плаћања у ИПН Тако раде многи други.. Повезано концепт рссцлоуд што је опет пубсуб чвориште. Пратите овај линк за више детаља.
Можда се питате шта је поента писања овде све то, постоје два 1. Ове ствари су вредно знајући, минимално бар и 2. Овај блог је пубсубхуббуб омогућити сада преко аппспот чвориште користећи овај вордпресс плугин и хране за животиње је превише пубсубхуббуб омогућен преко Феедбурнер, линк овде
-
[ 1 ]. - Добро прочитајте уводни за шифровање је потпуно хомоморпхиц овај чланак Бруце Сцхнеиер, а ово је прича мање-више само извор Гоогле таласа.
-Упдате - Ова порука објашњава како се захтев јавног сервера за повратни позив се ради око за десктоп клијената помоћу ИксМПП Гатеваи (за пубсубхуббуб).
Мало окупљање
Након читања овај чланак о коцницом слободних бафера и виде употребу (ЦАС упоредите и свап), осећала сам се као постављањем асемблерског кода да уради исто. Користите случај тамо је била да напишем нативе методу, а зову га из Јаве (назад у 1.5, када упоредне структуре података у Јави су били мање или више не постоје). Без даљег одлагања, ја ћу ослободите код на вас
. Први је за ЦАС и друго је за рачунарство пуњење за ГЦД користећи Еуклидов алгоритам (ово се може наћи у многим местима и кроз менторски рад, као).
Компајлирати и покренути инструкције gcc file_name.c ; ./a.out
Упоредите и Свап
# Инцлуде# Инцлуде / / Размена - неввалуе, цомперанд је стари / очекивана вредност / * * Функција заправо ради следеће ствари - ако вредност од * дестинације једнак онда олдвалуе заменили га неввалуе остало оставите непромењен: да ли све ово атомицалли * * Постоје две опције за повратну вредност * 1.ис почетна вредност од РСД * дестинације и оставити терет позивање фкн да га упореди са олдвал * 2. урадите то овде и вратити 0 или 1, то би требало да буде ефикаснија ** / / * Га касније променили у макро * / Инт ЦАС (инт * дест, инт олдвалуе инт неввалуе) { принтф ("(% д,% д,% д)", * дест, олдвалуе, неввалуе); / * Инт ЦАС (инт дест, инт олдвалуе инт неввалуе) {* / / * Инт ЦАС (инт дест, инт неввалуе инт олдвалуе) {* / инт резултат = 1 ;/ * 1 показује да ЦАС успели и 0 показује да нису успели * / / * Бтв треба да подесите за Цц застава цлобберинг! * / __асм__ __ волатиле__ ( "Мовл% 2,%% еак \ н \ т" "Мовл% 3,%% еак \ н \ т" "Мовл% 0,%% ецк \ н \ т" "Лоцк \ н \ т" "ЦМПКСЦХГ%% ебк, (%% ецк) \ н \ т" / * треба ЛОЦК бити на истој линији * / "Јз ДОНЕ \ н \ т" "Мовл $ 0,% 1 \ н \ т" "Урађено: \ н \ т" : "= М" (дест), "= Г" (резултат) : "Г" (олдвалуе), "Г" (неввалуе), "М" (ДЕСТ) : "% Еак", "% еак", "ецк", "ЦЦ" ); принтф ("(% д,% д,% д)", * дест, олдвалуе, неввалуе); врати резултат; } / * ТОДО * Напише још једну АСМ фкн који ставља изнад фкн у петљи и држати док покушавате уколико не успева * / маин () { инт = 5, б = 6; инт * Ц = (инт *) маллоц (сизеоф (инт)); * Ц = 6; / * Инт = 6; * / принтф ("% д \ н", ЦАС (Ц, Б, б)); принтф ("% д \ н", ЦАС (Ц, Б,)); принтф ("% д \ н", ЦАС (Ц,,)); принтф ("% д \ н", ЦАС (Ц, Б, б)); * Ц = 6; / * Ц = 5; * / принтф ("мења вредност * Ц до% д \ н", ц); принтф ("% д \ н", ЦАС (Ц, Б, б)); принтф ("% д \ н", ЦАС (Ц, Б,)); принтф ("% д \ н", ЦАС (Ц,,)); принтф ("% д \ н", ЦАС (ц, б)); принтф ("% д \ н", ЦАС (Ц, Б,)); ретурн 0; }
Форматирање белешке - изгледа као маркер вп синтаксе додаје на крају, да се игноришу.
ГЦД
# ИнцлудеИнт ГЦД (инт, инт б) { инт резултат; / * Израчунати највећи заједнички делилац користећи Еуклидов алгоритам * / __асм__ __ волатиле__ ("мовл% 1,%% еак;" "Мовл% 2,%% еак;" "ЦОНТД: цмпл $ 0,%% еак;" "Је ДОНЕ;" "Ксорл%% едк,% едк%;" "Идивл%% еак;" "Мовл% еак%,%% еак;" "Мовл%% едк,%% еак;" "ЈМП ЦОНТД;" "Урађено: мовл%% еак,% 0;": "= Г" (резултат): "Г" (), "Г" (Б) ); врати резултат; } маин () { инт први, други; принтф ("Унесите два цела броја:"); сцанф ("% д% д", & година, и друго); принтф ("% д од ГЦД &% д је% д \ н", први, други, нзд (први, други)); ретурн 0; }
рубин један лајнере да створи Хасх
Јуче док пролази кроз један од мојих старих програма, нашао сам ово написао мени негде назад:
#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
Да убију неке од неизвесности дозволите ми да обелодани да рав_тект изгледа
, Зар она је смањена са паипал уплате признања.
Изнад линије ако је сломљен у деловима гласи боље:
унесцапед_арраи = ЦГИ.унесцапе (рав_тект). Сплит ('&') унесцапед_арраи унесцапед_арраи.цоллецт = {| к | = Б к.сплит ("="); б.пусх (нула) ако б.сизе == 1, б} флаттенед_арраи = унесцапед_арраи.флаттен хасх хасх = [* флаттенед_арраи]
Урадимо појединачне кораке у ИРБ:
ИРБ (главни). 009:0> унесцапед_арраи = ЦГИ.унесцапе (рав_тект) Сплит ('&') => ["УСПЕХ", "мц_гросс = 10.00", "протецтион_елигибилити = неподобним", "паиер_ид = У7ППЈЈ4ТСЈ47Е", "порез = 0.00", "паимент_дате = 10 Сеп 2009 09:45:30, ПСТ", "паимент_статус = чекању "] ИРБ (главни): 013:0> унесцапед_арраи унесцапед_арраи.мап = {| к | = Б к.сплит ("="); б.пусх (нула) ако б.сизе == 1, б} => [["УСПЕХ", нула], ["мц_гросс", "10.00"], ["протецтион_елигибилити", "неподобним"], ["паиер_ид", "У7ППЈЈ4ТСЈ47Е"], ["порез", "0.00"] , ["паимент_дате", "10. јул 2009 09:45:30, ПСТ"], ["паимент_статус", "На чекању"]] ИРБ (главни): 014:0> флаттенед_арраи = унесцапед_арраи.флаттен => ["УСПЕХ" нула ", мц_гросс", "10.00", "протецтион_елигибилити", "неподобним", "паиер_ид", "У7ППЈЈ4ТСЈ47Е", "порез", "0.00", "паимент_дате", "09:45: 30 Јун 10, 2009 ПСТ "," паимент_статус "," На чекању "] ИРБ (главни): 015:0> хасх хасх = [* флаттенед_арраи] => {"Порез" => "0.00", "паимент_статус" => "На чекању", "паиер_ид" => "У7ППЈЈ4ТСЈ47Е", "мц_гросс" => "10.00", "успех" => нула, "паимент_дате" = > "Нов 10 09:45:30, ПСТ 2009", "протецтион_елигибилити" => "неподобним"}
БТУ, * се зове Сплат оператер у рубином
Други начин за креирање хасх од 'низа парова' је да користите убризгати:
хасх = [[1,2], [3,4]] убризгати ({}). {| Резултат елемент, | Резултат [елемент.фирст] = резултат [елемент.ласт]; резултат} Постоји још један начин
Написати петљу, да ћу оставити као вежба на читаоце!
Овде је мало везе случај коришћења стварања хасх од низова:
ИРБ (главни): 005:0> [1,2,3,4,7,9] гроуп_би {| к | к <5.? : Мање :: већу} => {: Мање => [1, 2, 3, 4]: већа => [7, 9]}
То можете да урадите више ствари, у основи резултат блока се користи као кључ за тај елеменат у добијеном хашиш.
Гмаил, и Мутт мсмтп поправити
Ако користите Мутт и СМТП приступ Гмаил. Овде је (лоша) вест. Кул момци поново на Гоогле променио сертификат. О, да ли питате - како се то зна? Једноставно Мутт почео жале на лоше потврде када покушавате да користите мсмпт и злогласни наслова мсмтп: ТЛС сертификата верификација није успело:. Сертификат није добио познатог издавача ' поздравио ме на екрану.
Да пређе потврдили -
Само покрените следећи
$ msmtp --serverinfo --host=smtp.gmail.com --tls=on --port=587 --tls-certcheck=off
На месту старог Тхвате Сервер сада сте се након издаваоца у сегменту
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US
Срећом Решење је једноставно, овде је оно што треба да урадите на Дебиану
# apt-get install ca-certificates
# dpkg -s ca-certificates|grep Version
Version: 20090814
После овога само промените следећу линију у / мсмтпрц сте ~~~В.
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
Обједињавање Хешеви у иамл конф фајлова
ИАМЛ је прилично згодан за писање конфигурационе фајлове. Основна предност је у томе, то се чита као текстуалну датотеку. Ово ради заиста добро ако ваш конфиг фајл је равна (без хијерархија) и нема понављања.
Ако ваша датотека конфигурације има понављања онда има смисла да се одвоје од те елементе и поново их. Оно што ја мислим је ово - рецимо да ваша датотека конфигурација изгледа овако:
Развој: инпут_лоцатион: цоммон_инпут оутпут_лоцатион: дев_лоцатион Емаил: смтп_сервер: иоур_сервер Логин: иоур_логин лозинка: топ_сецрет производња: инпут_лоцатион: цоммон_инпут оутпут_лоцатион: дев_лоцатион Емаил: смтп_сервер: иоур_сервер Логин: иоур_логин лозинка: топ_сецрет
Под претпоставком изнад кода у / тмп / тест.имл Ево како можете да прочитате у Питхон и Руби
$cat readyml.py
# / Уср /! Бин / енв питхон ппринт из увоза ппринт као пп # У Дебиану потребно је да инсталирате Питхон-иамл иамл из увоза оптерећења, лоад_алл, депонија хасх = оптерећење (отварају ('/ тмп / тест.имл')) ПП (хасх ['развој'])
$ cat readyml.rb
# / Уср /! Бин / енв рубин захтевају наслова ПП наслова хасх = ИАМЛ :: оптерећење (Филе.опен ('/ тмп / тест.имл'). реад) ПП Хасх ['развој']
Овде је згодно за један путнички авион рубина верзији
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' , или можете покушати да исти у ИРБ или Питон конзолу.
Имајте на уму да у горе наведеном фрагмент кода, све је друго него излаз локација је иста у развој и производњу дела. Ово је место где имл чвор идентификатор долази да спасе. Идеја је једноставна имају скуп подразумеваних вредности и заменити их на другом месту.
Можете да га растргнути као што следи:
а: дефаултс и подразумеване инпут_лоцатион: цоммон_инпут оутпут_лоцатион: дев_лоцатион Емаил: СЕНДЕР_НАМЕ: пошиљалац смтп_сервер: иоур_сервер Логин: иоур_логин лозинка: топ_сецрет Развој: <<: Дефаултс РСД * производња: <<: Дефаултс РСД * оутпут_лоцатион: прод_лоцатион
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Одлично, то ради (тм).
Убедљиво смо тргује неке јасноћу на мало магије. Овде је мало објашњење: &, * и <<: и што је сидро Таг се може схватити као чвора идентификатора, је * и референтни чвор <<: скраћеница за хеш стапања.
За више детаља погледајте било иамл спецификације или Википедиа
До сада је тако добро, али овде постоји цака, ови хасх стапања нису рекурзивно. Шта то значи је ово: рецимо да желите да имате другачије име пошиљаоца за пошту у два окружења, можда ћете бити у искушењу да урадите следеће:
а: дефаултс и подразумеване инпут_лоцатион: цоммон_инпут оутпут_лоцатион: дев_лоцатион Емаил: СЕНДЕР_НАМЕ: пошиљалац смтп_сервер: иоур_сервер Логин: иоур_логин лозинка: топ_сецрет Развој: <<: Дефаултс РСД * Емаил: СЕНДЕР_НАМЕ: сендер_дев производња: <<: Дефаултс РСД * оутпут_лоцатион: прод_лоцатион Емаил: СЕНДЕР_НАМЕ: сендер_прод
Омогућава проверити
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
nil
$
Упс, нешто је пошло наопако, проблем као горе поменуто је да је хеш стапање није рекурзивна и док стапање је заменио маил подразумевано поштом производње који има само један тастер. Решење / решили да се одвијати још један ниво:
цоммон_сеттингс: & цоммон_сеттингс инпут_лоцатион: цоммон_инпут оутпут_лоцатион: дев_лоцатион маил_дефаултс линкови: & маил_дефаултс СЕНДЕР_НАМЕ: пошиљалац смтп_сервер: иоур_сервер Логин: иоур_логин лозинка: топ_сецрет а: дефаултс и подразумеване <<: Цоммон_сеттингс РСД * Емаил: <<: Маил_дефаултс РСД * Развој: <<: Дефаултс РСД * производња: <<: Дефаултс РСД * Емаил: <<: Маил_дефаултс РСД * СЕНДЕР_НАМЕ: сендер_прод
Летс проверите поново
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Да ли ви кажете да имате један више ниво гнезде, добро се дефинитивно може одвијати још један ниво, али онда то постаје хаос. Дакле, ако не покушавате да напише решење за куле Ханоја у конф фајл, боље је да рестуцтуре цонф фајл од копања у иамл или нешто друго. Али то је ионако ваш позив.
Мало љуске преусмеравању
Ево како ми то обично схелл преусмеравање
$ ./pgm.sh args >out.txt 2>err.txt
Желео сам да га измените мало и покренути на следећи начин
$ ./pgm.sh args
са захтевом да излаз и грешку Иди до неког фајла унутар пгм.сх израчунате на основу аргс. Један илустративан случај би могао бити датум када је део аргс. Дакле, желите стдоут да идем да кажем / ваш / директоријум / пгм_оут_ИИИИММДД.ткт 1
Проблем са стандардног начина преусмеравања N>file.txt тј, дружење филе дескриптор Н до филе.ткт, је да то ради само за ново одвојен процес, а не за текући процес.
тако
$ echo hi 1>out.txt ; echo hii . ће Хи послати оут.ткт али ће штампати диска на стдоут 2
Ово је место где exec долази у наш спас. Ако томе додамо exec 1>somefile.txt онда излаз из остатка писма ће ићи сомефиле.ткт
$. / Тест.сх Хи ће преусмерити, као и да диска оут.ткт
$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
Слично томе да преусмерите стдоут као и стдерр ћемо урадити нешто овако
cat test2.sh
exec 1>out.txt
exec 2>err.txt
echo out text
echo 1>&2 err text
somenoneexitent command
ls -ld /tmp
Сада враћају на почетну тачку преусмеравање на неку датотеку из унутрашњости шкољке, рецимо Програм израчунава име фајла у неком променљивом ОУТФИЛЕ, могли смо само урадио exec 1>$OUTFILE
То решава тренутни проблем. Али, можда желите да прођете кроз следећи пример који постиже наслова насумичну приступ 'од датотеке у схелл скрипту. Пример је из овде
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
Са коментарима, овај код је само по себи.
-
1. То се може урадити по $ ./pgm.sh args >pgm_out`date +%Y%m%d` идеја је да се генерише ово име датотеке заснован на некој логици у самом програму.
2 у 1 1> оут.ткт је сувишна, али то овде појашњава да смо преусмеравање ФД 1
Да смањи или не размеру
Говорећи о хоризонталној подели база података, ДХХ од РОР славе сугерише да скалирање ствари чекају, дефинитивно чекати до тачке ваше пословне потребе то захтевају. Његов чланак дефинитивно има смисла за мале окружењима новооснованих кажу. Не кажем да је у стартуп треба да пишу програме демо, али с обзиром да има само 24 сата у дану треба да се фокусирају на служењу рећи 1000 корисника у више испуњава него начин губите сан због бриге о томе како ће моја пријава руковање оптерећење од 13.142 милиона корисници. Ако добијете те многе кориснике, знаћете како да смањи. За стартупс скалабилност је добро да реши проблем, али много боље да имају проблема, мислим свако покретање да би волео да ради у овом проблему!
У другом вези члана Џереми Заводни пише не би требало да зависи господине Мооре, ако имате проблема скалабилност.
Пошто се ови чланци се односе на Муровом закону не могу помоћи, али да мора да напише Муров закон буде један од најважнијих закона у генерализоване информатике. Из своје првобитне прогнозе о густини транзистора, овај закон се сада цитирано било наиђете експоненцијалног раста.



































