Опитування, пінг, PubSub, pubsubhub, PubSubHubbub
У випадку, якщо ви налаштовані скептично, є метод в безумство вище, в назві посади. У колах технологій малоймовірно, що ви не чули про PubSubHubbub. У швидких кілька місяців, він був одним з трьох найбільших говорили про речі. Дві інші гомоморфний шифрування і Google хвилі [ 1. ]. Повертаючись до нинішньої посади - терміни в назві вказує, як ви отримаєте вміст від інших людей. Після деталі стають більш зрозумілими, якщо уявити, що відбувається стосовно блогів, навіть якщо вони концептуально не обмежується блогами.
Опитування відноситься до сценарію, де клієнти постійно просять сервер, якщо щось нове придумати. Як часто просити поновлення завжди будуть проблеми з виборчих занадто часто або дуже рідко, але, як один з читачів зазначив тут , що одне велике, річ з опитуванням в тому, що сервер не повинні підтримувати держава.
Ping відноситься до випадку, коли, де розмістити статтю, ви (або ваш програмного забезпечення) також оновлює деякі популярні (центральної) Update Services. Деякі тло тут .
Далі йде PubSub яка виступає за публікації / підписки, одним з перших кроку на це було зроблено тут, Еван Хеншоу-Плат і Келлан Елліот-Мак-Кри (72 слайдів, але варто йти шляхом). Переконливим прикладом вони дали проти ця - на певну дату, FriendFeed поповз Flickr 2900000 разів, щоб отримати останні фотографії 45 754 користувачів, з яких 6721 побував Flickr в ці 24 години і могли б "потенційно" завантажив фотографію. Зверніть увагу, що те, що вони запропонували не нові технології, як вони вказують на «революційний новий 20-річний технології". Якщо ви робите це для блогів, то одна з основних проблем, з XMPP - наявність даних накладні витрати, які можуть досягати 60-70% може бути зменшена багато.
pubsubhub виступає за публікацію підписатися маточини і PubSubHubbub це протокол, ядром якої є ідея pubsubhub. У чому видавці (наприклад блогерів) оновити центр якого (може бути більше одного центрів, які спілкуються один з одним) знаходиться "десь у хмарах, відповідно до протоколу цього можна штовхати або тягнути відповідно до протоколу, але в наступного посилання ланцюга, центр клієнта (скажімо, читачів) він завжди штовхати моделі. Ця сторінка є гарною відправною точкою для PubSubHubbub, огляд слайдів хороші. Завжди красномовний Аніл Даш описує його тут в якості веб-кнопки.
Два інших пов'язаних читанні webhooks яка в основному HTTP зворотного виклику. Github використовує його, так само PayPal для асинхронних повідомлень оплати в рп . Так роблять багато інших. Пов'язані концепції rsscloud що знову PubSub центром. Слідуйте цій посиланням докладніше.
Ви можете бути здивовані, що сенс писати всі ці ось, є дві 1. Ці речі треба знати, принаймні мінімально і 2. Цей блог PubSubHubbub включений в даний час через appspot концентратора за допомогою цього WordPress плагін і кормів теж PubSubHubbub включений через FeedBurner, посилання тут
-
[ 1 ]. - Хороший вступний читати повністю гомоморфний шифрування цієї статті Брюс Шнайер і це мова йде більш-менш єдиним джерелом хвилі Google.
ОНОВЛЕННЯ - Це повідомлення пояснює, як вимога публічного сервера для зворотного дзвінка можна обійти для настільних клієнтів за допомогою XMPP шлюз (для PubSubHubbub).
Трохи збірки
Після прочитання цієї статті про блокування вільних буферів і, побачивши використання CAS (порівняти і своп), я відчував, що розміщення складання коду, щоб зробити те ж саме. Використовуйте випадку там було написати власний метод і викликати його з Java (ще в 1.5, коли одночасно структур даних в Java були більш-менш неіснуючі). Не мудруючи лукаво, я розкрити код на вас
. По-перше, для СПС і другий для обчислення НОД за алгоритмом Евкліда (це можуть бути знайдені в багатьох місцях і навчальних посібників, а).
Скомпілюйте і запустіть інструкцію gcc file_name.c ; ./a.out
Порівняйте і Обмін
# Include# Include / / Обмін - NewValue, comperand старе / очікуване значення / * * Функція фактично виконує такі речі - якщо значення в * DEST одно OldValue потім замінити його NewValue ще залишити його без змін: не всі ці атомарно * * Є два варіанти повернення * 1.is початкове значення * DEST і залишити тягар виклику FXN порівняти його з oldval * 2. зробити це тут і повернути 0 або 1, то це повинно бути більш ефективним ** / / * Пізніше змінити його в макросів * / Int CAS (Int * ПРИЗНАЧЕННЯ, OldValue Int, Int NewValue) { Е ("(% D,% D,% г)", * ПРИЗНАЧЕННЯ, OldValue, NewValue); / * Int CAS (INT DEST, Int OldValue, Int NewValue) {* / / * Int CAS (INT DEST, Int NewValue, Int OldValue) {* / Int результат = 1 ;/ * 1 показує, що CAS успішно і 0 показує, що він не * / / * До речі потрібно встановити прапор см для затирання! * / volatile__ __ asm__ __ ( "Movl% 2,%% EAX \ п \ т" "Movl% 3,%% EBX \ п \ т" "Movl 0%,%% ECX \ п \ т" "LOCK \ п \ т" "CMPXCHG%% EBX, (%% ECX) \ п \ т" / * повинні бути блокування на одному рядку * / "Вчинено JZ \ п \ т" "Movl $ 0,% 1 \ п \ т" "Вчинено: \ п \ т" : "= М" (Dest), "= г" (результат) "Г" (OldValue), "г" (NewValue), «м» (Dest) : "% EAX", "% EBX", "ECX", "CC" ); Е ("(% D,% D,% г)", * ПРИЗНАЧЕННЯ, OldValue, NewValue); повернення результату; } / * TODO * Написати ще АНМ FXN яка ставить вище FXN в той час циклу і продовжувати пробувати, якщо він успішно * / Int основних () { Int = 5, б = 6; Int * с = (INT *) Танос (SizeOf (INT)); * С = 6; / * Int C = 6, * / Е ("% г \ п", CAS (C, B, б)); Е ("% г \ п", CAS (C, B)); Е ("% г \ п", CAS (С, А,)); Е ("% г \ п", CAS (C, B, б)); * С = 6; / * С = 5, * / Е ("зміна значення з * к% г \ п", * с); Е ("% г \ п", CAS (C, B, б)); Е ("% г \ п", CAS (C, B)); Е ("% г \ п", CAS (С, А,)); Е ("% г \ п", CAS (с, а, б)); Е ("% г \ п", CAS (C, B)); return 0; }
Форматування ноти - здається WP підсвічування синтаксису додавання Зрештою, ігнорувати це.
НОД
# IncludeInt НОД (INT A, INT B) { Int результат; / * Обчислити Найбільший спільний дільник за алгоритмом Евкліда * / __asm__ __ volatile__ ("movl% 1,%% EAX;" "Movl% 2,%% EBX;" "ПРОДОВЖЕННЯ: cmpl $ 0,%% EBX;" "Вчинено е"; "Xorl%% EDX, EDX%%"; "Idivl%% EBX;" "Movl EBX%%%% EAX;" "Movl%% EDX, EBX%%"; "JMP ПРОДОВЖЕННЯ"; "Вчинено: movl%% EAX,% 0,": "= г" (результат): "г" (а), "г" (б) ); повернення результату; } Int основних () { int, перше, друге; Е ("Введіть два цілих числа:"); Scanf ("% D% D", і перше, і друге); Е ("НОД% D і% D% г \ п", перший, другий, НОД (перший, другий)); return 0; }
Крикету світ чекає новий світовий порядок
Після серії тестів протягом п'яти і приблизно через два місяці, Англія меліорованих попелу.
Давайте поговоримо про команду-переможниці першої - їх середній замовлення в середньому ", якщо ви не хочете до критичної. Вклад Greame Свана з битою буде вважатися не менше, ніж внесок з м'ячем. Стюарт Широкий - кращий універсал, не було стартер на 5-й тест. Ендрю Штраус був єдиним послідовним бетсмен і Джиммі Андерсон був єдиним послідовним казанок.
Справа в тому, щоб не лаяти досягнення команди-переможниці, а й в перспективі той факт, що незважаючи на всі ці, Австралії втратили. Ви повинні думати на кілька секунд, якщо просили назвати їх кращими казанок. Право, це було BW Hilfenhaus. Hauritz перевершили очікування everbody, але ще не був достатньо хороший, щоб бути обраний протягом двох з п'яти тестів. Південна Африка не стала світовою било без лічильника світового класу, Австралія не може сподіватися залишитися один без одного хорошого достатньо одного по крайней мере. Маг покинув сцену, і це не схоже на мистецтво більше, забути магію. Понтінг височить серед простих смертних і Майкл Кларк постає дуже часто, але, що робить їх команда з дуже хорошими гравцями і не дуже хороша команда.
Попіл 2009 року будуть пам'ятати за останні Попіл Ендрю Флінтофф в, прибуття Стюарт Широкий як універсал (якщо він додасть ще кілька Попіл фольклор його багатообіцяючий початок), і один з найбільш яскравим дебютом століття весь час Тротт, але він також буде пригадав, як точки, де IFS і заперечуйте про першість Австралії були, нарешті, покласти на відпочинок, вона закінчилася. Не зрозумійте мене неправильно, вони можуть розкопати Майк Хассі і Стюарт Кларк, але Ви відчуваєте, що внесок усіх часів великих, коли вони пропадають без вісті. Іноді вони приходять, щоб нагадати вам про себе в IPL, але все ж вони не можуть бути замінені. Давайте відчуваю себе щасливим за те, що бачив Варн, МакГрат і Gilchrist грати разом і при підтримці Waughs, Понтінг, Хайден, Мартін і Лангер.
Забігаючи вперед, Південна Африка завжди буде залишатися дуже хороша команда, але вони повинні виграти півфінал і бути більш послідовними в усьому світі, Пакистан залишиться загадковим блискучий, індійський молоді гравці, ймовірно, буде важко заповнити взуття надзвичайних попередників. Шрі-Ланка має продовжувати показувати проблиски мистецтва в ремесло. Але, ми, можливо, доведеться чекати десь до того, всі з домінуючою командою або перед капітан скаржиться на відсутність конкуренції, як Стів Вог зробив один раз.
На відповідну записку - давайте вітати повернення Асіфа, він чертовски великий потенціал, будемо сподіватися, щоб побачити деякі з цих, а також вітати Енді квітів у новій awatar, право, ви не можете зберегти хороші люди вниз надовго.
рубін один вкладиш для створення хеш-
Вчора при проходженні одного з моїх старих програм, я знайшов це написано мною якийсь час назад:
#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
Щоб убити призупинення дозвольте мені розкрити цей raw_text виглядає
, Права вона була вирізана з PayPal підтвердження оплати.
Над лінією, якщо порушена в частині читає краще:
unescaped_array = CGI.unescape (raw_text). розкол ("&") unescaped_array = unescaped_array.collect {| х | = б x.split ("="); b.push (нуль), якщо b.size == 1, б} flattened_array = unescaped_array.flatten хеш = Hash [* flattened_array]
Давайте зробимо окремі кроки в IRB:
IRB (основний). 009:0> = unescaped_array CGI.unescape (raw_text) спліт ('&') => ["Успіх", "mc_gross = 10,00" "protection_eligibility = Неприйнятні", "payer_id = U7PPJJ4TSJ47E", "податкова = 0.00", "payment_date = 9:45:30 10 липня 2009 PDT", "В очікуванні payment_status = "] IRB (основні): 013:0> = unescaped_array unescaped_array.map {| х | = б x.split ("="); b.push (нуль), якщо b.size == 1, б} => [["УСПІХ", нуль], ["mc_gross", "10.00"] ["protection_eligibility", "не мають права"] ["payer_id", "U7PPJJ4TSJ47E"] ["податок", "0.00"] , ["payment_date", "9:45:30 10 липня 2009 PDT"] ["payment_status", "В очікуванні"]] IRB (основні): 014:0> = flattened_array unescaped_array.flatten => ["Успіх", нуль ", mc_gross", "10.00", "protection_eligibility", "не мають права", "payer_id", "U7PPJJ4TSJ47E", "податки", "0.00", "payment_date", "9:45: 30 10 липня 2009 PDT "," payment_status "," В очікуванні "] IRB (основні): 015:0> хеш = Hash [* flattened_array] => {"Податок" => "0.00", "payment_status" => "До", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10.00", "успіх" => нуль ", payment_date" = > "9:45:30 10 липня 2009 PDT", "protection_eligibility" => "Неприпустимі"}
До речі, * називається оператор знак оклику в рубіні
Ще один спосіб створити хеш з "масиву пар" є використання ін'єкційних:
хеш = [[1,2], [3,4]] вводять ({}). {| результаті елемент | результат [element.first] = результат [element.last];} результат Існує ще один спосіб
Напишіть цикл, який я залишаю в якості вправи для читачів!
Ось декілька варіантів використання не пов'язані створення хеш із масиву:
IRB (основні): 005:0> [1,2,3,4,7,9] Аргумент group_by {| х | х | <5.? : Менше більше ::} => {: Менше => [1, 2, 3, 4]: велика => [7, 9]}
Ви можете зробити більше речей, в основному результат блоку використовується як ключ для цього елемента в результаті хеш.
Gmail, дурень і msmtp виправлення
Якщо ви використовуєте Mutt і SMTP для доступу до Gmail. Ось (погані) новини. Круті хлопці в Google знову змінив сертифікат. Ах, ви запитаєте - як це знати? Просто дурень почали скаржитися на погане сертифікат при спробі використовувати msmpt, сумно відомий "msmtp: TLS сертифікат перевірки не вдалося. Сертифікат не отримав відомий емітента зустрів мене на екрані.
Щоб перетнути підтвердити -
Просто запустіть наступні
$ msmtp --serverinfo --host=smtp.gmail.com --tls=on --port=587 --tls-certcheck=off
На місці старого сервера Thwate тепер ви отримуєте наступні емітента в сегменті
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US
На щастя, виправити це просто, от те, що потрібно робити на Debian
# apt-get install ca-certificates
# dpkg -s ca-certificates|grep Version
Version: 20090814
Після цього просто змініть наступну рядок у вас ~ ~ ~ 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
до
tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt
Git і Дивовижний Огляд
Ось два посилання на обстеження, ШКТ (система контролю версій) і дивним (віконний менеджер) спільноти. Якщо ви використовуєте одну з них, вийміть деякий час, щоб заповнити анкету. Думайте про це як найпростіший спосіб внести свій вклад в програмне забезпечення ви використовуєте.
Ось посилання:
Git - http://www.survs.com/survey?id=2PIMZGU0&channel=Q0EKJ3NF54
Awesome - http://www.survs.com/survey?id=8BVEV3FO&channel=BH07CQ040D
Примітка - (Як знайти на цих сторінках, а в нижній частині
) -
"Якщо у вас є печиво включений, ви завжди можете уявити частково заповнений опитування, і повернутися в свої відповіді на більш пізній час, завершивши його пізніше".
Злиття хешей в YAML файли конф
YAML це дуже зручно для запису файлів конфігурації. Основною перевагою є те, що він читає, як текстовий файл. Це працює дуже добре, якщо ваш файл конфігурації квартира (немає ієрархії) і не має повторень.
Якщо ваш файл конфігурації повторів, то має сенс виділити ті елементи і використовувати їх. Що я маю на увазі це - скажімо, ви конфігураційний файл виглядає наступним чином:
розвитку: input_location: common_input output_location: dev_location пошта: smtp_server: your_server Логін: ваш_логін Пароль: top_secret Виробництво: input_location: common_input output_location: dev_location пошта: smtp_server: your_server Логін: ваш_логін Пароль: top_secret
Припускаючи вище код в / TMP / test.yml ось як ви можете прочитати в пітона і рубін
$cat readyml.py
#! / USR / бен / ENV пітон pprint від імпорту pprint як пп # В Debian необхідно встановити Python-YAML YAML від імпорту навантаження, load_all, самоскиди хеш = навантаження (відкритою ('/ TMP / test.yml)) рр (хеш ['розвиток'])
$ cat readyml.rb
#! / USR / бен / ENV рубін require 'рр' хеш = YAML :: навантаження (File.Open ('/ TMP / test.yml). читати) стр. хеш ['розвиток']
Тут зручна один лайнер для версії рубінових
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' або ви можете спробувати те ж саме в IRB або пітона консолі.
Зверніть увагу, що в наведеному вище фрагменті коду, все, крім вихідних Місце ж у розробці та виробництві частини. Тут ут ідентифікатор вузла йде до порятунку. Ідея проста є набір значень за замовчуванням і перевизначити їх в іншому місці.
Ви могли б витягти його на частини таким чином:
За замовчуванням: і за замовчуванням input_location: common_input output_location: dev_location пошта: SENDER_NAME: відправник smtp_server: your_server Логін: ваш_логін Пароль: top_secret розвитку: << * За умовчанням Виробництво: << * За умовчанням output_location: prod_location
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Великий, він працює (тм)!.
Можливо ми обміняли деяку ясність в трохи магії. Ось невелике пояснення: і * і <<: і яка тега може бути зрозуміла як ідентифікатор вузла, * є вузлом посилання і <<: позначає хеш злиття.
Для отримання додаткової інформації див або YAML специфікації або Вікіпедії
Поки все добре, але є заковика, ці хеш злиття не рекурсивним. Що це означає, полягає в наступному: припустимо, ви хочете мати інше ім'я відправника пошти в двох середовищах, ви можете захотіти зробити наступне:
За замовчуванням: і за замовчуванням input_location: common_input output_location: dev_location пошта: SENDER_NAME: відправник smtp_server: your_server Логін: ваш_логін Пароль: top_secret розвитку: << * За умовчанням пошта: SENDER_NAME: sender_dev Виробництво: << * За умовчанням output_location: prod_location пошта: SENDER_NAME: sender_prod
Давайте перевіримо
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
nil
$
На жаль, щось пішло не так, проблема, як згадувалося вище, що хеш-злиття не є рекурсивної і при злитті його замінити пошти за замовчуванням поштою виробництва, який має тільки один ключ. Рішення / Обхідний розгорнути ще один рівень:
common_settings: і common_settings input_location: common_input output_location: dev_location mail_defaults: і mail_defaults SENDER_NAME: відправник smtp_server: your_server Логін: ваш_логін Пароль: top_secret За замовчуванням: і за замовчуванням << * Common_settings пошта: << * Mail_defaults розвитку: << * За умовчанням Виробництво: << * За умовчанням пошта: << * Mail_defaults SENDER_NAME: sender_prod
Давайте ще раз перевірити
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Чи знаєте ви, у вас є ще один рівень вкладеності, а ви точно можете розгорнути ще один рівень, але потім вона стає безлад. Отже, якщо ви не намагаєтеся написати рішення Вежі Ханоя в конфігураційний файл, то краще restucture конфігураційний файл, ніж копирсатися в YAML або щось інше. Але це ваш дзвінок в будь-якому випадку.
Великі програмісти знайти прості вирішення складних проблем
Після того, як довго я можу знайти джерело для наступних котирувань
Молодший програмістам створювати прості рішення для простих завдань. Старший програмістам створювати комплексні рішення для складних проблем. Великі програмісти знаходити прості рішення складних проблем.
Саме в есе під назвою Красиві Software Чарльз Коннелл.
Інший улюблений мій це Дзен Python -
Красиве краще, ніж негарним.
Явний краще ніж неявний.
Чим простіше, тим краще, ніж складні.
Комплекс краще, ніж складні.
Плоскі краще вкладатися.
Рідкісні краще, ніж щільна.
Читаність має значення.
Особливі випадки не є спеціальними достатньо, щоб порушувати правила.
Незважаючи на практичність б'є чистоти.
Помилки ніколи не повинні проходити тихо.
Якщо явно не замовчати.
В умовах невизначеності, відмовитися від спокуси здогадатися.
Там повинна бути одна і, бажано, тільки один очевидний спосіб зробити це.
Незважаючи на те, що ніяк не може бути очевидним на перший, якщо ви не голландці.
Зараз краще, ніж ніколи.
Хоча ніколи часто краще, ніж * право * зараз.
Якщо реалізацію складно пояснити, це погана ідея.
Якщо реалізацію легко пояснити, вона може бути гарною ідеєю.
Простору імен є одним сигналять відмінна ідея - давайте робити більше таких!
-------------------------
і є класичний Тао програмування
-
кредитів, а на пов'язані сайту
Переклад Джеффрі Джеймс
Переклад Герцог Hillard
Передано Анупам Trivedi, Sajitha Tampi і Meghshyam Джаганнатха
Re-HTML-ized під редакцією Kragen Сіттлер
-
Книга 1 - The Silent Пустота
Так говорив головний програміст:
"Коли ви дізналися вирвати код помилки з пастки кадрі,
буде для вас час, щоб піти. "1,1
Щось таємниче формується, народився в тихій порожнечі. Очікування поодинці і
рухаючись, він відразу ще і тим не менш в постійному русі. Це джерело
всіх програм. Я не знаю її імені, тому я буду називати його Дао
Програмування.Якщо Дао велике, то операційна система велика. Якщо операційна
Система велика, то компілятор великий. Якщо компілятор великий,
то додаток великий. Користувач задоволений і існує
гармонії в світі.Тао програмування тече далеко і повертається на вітер вранці.
1,2
Тао народився в машинну мову. Машинний мова породив
асемблер.Асемблер породив компілятор. В даний час існує десять тисяч
мов.Кожна мова має свою мету, але скромним. Кожна мова виражає
Інь і Ян програмного забезпечення. Кожна мова має своє місце в Дао.Але не програмувати на COBOL, якщо ви можете уникнути цього.
1,3
На початку було Дао. Дао породило Простір і Час.
Тому простір і час є Інь і Янь програмування.Програмісти, які не осягнути Дао, завжди не вистачає часу
і простору для їх програм. Програмісти, які осягнути Дао завжди
мати достатньо часу і простору для досягнення своїх цілей.Як могло бути інакше?
1,4
Мудрий програміст чув про Тао і дотримується його. Середнє
програміст чув про Тао і шукає його. Дурний програміст
чує про Дао і сміється над нею.Якби це було не для сміху, не було б Дао.
Найвищі звуки важче чути.
Надалі це шлях до відступу.
Великий талант проявляється в кінці життя.
Навіть досконала програма все ще є помилки.-------------------------
Книга 2 - Давні майстри
Так говорив головний програміст:
"Після трьох днів без програмування життя стає безглуздою."
2,1
Програмісти старих були загадкові і глибокі. Ми не можемо зрозуміти
свої думки, так що все що ми робимо, описати їх зовнішній вигляд.Усвідомлюючи, як лисиця перетину води. Сигнал, як і взагалі на
бою. Вид, як господиня вітає своїх гостей. Простий, як
uncarved блоків з дерева. Непрозорими, як чорний басейнів в затемненому печери.Хто може сказати, секрети їхніх сердець і умів?
Відповідь на це питання існує тільки в Дао.
2,2
Великий магістр Тьюринга одного разу наснилося, що він машина. Коли він прокинувся, він
вигукнув:"Я не знаю чи я Тьюринга снилося, що я машина, або
Машина снилося, що я Тьюринг! "2,3
Програміст з дуже великою комп'ютерної компанії пішли на програмне забезпечення
конференції, а потім повернувся представити його менеджер, кажучи: "Який
програмісти працюють в інших компаніях? Вони вели себе погано і були
байдужий до зовнішності. Їх волосся були довгі і неохайні і їх
Одяг був зморшкуватою і старої. Вони розбився нашу гостинність пакет, і вони
зроблені грубі звуки під час мого виступу ».Менеджер сказав: "Я б ніколи не послав тебе на конференцію. Ті
програмісти живуть за межами фізичного світу. Вони вважають життя абсурдна,
випадковий збіг. Вони приходять і йдуть, не знаючи обмежень.
Без допомоги, вони живуть тільки для своїх програм. Чому вони повинні турбуватися
з соціальними конвенціями?"Вони живі всередині Дао."
2,4
Учень запитав учителя: "Ось програміст, що ніколи не проектує,
документи або випробування його програм. Але всі, хто знає його вважають його одним з
кращих програмістів у світі. Чому це відбувається? "Майстер відповів: "Цей програміст опанував Дао. Він пішов
за необхідність розробки, він не сердиться, коли система
падає, але приймає всесвіт без занепокоєння. Він вийшов за межі
необхідні для документації, він не дбає, якщо хтось бачить, що його код.
Він пішов від необхідності тестування, кожен з його програми ідеально підходять
в собі, спокійний і елегантний, їх мета очевидна. Дійсно,
він увійшов в таємниці Дао. "-------------------------
Книга 3 - Проектування
Так говорив головний програміст:
"Коли програма тестується, вже занадто пізно, щоб зробити дизайн
зміни ".3,1
Там колись був людиною, який пішов на виставці комп'ютер. Кожен день, як він
введений, чоловік сказав охоронець біля дверей:"Я великий злодій, відомий мій подвиг крадіжки. Бути
попереджений, для цієї виставки не уникнуть unplundered ".Мова порушується охорона сильно, тому що там були мільйони
доларів комп'ютер всередині обладнання, так що він спостерігав за людиною уважно. Але
Людина просто бродили від стенду до стенду, наспівуючи тихо сам з собою.Коли чоловік вийшов, охоронець відвів його вбік і обшукав його одяг, але
нічого не було знайдено.На наступний день виставки, цей чоловік повернувся і дорікнув охоронця
сказав: «Я втік з величезною здобиччю вчора, але сьогодні буде ще
краще ". Так що охоронець дивився на нього все більш тісно, але безрезультатно.В останній день виставки, охоронець міг стримати своєї цікавості
більше немає. "Пан Злодій", він сказав: "Я дуже здивований, я не можу жити в
світу. Будь ласка, просвітіть мене. Що це, що ви крадете? "Людина посміхнувся. "Я крадіжці ідеї", сказав він.
3,2
Там колись був майстром програміст, який писав неструктуровані програми.
починаючий програміст, прагнучи наслідувати його, а також почав писати
неструктуровані програми. Коли Учень запитав майстра, щоб оцінити його
прогрес, майстер критикували його за написання неструктурованих програм,
сказав: «Що підходить для майстра не підходить для
новачок. Ви повинні зрозуміти Дао, перш ніж подолання структури ".3,3
Був одного разу програміст, який був прикріплений до двору воєначальника
Ву. Воєначальник запитав програміста: "Що легше проектувати:
бухгалтерський пакет чи операційну систему? ""Операційна система", відповів програміст.
Воєначальник виголосив вигук недовіри. "Звичайно, бухгалтерський облік
пакет тривіально наступний складності операційної системи ", він
сказав."Не так", сказав програміст, "при проектуванні бухгалтерський пакет,
програміст працює як посередник між людьми з різними
ідеї: як це має працювати, як його доповіді мають з'явитися, і як вона повинна
Відповідно до податкового законодавства. На відміну від операційної системи не обмежується
зовнішніх явищ. При проектуванні операційної системи, програміст
прагне до найпростішої гармонії між машиною та ідеями. Ось чому
операційна система простіше в розробці ".Воєначальник з Ву кивнув і посміхнувся. "Це все добре, але
що легше налагодити? "Програміст не відповів.
3,4
Менеджер прийшов до майстра програмісту і показав йому вимоги
документ для нових додатків. Менеджер запитав вчителя: "Як довго
займе проектування цієї системи якщо я призначити п'ять програмістів до нього? ""Це буде один рік", сказав майстер в найкоротші терміни.
"Але нам потрібна ця система негайно і навіть раніше! Як довго це
прийняти, якщо я призначений десять програмістів до нього? "Програміст майстер насупився. "У такому випадку, це займе два роки."
"А що, якщо я призначу сто програмістів?"
Програміст майстер знизав плечима. "Тоді проект ніколи не буде
завершений ", сказав він.-------------------------
Книга 4 - Кодування
Так говорив головний програміст:
"Добре написана програма це свій власний рай, погано написана програма
своє пекло ".4,1
Програма повинна бути легкою і гнучкою, її підпрограми пов'язано як
нитка перлів. Духу і цілям програми повинні бути збережені
у всьому. Там повинно бути ні занадто мало або занадто багато, ні
непотрібні петель і марно змінних, ні відсутності структури, ні
Переважна жорсткості.Програма повинна слідувати Закону `найменшого подиву». Що це за закон?
Це просто, що програма повинна завжди відповідати користувачеві в дорозі
Вражає, що його найменше.Програми, незалежно від того, наскільки складним, повинна діяти як єдине ціле. Програма
повинні бути спрямовані по логіці протягом, а не зовні.Якщо програма не в ці вимоги, він буде в стані
безладу і плутанини. Єдиний спосіб виправити це переписати
програми.4,2
Учень запитав майстра: "У мене є програма, яка іноді працює і
іноді переривається. Я слідував правилам програмування, але я
повністю збиті з пантелику. Яка причина цього? "Майстер відповів: "Ви в замішанні, тому що ти не розумієш Дао.
Тільки дурень чекає розумного поведінки від своїх побратимів. Чому, як ви
очікувати від машини, що люди побудували? Комп'ютери моделювання
детермінізму, тільки Дао абсолютно.«Правила програмування минущі, тільки Дао вічно. Тому
Ви повинні споглядати Дао перш ніж ви отримаєте просвітлення "."Але як я знаю, коли я отримав просвітлення?" Запитав
новачок."Ваша програма працюватиме правильно," відповів майстер.
4,3
Майстер пояснював природу Дао одному зі своїх новачків. "
Дао втілено в усіх програмних - незалежно від того, незначні ", сказав
майстер."Чи є Дао в ручній калькулятор?" Запитав учень.
"Це", була відповідь.
"Чи є Дао в відеогрі?" Продовжує новачка.
"Це навіть у відеогрі," сказав учитель.
"І це Дао в ДОС для персонального комп'ютера?"
Майстер закашлявся і перевів положення небагато. "Урок закінчений
на сьогоднішній день, "сказав він.4,4
Програміст принц Ван був кодування програмного забезпечення. Його пальці танцювали на
клавіатури. Програма складена без повідомлення про помилку, і програма
побіг, як легкий вітерець."Відмінно!" Принц вигукнув: "Ваша техніка бездоганна!"
"Техніка"? Сказав програміст поворот від терміналу, "Що я
слідувати, Дао - за межами всіх технік! Коли я вперше почав програмувати я
що бачу перед собою всі проблеми в одну масу. Через три роки я не
не бачив цю масу. Замість цього я використовував підпрограми. Але зараз я нічого не бачу.
Все моє єство існує в безформну порожнечу. Мої почуття не діють. Мій дух,
вільно працювати без плану, слід своїм інстинктам. Коротше кажучи, моя програма
пише сам. Правда, іноді виникають складні проблеми. Я бачу їх
йде, я сповільнюватися, я дивлюся мовчки. Тоді я змінити один рядок коду
і труднощі зникнуть, як клуби диму простою. Я потім скомпілювати
програми. Я сиджу до сих пір, і нехай радість роботи заповнити моє єство. Я закриваю
Очі на мить, а потім вийти з неї. "Принц Ван сказав: «Буде, що всі мої програмісти були мудрими!"
-------------------------
Книга 5 - Технічне обслуговування
Так говорив головний програміст:
"Хоча програма повинна бути, крім трьох рядків, коли-небудь йому доведеться бути
підтримується ".5,1
Добре використовувати двері не вимагає мастила на петлях.
Швидкоплинної потік не росте стагнації.
Ні звуку, ні думки можуть подорожувати через вакуум.
Програмне забезпечення гниє, якщо не використовується.Це великі таємниці.
5,2
Менеджер запитав програміста, скільки часу йому буде потрібно, щоб закінчити
Програма, на якій він працює. "Вона буде закінчена завтра"
Програміст швидко відповів."Я думаю, ви в даний час нереально," сказав менеджер, "Чесно кажучи, як
часу це займе? "Програміст замислився на мить. "У мене є деякі особливості, які я хочу
додати. Це займе не менше двох тижнів ", сказав він нарешті."Навіть це занадто багато, щоб чекати", наполягав менеджер, "Я буду
виконані, якщо ви просто скажіть, коли програма буде готова ".Програміст погодився з цим.
Кілька років потому, менеджер у відставку. На шляху до своєї відставки
обід, він виявив, що програміст спить за своїм терміналом. Він був
програмування всю ніч.5,3
Початківець програміст одного разу присвоюється код простий фінансовий пакет.
Початківець працював несамовито протягом багатьох днів, але коли господар його відгуки
свою програму, він виявив, що в ньому міститься екранний редактор, набір
узагальненого графіка процедур, штучний інтелект інтерфейс, але
немає ні найменшої згадки ні про що фінансова.Коли господар запитав про це, новачок обурився. «Не
таким нетерплячим ", він сказав:" Я покладу у фінансовому речі в кінці кінців. "5,4
Чи є хороший фермер знехтувати врожаю він посадив?
Чи є хороші вчителі виходять навіть самого скромного студента?
Чи є хороший батько дозволити одній дитині голодувати?
Чи є хороший програміст відмовитися від підтримки його код?-------------------------
Книга 6 - Менеджмент
Так говорив головний програміст:
"Нехай програмістів буде багато, а менеджерів мало - тоді все буде
продуктивним ».6,1
When managers hold endless meetings, the programmers write games. Коли
accountants talk of quarterly profits, the development budget is about to
be cut. When senior scientists talk blue sky, the clouds are about to roll
in.Truly, this is not the Tao of Programming.
When managers make commitments, game programs are ignored. Коли
accountants make long-range plans, harmony and order are about to be
restored. When senior scientists address the problems at hand, the
problems will soon be solved.Truly, this is the Tao of Programming.
6.2
Why are programmers non-productive?
Because their time is wasted in meetings.Why are programmers rebellious?
Because the management interferes too much.Why are the programmers resigning one by one?
Because they are burnt out.Having worked for poor management, they no longer value their jobs.
6,3
A manager was about to be fired, but a programmer who worked for him
invented a new program that became popular and sold well. As a result, the
manager retained his job.The manager tried to give the programmer a bonus, but the programmer
refused it, saying, “I wrote the program because I thought it was an
interesting concept, and thus I expect no reward.”The manager upon hearing this remarked, “This programmer, though he holds
a position of small esteem, understands well the proper duty of an
employee. Let us promote him to the exalted position of management
consultant!”But when told this, the programmer once more refused, saying, “I exist so
that I can program. If I were promoted, I would do nothing but waste
everyone's time. Can I go now? I have a program that I'm working on.”6,4
A manager went to his programmers and told them: “As regards to your work
hours: you are going to have to come in at nine in the morning and leave
at five in the afternoon.” At this, all of them became angry and several
resigned on the spot.So the manager said: “All right, in that case you may set your own
working hours, as long as you finish your projects on schedule.” The
programmers, now satisfied, began to come in at noon and work to the wee
hours of the morning.————————————————————————–
Book 7 – Corporate Wisdom
Thus spake the master programmer:
“You can demonstrate a program for a corporate executive, but you can't
make him computer literate.”7,1
A novice asked the master: “In the east there is a great tree-structure
that men call `Corporate Headquarters'. It is bloated out of shape with
vice presidents and accountants. It issues a multitude of memos, each
saying `Go, Hence!' or `Go, Hither!' and nobody knows what is meant. Every
year new names are put onto the branches, but all to no avail. How can
such an unnatural entity be?”The master replied: “You perceive this immense structure and are
disturbed that it has no rational purpose. Can you not take amusement from
its endless gyrations? Do you not enjoy the untroubled ease of programming
beneath its sheltering branches? Why are you bothered by its
uselessness?”7,2
In the east there is a shark which is larger than all other fish. It
changes into a bird whose wings are like clouds filling the sky. When this
bird moves across the land, it brings a message from Corporate
Headquarters. This message it drops into the midst of the programmers,
like a seagull making its mark upon the beach. Then the bird mounts on the
wind and, with the blue sky at its back, returns home.The novice programmer stares in wonder at the bird, for he understands it
not. The average programmer dreads the coming of the bird, for he fears
its message. The master programmer continues to work at his terminal, for
he does not know that the bird has come and gone.7.3
The Magician of the Ivory Tower brought his latest invention for the
master programmer to examine. The magician wheeled a large black box into
the master's office while the master waited in silence.“This is an integrated, distributed, general-purpose workstation,” began
the magician, “ergonomically designed with a proprietary operating
system, sixth generation languages, and multiple state of the art user
interfaces. It took my assistants several hundred man years to construct.
Is it not amazing?”The master raised his eyebrows slightly. “It is indeed amazing,” he
said.“Corporate Headquarters has commanded,” continued the magician, “that
everyone use this workstation as a platform for new programs. Do you agree
to this?”“Certainly,” replied the master, “I will have it transported to the
data center immediately!” And the magician returned to his tower, well
pleased.Several days later, a novice wandered into the office of the master
programmer and said, “I cannot find the listing for my new program. Робити
you know where it might be?”“Yes,” replied the master, “the listings are stacked on the platform in
the data center.”7.4
The master programmer moves from program to program without fear. Немає
change in management can harm him. He will not be fired, even if the
project is cancelled. Чому це відбувається? He is filled with Tao.————————————————————————–
Book 8 – Hardware and Software
Thus spake the master programmer:
“Without the wind, the grass does not move. Without software, hardware is
useless.”8.1
A novice asked the master: “I perceive that one computer company is much
larger than all others. It towers above its competition like a giant among
dwarfs. Any one of its divisions could comprise an entire business. Why is
this so?”The master replied, “Why do you ask such foolish questions? That company
is large because it is large. If it only made hardware, nobody would buy
it. If it only made software, nobody would use it. If it only maintained
systems, people would treat it like a servant. But because it combines all
of these things, people think it one of the gods! By not seeking to
strive, it conquers without effort.”8,2
A master programmer passed a novice programmer one day. The master noted
the novice's preoccupation with a hand-held computer game. “Excuse me,”
he said, “may I examine it?”The novice bolted to attention and handed the device to the master. "Я
see that the device claims to have three levels of play: Easy, Medium, and
Hard,” said the master. “Yet every such device has another level of
play, where the device seeks not to conquer the human, nor to be conquered
by the human.”“Pray, great master,” implored the novice, “how does one find this
mysterious setting?”The master dropped the device to the ground and crushed it underfoot. І
suddenly the novice was enlightened.8,3
There was once a programmer who worked upon microprocessors. “Look at how
well off I am here,” he said to a mainframe programmer who came to visit,
“I have my own operating system and file storage device. I do not have to
share my resources with anyone. The software is self- consistent and
easy-to-use. Why do you not quit your present job and join me here?”The mainframe programmer then began to describe his system to his friend,
saying “The mainframe sits like an ancient sage meditating in the midst
of the data center. Its disk drives lie end-to-end like a great ocean of
machinery. The software is as multifaceted as a diamond, and as convoluted
as a primeval jungle. The programs, each unique, move through the system
like a swift-flowing river. That is why I am happy where I am.”The microcomputer programmer, upon hearing this, fell silent. But the two
programmers remained friends until the end of their days.8,4
Hardware met Software on the road to Changtse. Software said: “You are
Yin and I am Yang. If we travel together we will become famous and earn
vast sums of money.” And so the set forth together, thinking to conquer
the world.Presently they met Firmware, who was dressed in tattered rags and hobbled
along propped on a thorny stick. Firmware said to them: “The Tao lies
beyond Yin and Yang. It is silent and still as a pool of water. Це робить
not seek fame, therefore nobody knows its presence. It does not seek
fortune, for it is complete within itself. It exists beyond space and
time.”Software and Hardware, ashamed, returned to their homes.
————————————————————————–
Book 9 – Epilogue
Thus spake the master programmer:
“It is time for you to leave.”
————————————————————————–
If you liked these, you may also like to read worse is better
A bit of shell redirection
Here is how we normally do shell redirection
$ ./pgm.sh args >out.txt 2>err.txt
I wanted to modify it a bit and run as follows
$ ./pgm.sh args
with the requirement that output and error should go to some filename computed inside pgm.sh based on args. One illustrative case could be when date is part of args. So you would like stdout to go to say /your/directory/pgm_out_YYYYMMDD.txt 1
The problem with standard way of redirecting N>file.txt ie, associating file descriptor N to file.txt , is that it works only for the newly forked process and not for the current process.
so
$ echo hi 1>out.txt ; echo hii will send hi to out.txt but will print hii to stdout. 2
This is where exec comes to our rescue. If we add exec 1>somefile.txt then output from rest of the script will go to somefile.txt
$./test.sh will redirect hi as well as hii to out.txt
$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
Similarly to redirect stdout as well as stderr we'll do something like this
cat test2.sh
exec 1>out.txt
exec 2>err.txt
echo out text
echo 1>&2 err text
somenoneexitent command
ls -ld /tmp
Now coming back to original point of redirecting to some file from inside the shell, let's say program computed the filename in some variable OUTFILE, we could have just done exec 1>$OUTFILE
That solves the current problem. But you may like to go through following example which achieves 'random access' of file in shell script. Example is from here
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
With comments, this code is self explanatory.
-
1 It can also be done by $ ./pgm.sh args >pgm_out`date +%Y%m%d` but idea is to generate this file name based on some logic in program itself.
2 1 in 1>out.txt is redundant but it clarifies here that we are redirecting fd 1
Sony VAIO review
A month back I bought a vaio NS25G and have been planning to write this post since then. This post is primarily notes to self and review of the same. Let's get off the mark quickly -
Post has two parts -
I. Review of hardware
II. Installing debian and things to setup
Since I am not a VAIO marketing guy, I'll start other way round -
Why you may not like to buy this laptop :
- No bluetooth : believe me, in 2009 sony sells laptop without bluetooth. Sure you can use usb stuff but …
- Screen size is 15.4 inches : if you travel a lot then this laptop may not be very handy and also 2.9kg laptop is not exactly the lightest around.
- No HDMI output.
- No separate graphics card and the likes.(and no dedicated video memory
Now , why you may like to buy it :
- This laptop is a damn good desktop. What I mean is this if your requirement is like me – mostly writing programs and trying to use it 25 out of 24 hrs, then with a big screen , extremely comfortable keyboard layout with spacious palm rest and good compute power , it makes a very good combination.
- It L2 cache is 2MB and processor/memory system bus are 800MHz. I don't play games so can't say about that but for anything else but a core 2 duo processor with 2GHz freq is good, this is more than enough.
- From my usage, I see processor mostly clocks at 1.2GHz, and memory usage ~500MB. That just reinforces previous point.
- Battery backup is good, ~2 hrs is what I get.
Just one more thing here – being Sony, it will cost you a bit than other laptops with similar configuration, but that is a call u have to make.
II. Configuring linux (to run out of box ! ) :
It came pre installed with Vista( I think home premium or some fancy name like that). Dungara booted once and created another partition of 150 GB. Debian testing is what I always install and then up(down?)grade to 'unstable' sid.
Things which worked without any problem:
- X - unsurprisingly X server had not problem with starting or resolution. After one of the upgrades X refused to start though, but 'X -configure' generated a conf file which worked pretty well.
- Audio - Audio output and external mic work fine. kernel version 2.6.29-1-686 #1 SMP and alsa version 1.0.17. This is what you get from
$ lspci -v |grep Audio 00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Con1.0.17troller (rev 03) - Video cam – just works
- Hibernate to disk and back – no problem
- Wireless - in short – just works.
$ lspci |grep -i wireless
03:13:55 04:00.0 Network controller: Atheros Communications Inc. AR928X Wireless Network Adapter (PCI-Express) (rev 01) .
I think kernel 2.6..27 onwards it works with the stock kernel source. You dont have to install ndiswrapper or things like t
hat. As a note, please say good buy gnome-network-manager and welcome wicd, it is just a gui layer but behind the scene they have fixed lot of config stuff like wpasupplient and more.
What doesn't work -
- Somehow internal mic refuses to work
External mic works fine though. Latest alsa sources did not compile cleanly on debian, so for the time being I bought external Internal mic, will try to dig into it sometime in future though.
Few more misc hints for deiban:
- Package for devnagri font- ttf-indic-fonts
- Package for flash player – flashplugin-nonfree
- Entry in sources.list for mplayer and likes – deb http://www.debian-multimedia.org sid main
- Entry in sources.list for e17 – deb http://debian.alphagemini.org/ unstable main
- Entry in sources.list for skype – http://download.skype.com/linux/repos/debian/ stable non-free
oneliner for increasing and decreasing the brightness -
[root]prashant@vaio09:12 PM$ cat bin/incbrightness.sh
#!/usr/bin/env bash
echo $[1+`cat /sys/class/backlight/acpi_video0/brightness `] >/sys/class/backlight/acpi_video0/brightness
you'll have to put this in sudo though.
and to decrease change + to – and … you get the idea, right !
A bit more, if you use enlightenment(e17) here are few more hints -
[enlightenment key bindidings]
You can use following key code and mapping
mute :
KEY="Keycode-160" ACTION="exec" PARAMS="/usr/bin/amixer -q set Master toggle"
hibernate :
KEY="Keycode-165" ACTION="exec" PARAMS="sudo /usr/sbin/hibernate-disk"
volume decrease :
KEY="Keycode-174" ACTION="exec" PARAMS="/usr/bin/amixer -q set Master 2-"
volume increase:
KEY="Keycode-176" ACTION="exec" PARAMS="/usr/bin/amixer -q set Master 2+"
increase brightness :
KEY="Keycode-212" ACTION="exec" PARAMS="sudo /root/bin/incbrightness.sh"
decrease brightness
KEY="Keycode-101" ACTION="exec" PARAMS="sudo /root/bin/decbrightness.sh"



































