<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3829104390250367241</id><updated>2011-08-02T14:07:08.767-07:00</updated><category term='postgresql'/><category term='mysql'/><category term='html5'/><category term='bugs'/><category term='nginx'/><category term='spam'/><category term='perl'/><category term='postfix'/><category term='DBI'/><category term='apxs'/><category term='rpaf'/><category term='oracle'/><category term='apache2'/><title type='text'>wuff-wuff!!!</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>52</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-304266422216914484</id><published>2010-05-18T15:17:00.000-07:00</published><updated>2010-05-18T15:22:24.676-07:00</updated><title type='text'>ukijs</title><content type='html'>я слишком долго работал с xml.&lt;br /&gt;&lt;br /&gt;после flex с его mxml и после &lt;a href="http://plumqqz.livejournal.com/95072.html"&gt;ms wpf&lt;/a&gt; и после сайтов с их html хочется сделать mxml подобную обвязку для ukijs&lt;br /&gt;&lt;br /&gt;xml головного мозга&lt;br /&gt;&lt;br /&gt;но если подумать, то это все–таки удобно. и логично. взять интерфейс на xml и компилировать его во что угодно, хоть во flash, хоть в js, хоть в cocoa&lt;br /&gt;&lt;br /&gt;тут я вспомнил, какой уродец вышел у capuccino и тихо заплакал&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-304266422216914484?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/304266422216914484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=304266422216914484' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/304266422216914484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/304266422216914484'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2010/05/ukijs.html' title='ukijs'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-3920904181172400194</id><published>2010-05-17T02:24:00.000-07:00</published><updated>2010-05-17T02:57:50.741-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><title type='text'>html5</title><content type='html'>это вам не шутки.&lt;br /&gt;&lt;br /&gt;после переверстки на выходных &lt;a href="http://deepapple.com"&gt;deepapple.com&lt;/a&gt; решил не останавливаться и потихоньку рассказать всю подноготную.&lt;br /&gt;&lt;br /&gt;начнем с простого. ютуб позволяет embed только для флеша. решил поделиться правильным решением, которое на прогрессивных браузерах (и ipad) будет показывать mp4, а на всех остальных — flash&lt;br /&gt;&lt;br /&gt;всего–то делов — добавить следующий букмарклет:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pastebin.com/s1JpnSxh"&gt;http://pastebin.com/s1JpnSxh&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-3920904181172400194?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/3920904181172400194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=3920904181172400194' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/3920904181172400194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/3920904181172400194'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2010/05/html5.html' title='html5'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-4503132067632343262</id><published>2010-03-26T03:46:00.000-07:00</published><updated>2010-03-26T03:48:17.824-07:00</updated><title type='text'>strings vs regexp</title><content type='html'>&lt;pre&gt;&lt;br /&gt;          Rate  regexp strings&lt;br /&gt;regexp  130890/s      --    -46%&lt;br /&gt;strings 240964/s     84%      --&lt;br /&gt;&lt;br /&gt;strings&lt;br /&gt;&lt;br /&gt;my ($dir_info, $file_name, $file_extension);&lt;br /&gt;if (defined $path_info) {&lt;br /&gt;    my $file_info = $path_info;&lt;br /&gt;    my $file_info_rindex = rindex $path_info, '/';&lt;br /&gt;    if ($file_info_rindex) {&lt;br /&gt;        $dir_info  = substr $path_info, 0, $file_info_rindex;&lt;br /&gt;        $file_info = substr ($path_info, $file_info_rindex + 1) || '';&lt;br /&gt;    }&lt;br /&gt;    my $file_extension_rindex = rindex $file_info, '.';&lt;br /&gt;    if ($file_extension_rindex) {&lt;br /&gt;        $file_extension = substr $file_info, $file_extension_rindex + 1;&lt;br /&gt;        $file_name = substr $file_info, 0, $file_extension_rindex;&lt;br /&gt;    } else {&lt;br /&gt;        $file_name = $file_info;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;regexp&lt;br /&gt;&lt;br /&gt;($dir_info, $file_name, $file_extension) = ($path_info =~ /^(?:(.*)\/+)?([^\/]+)\.([^\.\/]+)$/s)&lt;br /&gt;    if defined $path_info;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;удручает только количество строк кода&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-4503132067632343262?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/4503132067632343262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=4503132067632343262' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/4503132067632343262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/4503132067632343262'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2010/03/strings-vs-regexp.html' title='strings vs regexp'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-8771679483302889667</id><published>2009-12-03T03:59:00.000-08:00</published><updated>2009-12-03T04:05:20.683-08:00</updated><title type='text'>blocking read</title><content type='html'>посовещавшись с людьми в отделе, мы тут поняли, что несмотря на то, что почитать из файла в objective-c в блокирующем режиме очень сложно, программисты кварка, адоба и майкрософта таки смогли это сделать под mac os x&lt;br /&gt;&lt;br /&gt;вот уже минут 40 напротив меня возятся чуваки, пытающиеся настроить авторизацию по ключам и получить данные из git репозитория на машине под управлением windows. втроем.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-8771679483302889667?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/8771679483302889667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=8771679483302889667' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/8771679483302889667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/8771679483302889667'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2009/12/blocking-read.html' title='blocking read'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-4205442571328068042</id><published>2009-09-13T23:18:00.001-07:00</published><updated>2009-09-14T00:09:31.019-07:00</updated><title type='text'>zfs</title><content type='html'>вот уже почти год я использую zfs в качестве отказоустойчивого хранилища; на трех терабайтных дисках собран raid 5 (господа из sun называют его raidz1). в целом меня устраивает как это все работает, но хочется заострить внимание на некоторых моментах. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;кэширование&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;начиная с mac os x 10.5 для открываемых файлов было введено кэширование. причем, работает оно по умолчанию. для того, чтобы его отключить, нужно после открытия файла принудительно выставить флаг  F_GLOBAL_NOCACHE или F_NOCACHE. гугл дает достаточно информации для того, чтобы составить представление о значении этих флагов. в целом, это не проблема, до тех пор, пока пользователь не начинает пользоваться терминалом и transmission.app. в силу того, что с помощью transmission.app выкачиваются большие объемы данных, то и места в памяти под кэш отдается изрядно. в результате объем неактивной памяти растет, приложения тормозят. то же самое происходит и в терминале при копировании файлов (как минимум).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;zfs относится к этому тем местом, что кэширование содержимого файлов на zfs не работает.  для системя это в целом плохо, но для transmission — хорошо. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;snapshots&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;zfs поддерживает технологию copy-on-write. суть ее состоит в том, что в случае перезаписи содержимого файла, реальная запись производится в свободное место. поэтому старые данные остаются доступными даже после изменения файла. на этом основан механизм snapshot'ов. при создании снимка состояния диска просто указывается время, когда считать данные измененными. и такой снимок совсем не занимает места, потому как место на диске занимают только измененные по сравнению с неким состоянием snapshot данные. в целом, это такой аналог тайм машины, только без резервного копирования.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;raidz&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;это аналог raid5. то есть когда данные равномерным слоем размазаны по дискам, при этом данных — 2/3, а контрольных сумм — 1/3 от объема. поэтому емкость raidz в 2 терабайта достигается тремя дисками по терабайту. не так давно один из диско вышел из строя, для его замены оказалось достаточным поставить диск для замены, разметить его аналогично и запустить процедуру миграции данных с помощью команды zpool &lt;pool&gt; replace. аналогичных бесплатных решений для mac os x не существует.&lt;/pool&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;с raidz связана одна не самая приятная особенность. в силу того, что building blocks для zfs являются файлы, то и перестройка raidz оказалась очень длительной — около 20–ти часов.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;zpool status&lt;br /&gt; pool: ultra&lt;br /&gt;state: DEGRADED&lt;br /&gt;status: One or more devices is currently being resilvered.  The pool will&lt;br /&gt; continue to function, possibly in a degraded state.&lt;br /&gt;action: Wait for the resilver to complete.&lt;br /&gt;scrub: resilver in progress, 0.00% done, &lt;strong&gt;1665h13m&lt;/strong&gt; to go&lt;br /&gt;config:&lt;br /&gt;&lt;br /&gt; NAME               STATE     READ WRITE CKSUM&lt;br /&gt; ultra              DEGRADED     0     0     0&lt;br /&gt;   raidz1           DEGRADED     0     0     0&lt;br /&gt;     replacing      DEGRADED     0     0     0&lt;br /&gt;       disk2s3/old  UNAVAIL      0     0     0  cannot open&lt;br /&gt;       disk2s3      ONLINE       0     0     0&lt;br /&gt;     disk1s3        ONLINE       0     0     0&lt;br /&gt;     disk3s3        ONLINE       0     0     0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;частичная поддержка&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;в настоящее время zfs имеется для 10.5 и при этом часть функциональности просто не работает: очистка корзины, поддержка из disk utility и некотрые другие мелочи.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-4205442571328068042?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/4205442571328068042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=4205442571328068042' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/4205442571328068042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/4205442571328068042'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2009/09/zfs.html' title='zfs'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-1985385032740710446</id><published>2009-08-14T01:21:00.000-07:00</published><updated>2009-08-14T02:15:02.088-07:00</updated><title type='text'>cafeteria refactoring</title><content type='html'>&lt;h3&gt;1. выручка&lt;/h3&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;в РИА «Новости» есть столовая. не буду придираться к качеству питания, меня устраивает, но не фонтан, конечно же. сотрудники питаются со скидкой 15%; чеки у сотрудников и людей со стороны разные.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;так как во время еды часто идет обсуждение всякой всячины, я однажды предложил обсудить суммы на чеках. как оказалось, на чеках есть сведения, достаточные для получения средней суммы&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;проанализировав чеки, оказалось, что у них есть два счетчика — сквозной для всех касс номер чека и уникальная для кассы сумма, на которую отобедали люди со скидкой. получилось, что в среднем за сутки столовая выдает 1300 чеков. если учесть, что не все люди ходят обедать (хотя, большинство все–таки ходит), некоторые ходят завтракать и вечером пить кофе, то, наверное, можно получить около тысячи чеков, которые входят в «обеденную» выборку. с учетом средней суммы чека в 100 рублей, выходит оборот в сто тысяч рублей в день.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;вечернюю выборку чеков по всем кассам мы не делали.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;2. рефакторинг&lt;/h3&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;рефакторинг кухни я не рассматриваю, так как знаю про кухню понаслышке. например, возьмем очереди в столовой. они возникают на раздаче, где люди заказывают еду. заказ — положить на тарелку — отдать тарелку. вполне можно организовать на каждое блюдо одного человека, который просто следит за тем чтобы каждого блюда было достаточно для того, чтобы люди подошли и просто взяли тарелку (спасибо, tinsdale). очередь уменьшается, но при этом растет очередь на кассе. дажен разгрузив кассу, придется найти дополнительное место в столовой и так далее. то есть оказывается, что текущий подход оказывается выигрышным из–за того, что ожидая везде понемногу, человеку не приходится стоять перед занятыми столами.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;3. маржа&lt;/h3&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;столовая находится в здании с пропускным режимом. увеличение прибыли возможно при выполнении любого из двух условий: увеличение суммы чека или увеличение количества человек, которое прошли через столовую. второй вариант вследствие описанных условий сложен.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;что же делать с суммой чека? увеличить стоимость основных блюд столовая (скорее всего) не может, поэтому за последние месяцы в ассортименте появилась паста и блины, мороженое и молочные коктейли. если даже это влияет, то не очень сильно, потому как блины берут не вместе с остальными блюдами, а вместо основного блюда. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;4. все просто&lt;/h3&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;потребности пользователей и получение прибыли редко работают в одной и той же плоскости. поэтому любой рефакторинг работающего механизма должен подвергаться глубоком осмыслению и всегда нужно понимать — у рефакторинга есть как минимум две плохие стороны:&lt;/div&gt;&lt;div&gt;а) отрицательный экономический эффект, который не всегда сможет быть покрыт доходами даже в дальней перспективе;&lt;/div&gt;&lt;div&gt;б) постепенное расширение узких мест может оказаться фатальным для какого–то узкого места, на котором зиждется вся система.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-1985385032740710446?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/1985385032740710446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=1985385032740710446' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/1985385032740710446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/1985385032740710446'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2009/08/cafeteria-refactoring.html' title='cafeteria refactoring'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-9092698874142154775</id><published>2009-08-09T12:35:00.000-07:00</published><updated>2009-08-09T12:40:21.204-07:00</updated><title type='text'>HTTPOnly</title><content type='html'>это будет добрый пост.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;почти без мата.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;волшебный параметр для кук (cookies), который управляет отдачей их клиенту. например, скрипту. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;документация: http://www.owasp.org/index.php/HTTPOnly&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;судя по поддержке, все нормальные/современные браузеры поддерживают. а вот чуваки из оперы сосут хуй. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;вообще, исходя из поддержки всякого стаффа, нужно оставить только два движка — вебкит и gecko (и то, последний — только до тех пор, пока все не перетянутся на хром/сафари). потому что IE любой версии все хуево рендерит и вообще, для них приходится часто другие страницы писать, а опера — просто говно браузер.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-9092698874142154775?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/9092698874142154775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=9092698874142154775' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/9092698874142154775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/9092698874142154775'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2009/08/httponly.html' title='HTTPOnly'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-4362945707945556790</id><published>2009-08-05T06:22:00.000-07:00</published><updated>2009-08-09T12:30:06.269-07:00</updated><title type='text'>colocation support</title><content type='html'>&lt;h3&gt;хостинг на три буквы, первая — m&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;я: нужно перезагрузить сервер&lt;br /&gt;они: готово&lt;br /&gt;я: что–то нет ответа. а не могли бы вы подключить kvm?&lt;br /&gt;они: готово, логин, пароль&lt;br /&gt;я: спасибо, kvm работает, но, к сожалению, сервер не мой&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;первый их сбой, кстати. все остальное — просто замечательно; лучший хостер  из всех на моей памяти&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;хостинг на 6 букв, первая — m&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;сначала подвисала сетевуха с сообщением TX is hung и они не могли разобраться в проблеме&lt;/p&gt;&lt;br /&gt;&lt;p&gt;после перетыкания кабеля стало работать&lt;/p&gt;&lt;br /&gt;&lt;p&gt;обнаружив, что соединение half duplex вместо full duplex, предположил, что проблема у них в кабельной системе. ответа жду уже третью неделю&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;хостинг на 10 букв, первая — m&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;перевозили без предупреждения ночью сервер в другой датацентр&lt;/p&gt;&lt;br /&gt;&lt;p&gt;когда заканчиваются деньги, отключают dns. то, что он у некоторых клиентов в глубинке восстанавливается неделями, их не ебет&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;хостинг на 9 букв, первая буква — p&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;пиздец, никому не пожелаю.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;служба поддержки способна разобраться с проблемами только в рабочее время по будням. в выходные нет даже дежурного админа.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;при установке сервера выдали мне чужие ip адреса.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;забыли оформить пропуск на внос сервера.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;при расставании выдали не мои салазки.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;на площадке сервер перед выносом всегда выключается по питанию.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-4362945707945556790?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/4362945707945556790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=4362945707945556790' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/4362945707945556790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/4362945707945556790'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2009/08/colocation-support.html' title='colocation support'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-6371025730865513851</id><published>2009-07-24T01:10:00.000-07:00</published><updated>2009-08-09T12:32:05.929-07:00</updated><title type='text'>svn</title><content type='html'>svn мне напоминает анекдот:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;«&lt;/div&gt;&lt;div&gt;– я ж тебе говорил, что это говно, а ты — засахарилось, засахарилось.&lt;/div&gt;&lt;div&gt;»&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;возьмем, например связывание директории с другим репозиторием через svn:externals&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;во первых, это делается жутко неочевидным способом. &lt;/div&gt;&lt;div&gt;во вторых, в svnbook нет явного примера, как это сделать.&lt;/div&gt;&lt;div&gt;в третьих, для того, чтобы связать директорию внутри дерева файлов, связывать ее нужно в корне репозитория. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;памятка:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'lucida grande', geneva, helvetica, arial, sans-serif;"&gt;&lt;pre&gt;$ cat &gt;svn_ext_val.txt&lt;br /&gt;dir_of_repo_one http://svn.my.com/path/to/repo_one&lt;br /&gt;dir/of/repo/two http://svn.my.com/path/to/dir1/dir2/repo_two&lt;/pre&gt;&lt;pre&gt;svn propset svn:externals . -F svn_ext_val.txt&lt;/pre&gt;&lt;pre&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;div&gt;ЕЩЕ: все оказалось еще интереснее. оказывается, эти проперти нужно закоммитить, а у меня была куча файлов, которые коммитить не хотелось. определенно, разработчики svn какие–то хуеголовые&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ЕЩЕЩЕ: они не умеют показать файлы, которые будут обновлены без реального update. это уже даже не пиздец&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-6371025730865513851?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/6371025730865513851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=6371025730865513851' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/6371025730865513851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/6371025730865513851'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2009/07/svn.html' title='svn'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-4819648682006659389</id><published>2009-07-13T06:47:00.000-07:00</published><updated>2009-07-13T07:50:23.041-07:00</updated><title type='text'>SD vs BluRay</title><content type='html'>&lt;p&gt;мне сразу показалось, что победа BluRay над HD DVD была пирровой. размышляя пару дней назад с женой над будущим BluRay пришла в голову идея сделать небольшую табличку.&lt;/p&gt;&lt;br /&gt;&lt;table class="data"&gt;&lt;tbody&gt;&lt;/tbody&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;тип&lt;/th&gt;&lt;th&gt;SD/microSD&lt;/th&gt;&lt;th&gt;DVD&lt;/th&gt;&lt;th&gt;BluRay&lt;/th&gt;&lt;th&gt;HDD&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;/tbody&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;размер&lt;/td&gt;&lt;td&gt;32 × 24 mm&lt;br /&gt;11 x 15 mm&lt;/td&gt;&lt;td colspan="2" style="white-space: nowrap;"&gt;120  x 120 mm&lt;/td&gt;&lt;td style="white-space: nowrap;"&gt;101.6 х 26.1 х 147 mm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;емкость*&lt;/td&gt;&lt;td&gt;8GB&lt;/td&gt;&lt;td&gt;4.38 GB&lt;/td&gt;&lt;td&gt;25GB&lt;/td&gt;&lt;td&gt;1000GB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;скорость доступа&lt;/td&gt;&lt;td&gt;20 MB/s at 150x&lt;/td&gt;&lt;td&gt;10 MB/s&lt;/td&gt;&lt;td&gt;18 MB/s at 4x&lt;/td&gt;&lt;td&gt;30 MB/s (USB 2.0)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;стоимость оборудования, руб.&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;1000&lt;/td&gt;&lt;td&gt;9000&lt;/td&gt;&lt;td&gt;1000&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;цена носителя за гигабайт&lt;/td&gt;&lt;td&gt;71&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;цена за 1000 гигабайт**&lt;/td&gt;&lt;td&gt;125 / 72500&lt;/td&gt;&lt;td&gt;220 / 7850&lt;/td&gt;&lt;td&gt;40 / 30200&lt;/td&gt;&lt;td&gt;1 / 4200&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;tbody&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;* за номинальную емкость SD взята емкость, которая оправдана экономически, то есть лучше по соотношению емкость/стоимость&lt;br /&gt;&lt;br /&gt;** включая стоимость оборудования, коим является кардридер, дисковод и коробка для hdd; цифра в числителе дроби — количество накопителей.&lt;br /&gt;&lt;br /&gt;мораль всего этого такова: &lt;ol&gt;&lt;li&gt;для домашнего консервирования дешевле и удобнее купить внешний жесткий диск;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;для переноса небольшого количества данных стоит использовать SD/microSD; для большого количества данных — внешний hdd&lt;/li&gt;&lt;br /&gt;&lt;li&gt;диски BluRay по большому счету нафиг никому не нужны в дальней перспективе — SD очень активно дешевеют, чего за BluRay дисками не наблюдается. и применения им не видно, потому что для переноски данных они не годятся из–за высокой стоимости оборудования, для консервирования — из–за высокой стоимости;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;DVD — достояние истории. на них по прежнему можно хранить данные, но ощутимо проще (но не дешевле) купить SD на 8–16 GB и забыть про стопки DVD как про страшный сон;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;не стоит рассматривать SD как панацею — стоимость за гигабайт все еще слишком высока.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-4819648682006659389?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/4819648682006659389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=4819648682006659389' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/4819648682006659389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/4819648682006659389'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2009/07/sd-vs-bluray.html' title='SD vs BluRay'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-1054994642372855422</id><published>2009-06-22T22:45:00.000-07:00</published><updated>2009-06-23T02:02:37.275-07:00</updated><title type='text'>opensource</title><content type='html'>вообще, opensource забавная штука. вот я выкладываю свой код и получаю на него вполне себе &lt;a href="https://rt.cpan.org/Ticket/Display.html?id=47191" &gt;feedback&lt;/a&gt;. opensource — это как социальные сети для разработчиков. &lt;br /&gt;&lt;br /&gt;в большинстве своем opensource, конечно, на редкость уебищно — нет ни нормального интерфейса, ни нормального кода, но некоторые проекты, в которых есть некий заказчик и организатор или упёртый эниузиаст, выходят отличными. например, ничего лучше, чем evolution, для почты еще не придумали. или другой пример, я использую eclipse colorer plugin для подсветки синтаксиса многих файлов. оба — и eclipse и colorer — примеры качественного opensource.&lt;br /&gt;&lt;br /&gt;и мне самому было бы тяжело без открытого кода. как бы я тогда поправил баги в DBD::Oracle, если бы не было исходников?&lt;br /&gt;&lt;br /&gt;вообще все это я хотел написать после того, как пересоберу &lt;a href="http://colorer.sf.net/"&gt;colorer&lt;/a&gt; под snow leopard. но не тут то было — colorer пересобрался, но при попытке открытия файла падает.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ХАХАХА: мы с создателем colorer нашли проблему и я таки собрал новую версию.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-1054994642372855422?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/1054994642372855422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=1054994642372855422' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/1054994642372855422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/1054994642372855422'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2009/06/opensource.html' title='opensource'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-2813875328942255312</id><published>2009-06-04T11:05:00.000-07:00</published><updated>2009-06-04T22:18:40.646-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>miraculous oracle</title><content type='html'>и снова разработчики оракла постарались на славу. то есть я понимаю, как они дошли до такого, но не понимаю почему.&lt;br /&gt;&lt;br /&gt;допустим, в таблице есть поле VARCHAR2. максимальный размер поля такого типа — 4000 байт. теперь начинается fun. допустим, мы создаем поле типа VARCHAR2(100 CHAR). в реальности же будет создано поле размером x00 байт (где x — максимальное количество байт, которое потребуется для представления любого символа из UCS2 в UTF8). так, чтобы 100 любых символов из unicode поместились. хотя, возможно, внутри оно хранится в UCS2 и поэтому выделяется всего 400 байт. &lt;br /&gt;&lt;br /&gt;отойдем от технических деталей и попробуем вставить 100 символов. у нас все получится, несмотря на кодировку. то есть вставится и 100 ASCII и 100 Kana. &lt;br /&gt;&lt;br /&gt;теперь же попробуем выделить 4000 CHAR для этого поля. и что вы думаете? в такое поле может быть вставлено будет только то количество символов, которое в utf8 помещается в это количество байт. на другие значения будет выдано сообщение об ошибке.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;совсем забыл&lt;/b&gt;: но это еще не все. для обхождения ограничения в 4000 байт нужно использовать CLOB. но просто так нельзя записать в CLOB более 4000 байт (меньше — можно). для записи нужно отказаться от &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;prepare ($$sql)&lt;br /&gt;execute (@params)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;и начать использовать&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;prepare ($sql)&lt;br /&gt;foreach my $params (@params) {&lt;br /&gt;    if (sql_type_of ($param) eq 'CLOB') {&lt;br /&gt;        bind_param ($i, $param, {ora_type =&gt; 112})&lt;br /&gt;    } else {&lt;br /&gt;        bind_param ($i, $param)&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;execute&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;там, конечно, условия посложнее, но общее представление показывают&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-2813875328942255312?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/2813875328942255312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=2813875328942255312' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/2813875328942255312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/2813875328942255312'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2009/06/miraculous-oracle.html' title='miraculous oracle'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-907838511150833386</id><published>2009-06-04T01:51:00.001-07:00</published><updated>2009-06-04T01:52:45.978-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>DBD::Oracle bugs</title><content type='html'>второй критический баг в DBD::Oracle:&lt;br /&gt;&lt;br /&gt;https://rt.cpan.org/Ticket/Display.html?id=46661&lt;br /&gt;&lt;br /&gt;p.s: первый:&lt;br /&gt;&lt;br /&gt;https://rt.cpan.org/Ticket/Display.html?id=44788&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-907838511150833386?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/907838511150833386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=907838511150833386' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/907838511150833386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/907838511150833386'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2009/06/oracle-httpsrt.html' title='DBD::Oracle bugs'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-308423446639491458</id><published>2009-05-19T07:09:00.000-07:00</published><updated>2009-05-19T07:36:12.729-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>еще немного в копилку о базах</title><content type='html'>как обычно, сегодня одна какашка в сторону oracle и луч поноса в сторону mysql.&lt;br /&gt;&lt;br /&gt;oracle, как сурьезный движок баз данных, конечно же не имеет неявных секвенсоров (хотя, может и имеет, но я не знаю способа привязать секвенсор к полю кроме как через триггер). поэтому функция $dbh-&gt;last_insert_id вообще не имеет смысла. чтобы достать это самое значение для primary key, сгенерированное из некоего секвенсора, я должен детектить секвенсор и брать из него currval. жутковато, но работает.&lt;br /&gt;&lt;br /&gt;ну а поддержку primary_key_info писал мудак. потому как в оракле нужно в качестве схемы скормить имя пользователя, что выливается в специальный код для поддержки оракла. нужно будет отправить им патч.&lt;br /&gt;&lt;br /&gt;вообще, oracle постепенно у меня в голове превращается в долбанутую, но вполне работоспособную систему.&lt;br /&gt;&lt;br /&gt;теперь к mysql&lt;br /&gt;&lt;br /&gt;BEWARE 5.1!&lt;br /&gt;&lt;br /&gt;в какой–то момент mysql умудрился потерять администраторские права для рута. и это вылилось в поднятие еще одного mysql и переливание данных, создание заново всех пользователей. вообще как это можно сделать что–то такое, чтобы их потерять?&lt;br /&gt;&lt;br /&gt;короче, я не знаю, как там будет дальше с mysql, но если он исчезнет, то я не расстроюсь. ну его нахуй в таком–то виде.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-308423446639491458?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/308423446639491458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=308423446639491458' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/308423446639491458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/308423446639491458'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2009/05/blog-post.html' title='еще немного в копилку о базах'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-245778405048497538</id><published>2009-05-13T16:35:00.000-07:00</published><updated>2009-05-13T16:41:04.571-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>mymyки</title><content type='html'>все–таки, mysql — это даже не пиздец.&lt;br /&gt;&lt;br /&gt;это пиздец–пиздец–пиздец.&lt;br /&gt;&lt;br /&gt;команда mysqlcheck (5.1.31a) с опцией оптимизации таблиц убивает несколько полей из системных таблиц mysql. что порождает веcелые ошибки типа:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;090514  3:21:50 [ERROR] Column count of mysql.db is wrong. Expected 22, found 20. The table is probably corrupted&lt;br /&gt;090514  3:21:50 [ERROR] mysql.user has no `Event_priv` column at position 29&lt;br /&gt;090514  3:21:50 [ERROR] Event Scheduler: An error occurred when initializing system tables. Disabling the Event Scheduler.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;что перерастает в черепашьи скорости работы с базой.&lt;br /&gt;&lt;br /&gt;вот мне на память:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;alter table db add `Event_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N';&lt;br /&gt;alter table db add `Trigger_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N';&lt;br /&gt;alter table user add `Event_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N' after Create_user_priv;&lt;br /&gt;alter table user add `Trigger_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N' after Event_priv;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-245778405048497538?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/245778405048497538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=245778405048497538' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/245778405048497538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/245778405048497538'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2009/05/mymy.html' title='mymyки'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-8534788463033744172</id><published>2009-05-13T11:48:00.000-07:00</published><updated>2009-05-13T13:00:12.270-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='DBI'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>oramac</title><content type='html'>вообще, история оракла на mac os x напоминает желанного, но нелюбимого ребенка. видимо когда–то, когда вышел mac os x, кто–то из менеджеров оракла сказал:&lt;br /&gt;&lt;br /&gt;— а чё ваще! это же юникс, вон на нем уже кластера собирают, jre есть, давайте забацаем оракл под мак!&lt;br /&gt;&lt;br /&gt;и программисты бацают оракл под мак PPC. &lt;br /&gt;&lt;br /&gt;причем, сама база выпускается не в production, а так, для игр: &lt;br /&gt;&lt;br /&gt;«This document accompanies Oracle9i Developer release 2 (9.2.0.1.0) for Mac &lt;br /&gt;OS X. Its contents supplement or supersede information in the Oracle9i &lt;br /&gt;documentation library. &lt;br /&gt;&lt;br /&gt;This is a developer release. It is not intended to be used in a production &lt;br /&gt;environment. You should try this software only in a test environment.»&lt;br /&gt;&lt;br /&gt;выпустив oracle 10g под мак, про саму базу надолго забыли. только один раз обновили клиента. и вот, совсем недавно, появилось обновление самой базы: ее наконец умудрились собрать под x86_64.&lt;br /&gt;&lt;br /&gt;естественно, люди из оракла живут в своей собственной вселенной. они ничего не знают ни про universal binary, ни про launchd, ни про пользовательский интерфейс mac os x. &lt;br /&gt;&lt;br /&gt;ничего они не знают также и про то, что консольный клиент их базы мог бы поддерживать историю команд и про то, что perl driver for oracle тупо не собирается на маке без особого шаманства.&lt;br /&gt;&lt;br /&gt;естественно, DBD::Oracle не смог поставиться сам. после небольшого шаманства с патчами таки его удалось собрать, но работать он от этого не стал — в rian.ru используются named sql placeholders, а они–то как раз и не завелись. несколько утренних упражнений с драйвером рассказали мне о том, что на линуксе bool это нифига не bool а char и, даже, возможно, int. а на маке совсем не так. ну ладно, патч отправил, у меня локально все заработало и даже в DBD::Oracle 1.23 включили мои изменения.&lt;br /&gt;&lt;br /&gt;но вот какой вопрос не дает мне покоя: неужели никто до меня не использовал named placeholders в oracle через perl на mac os x? вообще, хоть кто–то работал с ораклом через perl?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-8534788463033744172?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/8534788463033744172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=8534788463033744172' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/8534788463033744172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/8534788463033744172'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2009/05/oramac.html' title='oramac'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-4764576002651818286</id><published>2009-05-12T07:05:00.000-07:00</published><updated>2009-05-12T07:09:13.751-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rpaf'/><category scheme='http://www.blogger.com/atom/ns#' term='nginx'/><category scheme='http://www.blogger.com/atom/ns#' term='apache2'/><category scheme='http://www.blogger.com/atom/ns#' term='apxs'/><title type='text'>nginx + rpaf</title><content type='html'>используя nginx в качестве frontend и apache2 в качестве backend, обнаружил, что у кучи говноскриптов на php отвалился определитель клиентского ip. mod_rpaf меня выручил, но собрать universal binary оказало не так просто.&lt;br /&gt;&lt;br /&gt;вот solution — скачать, распаковать, запустить:&lt;br /&gt;&lt;br /&gt;sudo apxs -Wl,-arch -Wl,i386 -Wl,-arch -Wl,ppc -Wc,-arch -Wc,ppc -Wc,-arch -Wc,i386 -Wl,-arch -Wl,x86_64 -Wl,-arch -Wl,ppc64 -Wc,-arch -Wc,ppc64 -Wc,-arch -Wc,x86_64 -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-4764576002651818286?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/4764576002651818286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=4764576002651818286' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/4764576002651818286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/4764576002651818286'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2009/05/nginx-rpaf.html' title='nginx + rpaf'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-29803139637264945</id><published>2009-05-12T00:47:00.001-07:00</published><updated>2009-05-12T07:05:27.270-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>oracle environment variables</title><content type='html'>вот никак не мог правильно подобрать выражение, чтобы правильно описать мою возню с oracle. накатило и я все понял; вот оно:&lt;br /&gt;&lt;br /&gt;«чтобы спереди погладить, нужно сзади полизать»&lt;br /&gt;&lt;br /&gt;пример:&lt;br /&gt;&lt;br /&gt;установка переменной:&lt;br /&gt;&lt;br /&gt;alter session set nls_date_format = 'dd/mm/yyyy hh24:mi:ss';&lt;br /&gt;&lt;br /&gt;получение значения переменной: &lt;br /&gt;&lt;br /&gt;select parameter, value from v$nls_parameters where parameter = 'NLS_DATE_FORMAT';&lt;br /&gt;&lt;br /&gt;касательно установки oracle server на mac os x:&lt;br /&gt;&lt;br /&gt;вообще, оракл сервер весь из себя прикольный–прикольный. проще даже сказать, ебанутый на всю голову. вот, например, после установки, обнаруживается, что там внутри свой собственный jre и собственный perl 5.8.3 и еще много всего. зато старт–стоп скриптов отродясь не водится. «читайте пару лет документацию и вам откроется тайное знание написания старт–стоп скриптов». до кучи нужно сказать, что оракл сервер смог поставиться, но не смог запуститься.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-29803139637264945?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/29803139637264945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=29803139637264945' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/29803139637264945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/29803139637264945'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2009/05/oracle-environment-variables.html' title='oracle environment variables'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-6362125913621953892</id><published>2009-04-09T12:41:00.000-07:00</published><updated>2009-04-09T14:06:43.795-07:00</updated><title type='text'>mac os x limits</title><content type='html'>немного посмеявшись над ребятами, которые пытались определить, сколько же «приложений» выдержит мак, мне самому пришлось столкнуться с некоторой ограниченностью системных лимитов.&lt;br /&gt;&lt;br /&gt;оказывается, что в mac os x 10.5 по умолчанию одним пользователем можно открыть не более 266 приложений. при этом часть из них — системные сервисы, поэтому реально запущеных приложений будет меньше. если такого количества не хватает, то можно увеличить лимит и об этом пойдет речь ниже.&lt;br /&gt;&lt;br /&gt;но, к сожалению, эти лимиты тоже не бесконечны и довольно невелики. это значит то, что если вам вдруг понадобится производительный сервер, то mac os x вам этого просто не позволит сделать, несмотря на всю юникс начинку внутри.&lt;br /&gt;&lt;br /&gt;как известно, у макоси есть две версии, клиентская и серверная. сейчас я буду говорить за первую, потому как второй в доступности нет.&lt;br /&gt;&lt;br /&gt;как показывает команда «sysctl -a | grep maxproc», операционная система ограничила себя до 532 процессов в целом и не более 266 на одного пользователя. не очень–то пожируешь. ну что ж, на то нам дадены руки.&lt;br /&gt;&lt;br /&gt;sysctl -w kern.maxproc=4096&lt;br /&gt;sysctl: kern.maxproc: Invalid argument&lt;br /&gt;&lt;br /&gt;опа, а это что такое? &lt;br /&gt;&lt;br /&gt;это оказалось, что в ядре операционной системы записан жесткий лимит в 2500 соединений. превысить его можно только после пересборки ядра. то есть запустить под mac os x client более 2500 процессов невозможно. &lt;br /&gt;&lt;br /&gt;в server 10.4.11 тоже есть подобный лимит, только он чуть ниже — 2068&lt;br /&gt;&lt;br /&gt;для увеличения лимита можно добавить информацию в два файла:&lt;br /&gt;&lt;br /&gt;/etc/sysctl.conf и /etc/launchd.conf&lt;br /&gt;&lt;br /&gt;первый управляет ограничениями в ядре, а второй — в запускаемых приложениях операционной системы.&lt;br /&gt;&lt;br /&gt;/etc/sysctl.conf&lt;br /&gt;kern.maxprocperuid=1024&lt;br /&gt;kern.maxproc=2048&lt;br /&gt;&lt;br /&gt;/etc/launchd.conf&lt;br /&gt;limit maxproc 512 1024&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-6362125913621953892?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/6362125913621953892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=6362125913621953892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/6362125913621953892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/6362125913621953892'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2009/04/mac-os-x-limits.html' title='mac os x limits'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-904381990705551783</id><published>2009-03-25T09:28:00.000-07:00</published><updated>2009-05-13T07:04:18.018-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spam'/><category scheme='http://www.blogger.com/atom/ns#' term='postfix'/><title type='text'>postfix: no spam without antispam</title><content type='html'>борьба со спамом без антиспама.&lt;br /&gt;&lt;br /&gt;примерно с месяц назад на своей работе я начал переносить почту со старого и неуправляемого CommunigatePro на более стандартный (в рамках почтового сервера под управлением Mac OS X) postfix. и после переноса аккаунтов обнаружил, что /var/log/mail.log растет не по дням, а по часам, причем на пару сотен мегабайт в час. к концу суток у меня был шестигигабайтный лог файл и около гигабайта новых писем. я довольно сильно испугался, что так будет и дальше.&lt;br /&gt;&lt;br /&gt;сервер по умолчанию был настроен на прием корреспонденции только для известных адресов, других проверок не делалось.&lt;br /&gt;&lt;br /&gt;это вынудило меня начать разбираться со встроенными механизмами фильтрации спама в postfix и возможности применить особенности протокола smtp для отсеивания всей этой корреспонденции. можно было бы попробовать поставить spamassassin или другие решения с открытыми исходниками и натюнинговать их, но гигабайт принятой почты меня совсем не радовал. платные варианты сразу же были исключены, так как спам в основном приходит на русском языке, а kaspersky antispam и спамоборона не имеют сборок под Mac OS X.&lt;br /&gt;&lt;br /&gt;немного теории&lt;br /&gt;&lt;br /&gt;любая машина, подключенная к интернет, может получить mx dns запись для любого из доменов и отправить туда почту. при этом, можно отправить почту не напрямую, а через специальный relay сервер, который уже сам займется доставкой почты до получателя. обычно relay сервера требуют авторизации отправителя для дальнейшей пересылки почты. те, которые не требуют авторизации, называются open relay. проблема, которая связана с ними — это то, что любая машина сможет послать письмо, которое будет выглядеть, как письмо, полученное от этого relay.&lt;br /&gt;&lt;br /&gt;в итоге доставка почты выглядит примерно так:&lt;br /&gt;&lt;br /&gt;машина пользователя =&gt; relay =&gt; … =&gt; relay =&gt; сервер назначения&lt;br /&gt;&lt;br /&gt;отсылка почты напрямую используется сейчас не очень часто и, в основном, всякими сервисами и гиками, которые сподобились настроить local delivery. в том случае, когда пользователь отправляет почту через почтовую программу с указанием mail сервера и данных аутентификации или через web–интерфейс, то почта уходит напрямую с сервера почтового сервиса. при этом отсылка почты напрямую в большинстве случаев сразу же дает знать о себе: скорее всего у такого хоста не будет reverse dns записи или будет что–то выделяющееся, например ppp85-140-10-222.pppoe.mtu-net.ru; в случае серьезного сервиса его владельцы обычно заботятся о reverse dns записи.&lt;br /&gt;&lt;br /&gt;reverse dns — это когда по ip адресу можно получить имя связанного с ним домена.&lt;br /&gt;&lt;br /&gt;тут есть одна тонкость: спамер может зарегистрировать кучу доменов, купить кучу ip адресов, но ему придется все время покупать новые домены и ip адреса (потому что его будут блокировать — адрес–то известен), что не слишком выгодно. поэтому зачастую спамеры используют зараженные вирусами машины, чтобы ответственность легла на пользователя такой машины. большинство таких зараженных машин находится дома у пользователей, а самый распространненый тип домашнего подключения — это доступ с динамическим ip адресом.&lt;br /&gt;&lt;br /&gt;поэтому, отказывая в получении почты с динамических адресов, мы ограничиваем неправильно настроенные интернет–сервисы, гиков с local delivery и сети машин домашних пользователей, зараженные вирусами и рассылающие спам.&lt;br /&gt;&lt;br /&gt;для отсеивания спама также иногда применяется технология DNSBL, которая заключается в том, что система с DNSBL получает отчеты об ip адресах машин, которые рассылают спам и делают списки этих адресов доступными всем или подписчикам. сама система по задумке неплохая, но имеет порядочное количество нареканий. например, в некоторых системах DNSBL заблокированы целые подсети адресов и для администратора почтового сервера нет никакой возможности исключить из блокировки свою машину. или кто–то получил пароль для авторизованного аккаунта и начал рассылать с этого аккаунта спам. ip адрес попал в DNSBL и нужно тратить время, чтобы эта ошибка пользователя не отключила полностью отсылку почты с этого сервера. поэтому я не использую эту технологию и другим не рекомендую, так как моя практикапоказывает, что вреда от нее больше, чем пользы.&lt;br /&gt;&lt;br /&gt;после отсеивания всех неугодных нам машин, мы беремся за то, как спамеры общаются с нашим почтовым сервером по SMTP протоколу. большинство доковылявших спам–ботов отваливается на простой проверке — в команде HELO должно быть полное доменное имя отправителя. дальше вставляем несколько простых проверок — на наличие указанного адресата, на количество адресатов в минуту, почту для которых мы готовы принять. дальше просто принимаем почту и надеемся, что тупых бот сетей больше, чем разумных.&lt;br /&gt;&lt;br /&gt;практика&lt;br /&gt;&lt;br /&gt;я сразу же принялся за анализ логов. сразу же стало видно, что есть достаточно большое количество спама исходит от машин, которые тупо перебирают адреса по словарю на домене. postfix не предоставляет встроенных инструментов для отрезания таких деятелей, посему эта проблема была отложена в долгий ящик, но к сведению были приняты некоторые настройки, которые ограничивают количество соединений, писем и получателей в одном письме.&lt;br /&gt;&lt;br /&gt;различные «строгие» опции:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;strict_rfc821_envelopes = yes&lt;br /&gt;disable_vrfy_command = yes&lt;br /&gt;smtpd_delay_reject = yes&lt;br /&gt;smtpd_helo_required = yes&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;лимитирование слишком быстрых:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;anvil_rate_time_unit = 60s&lt;br /&gt;&lt;br /&gt;smtpd_client_connection_count_limit = 5&lt;br /&gt;smtpd_client_connection_rate_limit = 6&lt;br /&gt;smtpd_client_message_rate_limit = 6&lt;br /&gt;smtpd_client_recipient_rate_limit = 10&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;вторая проблема, которая стала сразу же видна — это соединения с динамических адресов различных интернет провайдеров (через dialup, adsl или подобные соединения) или тех адресов, которые вообще не имеют reverse dns записи. копания в поисках способа определения этих самых динамических пользователей привели меня к статье http://www.yekt.info/postfix_antyspam.html. там я и почерпнул необходимую информацию, но, к сожалению, действия, приводимые там мне не очень понравились, поэтому я расскажу, что сделал я, а те, кому интересно, смогут сравнить и сделать свои собственные выводы. &lt;br /&gt;&lt;br /&gt;отклоняем желание клиента прогнать команды «по–быстрому»; разрешаем тех, кто ввел логин/пароль; разрешаем соединения из доверенных сетей; отклоняем тех у кого не совпадают сочетания ip адрес 1=&gt;домен, домен=&gt;ip адрес 2 и ip адрес 1 == ip адрес 2; проверяем клиента на отсутствие в известных dialup и dsl сетях.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;smtpd_client_restrictions =&lt;br /&gt;    reject_unauth_pipelining,&lt;br /&gt;    permit_sasl_authenticated,&lt;br /&gt;    permit_mynetworks,&lt;br /&gt;    reject_unknown_client_hostname,&lt;br /&gt;    check_client_access regexp:/etc/postfix/dul_checks,&lt;br /&gt;    permit&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ниже добавились:&lt;br /&gt;проверка на известные проблемные helo, отказ от обслуживания клиентам, доменное имя которых вызывает подозрения&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;smtpd_helo_restrictions =&lt;br /&gt;    permit_mynetworks, &lt;br /&gt;    permit_sasl_authenticated,&lt;br /&gt;    check_helo_access regexp:/etc/postfix/helo_regexp,&lt;br /&gt;    check_helo_access regexp:/etc/postfix/dul_checks,&lt;br /&gt;    reject_invalid_helo_hostname,&lt;br /&gt;    reject_non_fqdn_helo_hostname,&lt;br /&gt;    reject_unknown_helo_hostname,&lt;br /&gt;    permit&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;две оставшиеся проверки — на наличие домена у отправителя письма и правильное указание получателя.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;smtpd_sender_restrictions =&lt;br /&gt;    permit_sasl_authenticated,&lt;br /&gt;    permit_mynetworks,&lt;br /&gt;    reject_non_fqdn_sender,&lt;br /&gt;    reject_unknown_sender_domain,&lt;br /&gt;    permit&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;smtpd_recipient_restrictions =&lt;br /&gt;    reject_unauth_pipelining,&lt;br /&gt;    permit_mynetworks,&lt;br /&gt;    permit_sasl_authenticated,&lt;br /&gt;    reject_unauth_destination,&lt;br /&gt;    reject_invalid_hostname,&lt;br /&gt;    reject_non_fqdn_recipient,&lt;br /&gt;    reject_unknown_recipient_domain,&lt;br /&gt;    permit&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;результат&lt;br /&gt;&lt;br /&gt;оказался хорош. например, за 24 марта было 433 158 попыток соединения с почтовым сервером, чтобы отправить почту и почта была доставлена лишь в 1 068 случаях.&lt;br /&gt;&lt;br /&gt;как говорят пользователи, им кажется, что вся почта доходит, полезная почта не теряется. вместо гигабайта в день принимается около 4 мегабайт почты.&lt;br /&gt;&lt;br /&gt;в следующей заметке я расскажу, как сделать так, чтобы имеющаяся система не проседала со временем.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-904381990705551783?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/904381990705551783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=904381990705551783' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/904381990705551783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/904381990705551783'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2009/03/postfix-no-spam-without-antispam.html' title='postfix: no spam without antispam'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-6625125552953177384</id><published>2009-03-20T12:09:00.000-07:00</published><updated>2009-03-20T12:15:16.377-07:00</updated><title type='text'>broken pixel</title><content type='html'>&lt;img src="http://the-singlers.us/images/smashedapple.jpg" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-6625125552953177384?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/6625125552953177384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=6625125552953177384' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/6625125552953177384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/6625125552953177384'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2009/03/broken-pixel.html' title='broken pixel'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-5795181287160649259</id><published>2009-03-05T08:51:00.000-08:00</published><updated>2009-03-05T09:22:15.251-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>mysql grants dump</title><content type='html'>меня тут на собеседовании спросили: «а почему вы не любите mysql»?&lt;br /&gt;&lt;br /&gt;я вам отвечу.&lt;br /&gt;&lt;br /&gt;когда делается «grant privileges on … to 'user'@'hostname' … », то при наличии двух записей, указывающих на один и тот же ip адрес (например 'user'@'host.example.com' и 'user'@'10.0.2.1'), то выбирается всегда запись с ip адресом, а вот сообщение в логе выводится по reverse dns имени хоста. разработчики mysql, вот вам от меня гнилой помидор!&lt;br /&gt;&lt;br /&gt;допустим, вы сдампили все базы mysql и хотите теперь восстановить базу к прежнему состоянию в другом месте. &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mysql -u super -p &amp;lt;mysql_dump&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;и вуаля — не работают указанные вами гранты. хотите узнать почему? потому что разработчики mysql не умеют без костыликов и вам придется запустить этот костылик самому:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;flush privileges&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;получите–ка, дорогие мои, в лицо собачьей какашкой.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-5795181287160649259?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/5795181287160649259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=5795181287160649259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/5795181287160649259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/5795181287160649259'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2009/03/mysql-grants-dump.html' title='mysql grants dump'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-9130804394046598685</id><published>2009-01-09T12:12:00.001-08:00</published><updated>2009-01-09T12:13:52.400-08:00</updated><title type='text'>beware perl</title><content type='html'>как ни странно, скрипт ниже по тексту письма работает без ошибок.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/perl&lt;br /&gt;&lt;br /&gt;use strict;&lt;br /&gt;&lt;br /&gt;print asdfagertghswdfgasdfgsdfgasdf;&lt;br /&gt;&lt;br /&gt;# то же самое, когда перл не может определить контекст bareword, он рассматривает его как FILEHANDLE&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;       no strict 'refs';&lt;br /&gt;       *{a} = sub {return "hello!!!";};&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;print a; # does nothing&lt;br /&gt;print a (); # nothing&lt;br /&gt;print "-=-=-=-=-=-=-=-";&lt;br /&gt;print a(); # ok&lt;br /&gt;print &amp;a; # ok&lt;br /&gt;&lt;br /&gt;#beware!&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-9130804394046598685?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/9130804394046598685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=9130804394046598685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/9130804394046598685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/9130804394046598685'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2009/01/beware-perl.html' title='beware perl'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-8666827338117642094</id><published>2008-12-31T07:44:00.000-08:00</published><updated>2008-12-31T07:53:46.442-08:00</updated><title type='text'>the beatles</title><content type='html'>некоторое время назад, благодаря постоянным «новостям» о том, что битлы наконец проложат свой путь в itunes music store, я решил таки послушать что и как они поют. и это оказалось для меня потрясением — большинство песен с точки зрения звука оказались беспомощным говном. я был в шоке от этого феномена и решил не обращаться к этой теме больше. но недавно услышал как fiona apple поет их песню и понял, в чем дело.&lt;br /&gt;&lt;br /&gt;как оказалось, все просто. у битлов хорошая музыка и тексты. но пение и оранжировки портят все. если даже небольшая часть песен спета неплохо, то все остальные спеты и сыграны так, что просто уши вянут.&lt;br /&gt;&lt;br /&gt;например — битлы:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/YCKANiM9tUM&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/YCKANiM9tUM&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;и fiona apple:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/8gLWTtlMwo4&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/8gLWTtlMwo4&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;второй по звуку для меня на порядок приятнее.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-8666827338117642094?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/8666827338117642094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=8666827338117642094' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/8666827338117642094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/8666827338117642094'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/12/beatles.html' title='the beatles'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-7909118006347002766</id><published>2008-12-23T05:23:00.000-08:00</published><updated>2008-12-23T05:24:20.461-08:00</updated><title type='text'>restore data from broken hdd</title><content type='html'>сохранность данных&lt;br /&gt;&lt;br /&gt;написать нижеследующую простыню меня побудило то, что в определенный момент времени я, благодаря проворству своего домашнего животного и большой стеклянной банке чая, потерял некоторое количество важной информации. но даже это не очень важно, потому как впоследствии, клюнув на рекламные объявления, провел довольно большое количество времени в попытках восстановить данные с помощью автоматических программ и потерпел фиаско.&lt;br /&gt;&lt;br /&gt;восстановление данных&lt;br /&gt;&lt;br /&gt;тут начинается самое интересное. в силу того, что мой диск получил ощутимые физические повреждения (вмятина шириной в 10 милиметров и глубиной в три прямо над блоком парковки головок), я не думал, что он вообще сможет работать. мне очень не хотелось его вскрывать самому для того, чтобы вмятина ничему не мешала при восстановлении данных. сильно помогло отверстие прямо рядом с вмятиной — при помощи отвертки былприподнят корпус и диск смог прочитаться.&lt;br /&gt;&lt;br /&gt;дальше уже все было просто — подключаем в powermac, запускаемся, с трудом грузимся, монтирование диска происходит в течении десятка минут. на диске у меня два раздела и если второй смог показаться в finder и я спокойно смог начать копировать с него данные, то первый не мог ни подключиться, ни пройти верификацию в disk utility. тут я вспомнил, что были две программы, которые могли бы помочь мне скачать информацию даже с такого раздела. этими программи оказались TechTool Pro 4.6.2 и Data Rescue II.&lt;br /&gt;&lt;br /&gt;кратко о том, каков у них принцип работы.&lt;br /&gt;&lt;br /&gt;каждая из них пытается прочитать весь диск для того, чтобы найти на нем уцелевшие файлы. но не все так просто. после составления некотого индекса этих файлов, обе программы предлагают выбрать необходимые файлы и ваше веселье начинается заново. то есть вместо копирования с заведомо небыстрого и проблемного места файлов, предлагается пару раз попилить диск, чтоб уж наверняка файлы не восстановились. других объяснений именно такой работе я не вижу. и если уж у вас есть данные, ценность которых заведомо выше каждой из этим программ, то будет странно, если у вас не найдется денег на диск, куда вы будете восстанавливать восстановимое.&lt;br /&gt;&lt;br /&gt;впроче, оставим это все на совести разработчиков этого софта, но кратко пройдемся по каждой программе. кстати, ни одна из них не поддерживает национальные символы. во всяком случае, я не смог разобраться, какое количество вопросиков соответствует нужному файлу.&lt;br /&gt;&lt;br /&gt;TechTools Pro — это такой небольшой комбайн для тыканья ответкой в разные чувствительные части вашего мака. он вроде может определить неисправность основных узлов и сказать, что с вашим алюминием в порядке, а что — не совсем. заодно может создать специальный скрытый раздел на диске с собой любимым и как–бы восстанавливает данные.&lt;br /&gt;&lt;br /&gt;программа проработала около 14 часов и прогресс остановился. я нажал кнопку отмена и она (о чудо!) и вывела список директорий, которые она думала, что могла бы восстановить. спустя три часа после копирования одного из файлов я решил прервать этот процесс, потому как у меня было ощущение, что это не закончится никогда. результат: около 20 часов работы, около 20 восстановленных файлов из нескольких каталогов в домашней директории. вернуться к списку директорий мне не позволили и это полностью определило дальнейшую судьбу программы — она отправилась в корзину. если остальные функции этой программы реализованы также хорошо, то она не стоит своих денег и … вообще ничего не стоит.&lt;br /&gt;&lt;br /&gt;Data Rescue II «умеет» только восстанавливать файлы. но функциональность в целом схожа с восстановлением у TechTools Pro. то есть софт чрезвычайно долго мурыжит диск, потом выдает список «восстановимых» файлов и при выборе мучительно пытается их восстановить. завершения процедуры я не дождался, на часах уже были третьи сутки с момента падения диска.&lt;br /&gt;&lt;br /&gt;эти программы дали мне довольно много информации о том, как вообще живет софт восстановления данных на mac os x. его просто нет. бэкапьтесь почаще!&lt;br /&gt;&lt;br /&gt;как показал гугл, восстановление данных с диска формата hfs+ стоит от 250 евро. в моем случае нужно было бы еще и убирать гермоблок, то есть еще около 100 евро. данные, которые у меня были не сохранены, столько не стоили и я решил попробовать сам все скопировать.&lt;br /&gt;&lt;br /&gt;закат солнца вручную.&lt;br /&gt;&lt;br /&gt;эта часть повествования относится скорее к unix geek, чем к обычным пользователям. поэтому ее можно прочитать как руководство к действию, а можно вообще не читать, пока у вас ничего не случилось.&lt;br /&gt;&lt;br /&gt;подготовка&lt;br /&gt;&lt;br /&gt;сначала вам придется свыкнуться с мыслью, что чем больше вы возитесь, тем меньше у вас шансов. так происходит по разным причинам, начиная с того, что ваш диск разваливается физически и заканчивая тем, что магнитная структура у неисправного диска может меняться. поэтому, если у вас не сложилась любовь с терминалом и данные важны, попробуйте восстановить их за бабло.&lt;br /&gt;&lt;br /&gt;также вам придется подумать о том, что стоит «спасать» в первую очередь. если ваш ответ — домашняя директория или вообще все, то вам стоит обратиться к специалистам. потому что в случае серьезных неполадок вам удастся скопировать только небольшую часть данных за ограниченное время. пофайловый план будет идеальным.&lt;br /&gt;&lt;br /&gt;вам понадобится открытый внешний контейнер для диска. если у вас он закрытый, то важно будет его не закрывать. кроме того, нужно организовать принудительное охлаждение. его хорошо делать с помощью обычного компьютерного вентилятора размером 120х120х25мм. есть большая вероятность, что вы сможете спасти больше данных с охлаждением, нежели без. во всяком случае, у меня диск переставал отдавать данные вообще после получаса чтения с него без охлаждения.&lt;br /&gt;&lt;br /&gt;внешний контейнер нужен затем, что вы можете загрузить систему без участия проблемного диска. у меня система с моим диском попросту не грузилась, если диск был подключен к sata контроллеру.&lt;br /&gt;&lt;br /&gt;допустим, вам повезло&lt;br /&gt;&lt;br /&gt;стоит понять, какая вероятность того, что ваши данные восстановимы. если диск монтируется и с него даже худо–бедно что–то копируется, то вам повезло. точно также вам повезло, если вы сможете подмонтировать диск с помощью команды mount_hfs -j (это значит, что вы просто проигнорировали журнал при монтировании). это и было степенью моего везения. после этого я с помощью команды cp в терминале (Finder перестает копировать файлы после первой ошибки) получил все важные данные (некоторые не скопировались, конечно, но основное я получил). при этом я скопировал всего 3 гигабайта из 45 в течении часа. это одна из причин, почему план спасения данных, расписанный вплоть до файлов с директориями — хорошая идея. при этом начало диска оказалось безнадежно испорчено — 200 мегабайт из начала копировались 4 часа. но тут уж как повезет.&lt;br /&gt;&lt;br /&gt;возможно, не повезло&lt;br /&gt;&lt;br /&gt;и диск не монтируется даже без журнала. это, предположительно, обозначает, что схемы расположения файлов на диске уже нет. теперь вам предстоит кропотливая работа по отделению мух от котлет. для начала лучше всего будет скопировать имеющиеся данные. это можно сделать с помощью следующей команды:&lt;br /&gt;&lt;br /&gt;dd bs=4096 if=/dev/disk2s2 of=/Volumes/vert/tristane.dmg conv=noerror,sync&lt;br /&gt;&lt;br /&gt;где 4096 — размер блока, /dev/disk2s2 — это ваше отвалившееся устройство, /Volumes/vert/tristane.dmg — место и файл, куда будут сбрасываться полученные данные. эта процедура может длиться очень долго. может даже недели. так что озаботьтесь доставкой пиццы и кока–колы для себя и бесперебойным питанием для компьютера, на котором вы будете переливать все из пустого (все непрочитанные блоки dd забивает нулями) в порожнее. кроме того, за этим компьютром вам будет сложно работать, потому что иногда система перестает отвечать. еще раз повторю, что, возможно, ждать придется долго.&lt;br /&gt;&lt;br /&gt;допустим, у вас спустя время создался образ вашего диска. вот теперь вы можете напустить на него Data Rescue II. есть вероятность, что он даже найдет в образе несколько файлов.&lt;br /&gt;&lt;br /&gt;ну и в последний раз повторюсь — не хотите производить эти все операции — делайте backup.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-7909118006347002766?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/7909118006347002766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=7909118006347002766' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/7909118006347002766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/7909118006347002766'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/12/restore-data-from-broken-hdd.html' title='restore data from broken hdd'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-7409970694850884223</id><published>2008-11-30T13:42:00.000-08:00</published><updated>2008-11-30T13:43:59.180-08:00</updated><title type='text'>usability sucks</title><content type='html'>&lt;a hef="http://www.bulkrenameutility.co.uk/Screenshots.php"&gt;&lt;img src="http://www.bulkrenameutility.co.uk/Shots/BRU_Main_Screen.gif" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-7409970694850884223?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/7409970694850884223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=7409970694850884223' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/7409970694850884223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/7409970694850884223'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/11/usability-sucks.html' title='usability sucks'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-595255420586982235</id><published>2008-11-28T01:09:00.000-08:00</published><updated>2008-11-28T01:11:00.823-08:00</updated><title type='text'></title><content type='html'>http://www.ibm.com/developerworks/ru/library/os-whistle/index.html&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;напоминает анекдот:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;«В одной деревне жил старичок, который мог напердеть любую мелодию. И вот&lt;br /&gt;узнали об этом телерепортеры. Приехало к нему телевидение, берут,&lt;br /&gt;значит, интервью.&lt;br /&gt;Журналист: А правда, что вы можете напердеть любую мелодию?&lt;br /&gt;Старик: Да, конечно.&lt;br /&gt;Журналист: А "Калинку-малинку" можете?&lt;br /&gt;Старик: Могу.&lt;br /&gt;И напердел мелодию.&lt;br /&gt;Журналист: А " Во саду ли в огороде" слабо?&lt;br /&gt;Старик: Нет.&lt;br /&gt;И тоже напердел песенку.&lt;br /&gt;Журналист: А что-нибудь из классики вы могли бы напердеть?&lt;br /&gt;Старик: Например?&lt;br /&gt;Журналист: Ну, например, Моцарта?&lt;br /&gt;Старик: Не знаю, давайте ноты.&lt;br /&gt;Ему дают ноты, он около 10 минут пристально смотрит на них.&lt;br /&gt;Журналист: Ну так что, сможете?&lt;br /&gt;Старик: Нет, не смогу.&lt;br /&gt;Журналист: Почему же?&lt;br /&gt;Старик: Да тут в 2 местах обосраться можно»&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-595255420586982235?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/595255420586982235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=595255420586982235' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/595255420586982235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/595255420586982235'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/11/httpwww.html' title=''/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-831542610874616805</id><published>2008-09-03T00:01:00.000-07:00</published><updated>2008-09-03T00:36:18.876-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>и это снова я про mysql</title><content type='html'>&lt;style type="text/css"&gt;&lt;br /&gt;div.code {margin-left: 20px; color: #e0e0e0;}&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;новыя знания — новыя печали&lt;br /&gt;&lt;br /&gt;теперь я использую mysql таким образом:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;"DBI:mysql:database=regru_auction;mysql_multi_statements=1;mysql_enable_utf8=1;mysql_auto_reconnect=1"&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;тогда есть надежда, что можно сразу несколько statements в do напихать, но я уже этим не пользуюсь. парсить sql оказалось проще, чем договориться с mysql.&lt;br /&gt;&lt;br /&gt;причем, как показывает опыт, последний флаг не работает вообще. как был morning bug, так и остался. Apache::DBI отдыхает.&lt;br /&gt;&lt;br /&gt;но это не все. после ошибки DBD::mysql становится нестабильным и может порождать ошибки типа таких:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;DBD::mysql::st bind_columns failed: bind_columns called with 1 values but 10 are needed [for Statement "select count(*) from `auction` "]&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;для тех, кто в танке: иногда имеет смысл запустить возможно ошибочное sql выражение, чтобы не трясти базу лишний раз. а именно, вместо проверки, есть ли пользователь с таким username/password просто попытаться пользователя туда вставить. тогда, в случае ошибки, мы можем сказать: «э нет, чувак, такое как ты уже есть». ха. не в случае mysql. случай mysql:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;eval {&lt;br /&gt;    $dbh-&gt;do (…);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;if ($@) {&lt;br /&gt;    $dbh-&gt;disconnect;&lt;br /&gt;    Core::make_new_dbh ();&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;ну и сладкое напоследок.&lt;br /&gt;&lt;br /&gt;есть вероятность не выйти из транзакции. то есть после commit или rollback есть вероятность остаться в транзакции со всеми вытекающими. в мануале предлагают дисконнектиться и соединяться заново. а, ну и autoreconnect в таком случае отключается -)&lt;br /&gt;&lt;br /&gt;P.S.: совсем забыл. если создать mysql dbh и форкнуться, то есть вероятность чрезвычайно круто попасть впросак, потому что как–то оно очень хуево после этого работает.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;мудаки.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-831542610874616805?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/831542610874616805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=831542610874616805' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/831542610874616805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/831542610874616805'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/09/mysql.html' title='и это снова я про mysql'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-2138055098956161298</id><published>2008-07-15T01:01:00.000-07:00</published><updated>2008-09-03T00:19:53.113-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>migration postgresql =&gt; mysql</title><content type='html'>&lt;style type="text/css"&gt;&lt;br /&gt;div.code {margin-left: 20px; color: #e0e0e0;}&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;есть достаточно большое количество statements, которые после запуска не могут быть rollback. список: &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/implicit-commit.html"&gt;для 5.0&lt;/a&gt;, &lt;a href="http://dev.mysql.com/doc/refman/5.1/en/implicit-commit.html"&gt;для 5.1&lt;/a&gt;, то есть mysql не является ACID compliant, хотя оно &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/faqs-general.html#qandaitem-30-1-10"&gt;заявлено&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;drop table if exists temp_test_one, temp_test_two;&lt;br /&gt;&lt;br /&gt;begin;&lt;br /&gt;create table temp_test_one (a int, b int);&lt;br /&gt;rollback;&lt;br /&gt;&lt;br /&gt;-- fail here, create table caused implicit commit&lt;br /&gt;create table temp_test_one (a int);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;begin;&lt;br /&gt;alter table test1 drop b;&lt;br /&gt;rollback;&lt;br /&gt;&lt;br /&gt;-- fail here, because alter table also caused implicit commit&lt;br /&gt;alter table test1 drop b;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;по непонятным для меня причинам, второе поле типа timestamp не может принимать значение now() при вставке, что делает возможным создание поля created только с помощью триггера. зато первое поле такого типа по умолчанию апдейтится при каждом обновлении записи. вот такая долбаная магия.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;-- fail here, error: Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause (WHY?)&lt;br /&gt;create table temp_test_two (created timestamp default now(), updated timestamp default now());&lt;br /&gt;&lt;br /&gt;-- fail here because first timestamp column have default now() &lt;br /&gt;create table temp_test_two (updated timestamp, created timestamp default now());&lt;br /&gt;&lt;br /&gt;create table temp_test_two (updated timestamp, created timestamp);&lt;br /&gt;&lt;br /&gt;-- now updated column being updated on any update&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;триггеры может создавать только пользователь с правами super (вроде, в 5.1 они это поправили)&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;-- fail here if you don't have super privilege (5.0)&lt;br /&gt;create trigger temp_test_two_bcreate before insert on temp_test_two for each row set new.created = now();&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;чюваки из mysql до сих пор не смогли написать нормального парсера, чтобы разграничивать внутренности процедур от остального sql кода.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;-- fail because you don't set delimiter (stupid mysql parser can't recognize trigger end without separation delimiters inside trigger and outside)&lt;br /&gt;create trigger contact_aupdate after update on contact&lt;br /&gt; for each row begin&lt;br /&gt;  if new.contact_auth = 'ok' then&lt;br /&gt;   update domain set domain_authenticated = true, domain_state = 'auth' where auth_contact_id = new.contact_id;&lt;br /&gt;  end if;&lt;br /&gt; end;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;теперь про перл&lt;br /&gt;&lt;br /&gt;mysql не может запускать сразу два statement в одном do; если сделать fork, то придется создавать новое соединение, так как старое привязано к process id.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;my $dbh = DBI-&gt;connect;&lt;br /&gt;&lt;br /&gt;my $pid = fork;&lt;br /&gt;if ($pid) {&lt;br /&gt; # failed because you can't launch two statements at same time&lt;br /&gt; $dbh-&gt;do ('drop table if exists temp_test_one; drop table if exists temp_test_two; ');&lt;br /&gt;} else {&lt;br /&gt; # failed because cloned dbh doesn't work&lt;br /&gt; $dbh-&gt;do ('drop table if exists temp_test_one, temp_test_two;');&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;короче, если нет возможности использовать что–то другое, то можно, иначе — нужно как можно быстрее избавляться от mysql в пользу postgresql и/или sqlite.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-2138055098956161298?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/2138055098956161298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=2138055098956161298' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/2138055098956161298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/2138055098956161298'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/07/migration-postgresql-mysql.html' title='migration postgresql =&gt; mysql'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-101976479637477408</id><published>2008-07-13T11:43:00.000-07:00</published><updated>2008-07-13T12:05:06.109-07:00</updated><title type='text'>perl death is postponed</title><content type='html'>в последнее время начал работать с перлом серьезно (весь в кишках). и как–то так получилось, что уже в третий раз нахожу в нем ошибку. один товарищ сказал, что пора переключаться на java — там я буду дилетантом и не буду соваться во всякую мутную низкоуровневую поебень.&lt;br /&gt;&lt;br /&gt;меня больше тянет к ruby, потому что по архитектуре java меньше подходит в качестве web языка. но, судя по последним данным, вряд ли я стану ruby или java специалистом.&lt;br /&gt;&lt;br /&gt;давайте посмотрим на вот эту картинку:&lt;br /&gt;&lt;a href="http://www.indeed.com/jobtrends?q=ASP.NET%2C+php%2C+python%2C+ruby%2C+perl%2C+cobol%2C+java+web&amp;amp;l="&gt;&lt;img src="http://www.indeed.com/trendgraph/jobgraph.png?q=ASP.NET%2C+php%2C+python%2C+ruby%2C+perl%2C+cobol%2C+java+web" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;по ней явно видно, что перл держится молодцом между enterprise level java и активно продвигаемым одной небезызвестной компанией ASP.NET.&lt;br /&gt;&lt;br /&gt;как всем уже давно известно, perl не развивается. но не в том смысле, что не появляется чего–то нового. а скорее в том плане, что без большого объема общения сложно выяснить, что же стоит использовать и для каких целей. для тех же accessors в перле есть не один десяток модулей. то же касается web frameworks, ORM. короче, трендов нет, есть одна глобальная помойка под названием cpan. нет инструментов и удобных frameworks. но есть куча перлового кода, который был написан и будет написан и все это барахло нужно поддерживать.&lt;br /&gt;&lt;br /&gt;волшебные слова типа Catalyst и Moose оставьте при себе. в реалиях сегодняшнего дня у них нет достаточного уровня производительности: http://www.alrond.com/en/2007/jan/25/performance-test-of-6-leading-frameworks/ . если охота более свежих тестов, то в компании, где я сейчас работаю, используется Catalyst и при потреблении памяти в 500 мегабайт он умеет обслуживать не более 10 простых запросов в секунду. Moose же работает в 10 раз медленнее моих самописных accessors, и это в самом простом случае, когда они не типизированы. простите, но это лажа.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-101976479637477408?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/101976479637477408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=101976479637477408' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/101976479637477408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/101976479637477408'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/07/perl-death-is-postponed.html' title='perl death is postponed'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-2069928890579491984</id><published>2008-07-01T01:00:00.000-07:00</published><updated>2008-07-02T07:29:09.884-07:00</updated><title type='text'>memory organization and management in mac os x</title><content type='html'>&lt;h4&gt;только для 10.5&lt;br /&gt;&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;некоторые из указанных здесь данных справедливы только для 10.5. то есть я предполагаю, что, как минимум в 10.4 inactive память не могла быть помещена в swap.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;чипы и диски&lt;br /&gt;&lt;/h3&gt;&lt;br /&gt;системе доступны кэш память процессора (cpu cache), физическая или оперативная память (ram) и память подкачки (swap). кэш память процессора — самая быстрая из имеющейся памяти. она напрямую отдает данные процессору, но за все приходится платить: она же самая дорогая и поэтому размер ее чрезвычайно мал. управление ею возможно, но при программировании под mac os x скрыто, можно лишь сравнивать насколько архитектура процессора соответствует размеру кэш памяти — что является темой для отдельной статьи. в обозримом будущем интел обещает сильное увеличение объемов процессорного кэша, так что посмотрим, может все сильно поменяется. физическая память - это микросхемы оперативной памяти, память подкачки же - это файлы на диске. также система может показывать виртуальную память, но она настолько виртуальна, что не имеет отображения ни в оперативной памяти, ни на диске. не стоит путать память подкачки и виртуальную память - они не имеют вообще ничего общего. суть виртуальной памяти в том, что она выделяется по запросу приложения. но отображаться в реальной памяти начинает только тогда, когда приложение начинает операции с выделенной памятью.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;так получилось, что чем медленнее сама память, тем дешевле запихать побольше ее в компьютер. поэтому кэша у процессора в пределах нескольких мегабайт, оперативной памяти в макбук можно поставить 4 гигабайта, а более медленной дисковой — аж 300 гигабайт.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;приложения потребляют память при запуске и своей работе. чем интенсивнее приложение работает с объектами и чем больше количество объектов используется, тем больше потребляет памяти данное приложение. когда активное приложение перестает помещаться в оперативную память, то часть данных неактивного приложения сбрасывается на диск, в файл подкачки. впоследствии, при переключении на такое неактивное приложение вы почувствуете, что оно совсем небыстро отвечает в течении небольшого промежутка времени - это данные, попавшие в файл подкачки, возвращаются в физическую память, а другое неактивное приложение помещается в swap. привет, пляжный мячик!&lt;br /&gt;&lt;h3&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3&gt;системная память&lt;/h3&gt;&lt;br /&gt;система различает в оперативной памяти несколько секций: wired, active, inactive и free. обычно, пользователь, замечая, что у него почти не осталось свободной (free) памяти, начинает выгружать приложения. количество свободной памяти после данной процедуры увеличивается, но несильно. система с двумя гигабайтами памяти, в которой запущен один только finder, может иметь свободной лишь 100 мегабайт. и это нормально.&lt;br /&gt;&lt;br /&gt;wired память - это, зачастую, лишь память ядра системы (ну и WindowServer). wired память не имеет шансов попасть в swap. больше она ничем не интересна.&lt;br /&gt;&lt;br /&gt;active память - это память всех приложений. то есть если приложение загрузилось, то оно «отъело» кусок active памяти. если приложение загрузило файл и держит содержимое в памяти, то оно отъест еще кусок. возможно, часть такой памяти превращается в inactive, но условия, при которых это происходит и что именно становится «неактивным» — мне неизвестно.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;inactive память предположительно не имеет никакого отношения к приложениям. этой памятью управляет система, кэшируя обращения к файлам на диске. то есть если приложение прочитало файл на диске, то содержимое этого файла будет сохранено системой внутри inactive памяти. если приложение вторично пытается прочитать файл и файл не изменился, то с большой вероятностью он будет прочитан из памяти, без обращения к диску. эта память также не помещается в swap в силу бессмысленности данной операции (вообще–то так должно быть, но это не совсем так — читай далее).&lt;br /&gt;&lt;br /&gt;free - это память, которую не использует ни одно приложение. количество свободной памяти не может опуститься ниже некоторого предела, поэтому вы вряд ли сможете увидеть значения типа 500 килобайт памяти свободно. но если значение опустилось менее 5 мегабайт, то скорее всего либо у вас уже все тормозит, или вы очень скоро это почувствуете.&lt;br /&gt;&lt;br /&gt;сразу после загрузки у вас будет очень много свободной памяти, которая по мере работы будет активно превращаться в active и inactive. и если с active памятью мы ничего сделать не можем, система распорядится ею сама, то размер inactive памяти можно менять.&lt;br /&gt;&lt;br /&gt;вообще–то есть довольно сильная зависимость от профиля вашей работы. если вы работаете с небольшим количеством файлов, но с приложениями, которые перелопачивают большое количество данных, то, с большой вероятностью, у вас будет больше занято active памяти. в случае копирования и чтения множества файлов — inactive память вырвется на первое место.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;приоритеты&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;память подчиняется определенным приоритетам, которые выглядят как (у всех так нарисовано):&lt;br /&gt;&lt;br /&gt;wired &gt; active &gt; inactive &gt; swap&lt;br /&gt;&lt;br /&gt;это не совсем верно. wired не имеет шансов попасть в swap. кроме того, я за много попыток не смог добиться (или не смог увидеть) попадания active памяти в inactive.&lt;br /&gt;&lt;br /&gt;так что схема примерно такова:&lt;br /&gt;&lt;br /&gt;inactive &gt; swap, active &gt; swap&lt;br /&gt;&lt;br /&gt;то есть в случае нехватки памяти, active и inactive могут быть помещены в swap, причем сначала помещается inactive память, а потом active. если насчет active все понятно, то почему inactive, которая (фактически) является файловым кэшем, помещается в swap? этого я понять не могу, но результаты тестов показывают нам именно это.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;волшебная inactive память&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;поработав за компьютером некоторое время я наблюдаю следующую картину:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://the-singlers.us/images/mem-consumption/00-starting-point.png" /&gt;&lt;br /&gt;&lt;br /&gt;для того, чтобы определиться с inactive памятью, я решил скопировать 1 гигабайт данных с помощью команды «cp» в терминале («Finder» не использует кэширование при копировании файлов):&lt;br /&gt;&lt;br /&gt;&lt;img src="http://the-singlers.us/images/mem-consumption/01-after-copy-1gig.png" /&gt;&lt;br /&gt;&lt;br /&gt;все параметры в норме, полет нормальный, inactive память подросла на гиг. давайте посмотрим, что будет, если я попрошу у системы 2 гига памяти и запишу в них данных, а потом освобожу эту память. на первой картинке — процедура отъедания памяти, а на второй — после того, как я покликал по активным GUI приложениям и проверил, что они не залезли в swap:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://the-singlers.us/images/mem-consumption/02-perl-free-in-progress.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://the-singlers.us/images/mem-consumption/03-perl-free-completed.png" /&gt;&lt;br /&gt;&lt;br /&gt;вроде бы все в норме, только там есть волшебная строчка, на которую стоит обратить внимание: swap used. если сравнить с начальной картинкой, то в свопе оказалось полгига inactive памяти. фигасе, сказал я себе, когда это увидел. может, у меня скриншоты неправильно скриншотятся? я выгрузил все приложения и увидел следующую картину:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://the-singlers.us/images/mem-consumption/04-all-unloaded.png" /&gt;&lt;br /&gt;&lt;br /&gt;то есть в свопе находится inactive память, которая не была нужна ни одному из загруженных приложений. дальнейшие мои опыты не смогли вытащить эту память из swap. она осталась там до перезагрузки. естественно, после перезагрузки памяти у нас до фига:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://the-singlers.us/images/mem-consumption/05-after-reboot.png" /&gt;&lt;br /&gt;&lt;br /&gt;еще одно наблюдение, которое я сделал по мере тестов — mach_kernel и WindowServer кушают память (wired память). причем, в случае выгрузки приложений, они ее не возвращают системе, а в силу того, что это wired память, то и в swap ее не отдают. а это значит, что в случае, если они выросли слишком сильно (у меня бывало и по полгига на каждого), никаким образом, кроме перезагрузки, нельзя вернуть память, сожранную этими двумя процессами, в систему.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;inactive, active =&gt; free&lt;/h3&gt;&lt;br /&gt;в случае необходимости, вы можете освободить большую часть inactive и active памяти. как показывает вышеприведенный эксперимент, часть inactive памяти действительно освободится, часть же перейдет в swap. для этого вы можете воспользоваться программой ifreemem или волшебным скриптом, который просто нужно запустить в терминале или сделать action в automator:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;perl -e 'my $a = []; $a[5*10**8] = 1;'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;меняя циферки, вы можете управлять размером освобождаемой памяти. вышеприведенный пример освобождает почти два гига памяти. с помощью perl вам не удастся освободить больше, чем три с небольшим гигабайта. насчет ifreemem не знаю.&lt;br /&gt;&lt;br /&gt;после запуска подобного скрипта в системе с небольшим количеством свободной (free) памяти, фотошоп начинает грузиться и работать быстрее, потому что ему не приходится биться за каждый килобайт оперативки с неактивной памятью. но за все нужно платить. в случае, когда у вас действительно немного неактивной памяти, а большая часть памяти активна, то активная память уйдет в своп и вы получите однозадачную операционную систему — переключение на другие приложения будет исключительно мучительным (конечно, если у вас не mac pro с raid 5 из 8–ми дисков).&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-2069928890579491984?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/2069928890579491984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=2069928890579491984' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/2069928890579491984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/2069928890579491984'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/02/memory-organization-and-management-in.html' title='memory organization and management in mac os x'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-236843766660345644</id><published>2008-06-21T16:07:00.000-07:00</published><updated>2008-06-21T16:21:14.918-07:00</updated><title type='text'>modding</title><content type='html'>я уверен в том, что даже самая долбанутая идея, возникающая у человека, имеет практический смысл. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;взять тот же &lt;a href="http://www.podarkin.com/index.html/podarkin/na-zdorove/trenazher-intuicii"&gt;тренажер интуиции&lt;/a&gt;.  люди ебашат себя током и им это нравится. пускай ебашат, если им от этого лучше. в какой–то из серий бонда тоже такая игра была. как говорят — если кошка жрет полиэтилен, то наверное, у нее не хватает этого самого полиэтилена (как вариант — мозгов).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;те же клавиатуры антибактериальные и с возможностью промывки специально для дрочеров. но вчера я увидел реальный инсектицид в исполнении компьютерных комплектующих. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;вы думаете подсветка на кулерах просто так нужна? хрен. она ночью привлекает насекомыхобещающим пропитание нежно голубым цветом и температурой, близкой к температуре тела. те подлетают и, влекомые воздушным потом, размалываются о светящиеся лопасти и острые грани радиатора. только ванночку для отходов поставить. так что несмотря на эстетическое убожество, ставьте светящиеся кулеры. а вот нити не ставьте. и водоблок с подсветкой. короче, все что не крутится, не должно светиться.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-236843766660345644?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/236843766660345644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=236843766660345644' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/236843766660345644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/236843766660345644'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/06/modding.html' title='modding'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-6605765569425443112</id><published>2008-06-09T20:05:00.000-07:00</published><updated>2008-06-09T20:22:34.651-07:00</updated><title type='text'>wwdc 2008</title><content type='html'>&lt;h2&gt;техника молодежи&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;я отфильтровал лог по хитам с учетом исключительно «картинок с выставки».&lt;br /&gt;&lt;br /&gt;цифры:&lt;br /&gt;&lt;br /&gt;сервер стоял раком с 21:05 по час ночи&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;811 430 хитов&lt;br /&gt;4 022 уникальных ip адреса&lt;br /&gt;35.6 гигабайт трафика&lt;br /&gt;197 842 799 байт в лог файле&lt;br /&gt;&lt;br /&gt;ояебу&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;про, собственно, выставку&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 3px dotted black; padding: 30px;"&gt;&lt;br /&gt;&lt;h1&gt;Пункт приема устаревших айфонов.&lt;/h1&gt;&lt;br /&gt;&lt;h3&gt;беременным пенсионерам и за 100 баксов можно без очереди.&lt;/h3&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-6605765569425443112?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/6605765569425443112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=6605765569425443112' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/6605765569425443112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/6605765569425443112'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/06/wwdc-2008.html' title='wwdc 2008'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-9163069420525420509</id><published>2008-06-05T01:52:00.000-07:00</published><updated>2008-06-05T02:02:28.922-07:00</updated><title type='text'>snow leopard?</title><content type='html'>&lt;h2&gt;снова о леопарде&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;на днях вышла версия 10.5.3 — которую я склонен считать стабильной и подходящей для каждодневного использования. если вспомнить, что леопард был выпущен 26 октября, то до конца мая, когда было выпущено последнее стабильное обновление, прошло ни много ни мало, а целых 7 месяцев. немало для отлаживания на пользователях, не правда ли? можно сказать, что и другие версии, начиная с 10.5.0 были стабильны, но позволю не согласиться. леопард явно был глючный с самого начала и новость о том, что билд 981 будет выпущен на рынок — меня просто шокировала.&lt;br /&gt;&lt;br /&gt;кроме того, часть функциональности просто осталась за бортом — в обновлениях не появилось запоминания раскладок, address book навсегда попрощался с bluetooth. мои ожидания что они все–таки добавят эту функциональность, потерпело фиаско — «вы чё, чуваки, у нас тут айфоны, тайм машины в капсулах — а вы нам насчет ваших паршивых проблем с раскладкой клавиатуры. мы же америкосы! нам похер ваши раскладки, учите английский!»&lt;br /&gt;&lt;br /&gt;леопард добавил не так уж много нового, но это новое не то, чтобы нормально не отлажено, оно просто скрипит по швам. небольшой пример — поставьте в настройках файрволла «только необходимые сервисы» и попробуйте расшарить интернет на айфон по wifi. ну как? работает?&lt;br /&gt;&lt;br /&gt;грустно, но леопард — явно неудачное детище эппла, рожденное в муках и муки эти не закончились до сих пор. ну что ж, посмотрим насколько правдивыми окажутся слухи, которые предрекают 10.6 с возможным именем snow leopard.&lt;br /&gt;&lt;br /&gt;с другой стороны, леопард — это сильная заявка на совместимость с сторонним железом и широкое тестирование под PC. начиная с бета версий, леопард сильно проще устанавливался на обычное железо, чем тигр и обновление 10.5.2 прошло практически безболезненно. некоторая фирма даже решила продавать openmac, который в других кругах называется попросту «хакинтош». но эппл тоже не лыком шита и обновление 10.5.3 сильно расставляет точки над I. последнее обновление неприятное для владельцев хакинтошей. потестировали, ребятки, и хватит.&lt;br /&gt;&lt;br /&gt;теперь немного о intel-only составляющей возможной новой системы. если честно, процессорные мощности последних PPC машин вполне приемлемые для сегодняшнего дня. G3 уже маловато, а вот G4 800+ вполне хватает для каждодневного использования. правда есть небольшая проблема — часто на таких машинах серьезно не хватает памяти, потому что (по моим ощущениям) леопарду для шустрого шевеления нужен как минимум гиг памяти. но тут скорее вопрос политический — для отладки и разработки приложений сразу на 4–х архитектурах нужно много усилий. и было бы круто взять  и отказаться сразу от трех архитектур, оставив только 64bit x86. плюсов масса да и многие современные программы не имеют в принципе PPC составляющей — даже эппловский iMovie 08 не умеет импортировать AVCHD файлы с видеокамер, используя PowerMac G5. intel only, понимаете ли! сразу можете дополнить список играми, которые вышли в intel–only, vmware fusion &amp;amp; parallels. считайте, почти весь системный софт.&lt;br /&gt;&lt;br /&gt;но давайте посмотрим пристально — при отказе от 32 bit библиотек сразу перестают работать два мастодонта платформы — adobe photoshop и microsoft office. перестает работать флэш в браузере, для системы требуется больше памяти. в принципе, такое тоже возможно, но я надеюсь, что это не произойдет.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-9163069420525420509?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/9163069420525420509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=9163069420525420509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/9163069420525420509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/9163069420525420509'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/06/snow-leopard.html' title='snow leopard?'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-3524838213643564541</id><published>2008-05-16T00:47:00.000-07:00</published><updated>2008-05-16T00:49:22.427-07:00</updated><title type='text'>king's bouny and russian gamedev</title><content type='html'>&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;о российском игродеве и местных продуктах.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;вообще мне пофигу игродев и все, что с ним связано. но недавно вышедший king's bounty заставил меня написать. можете рассматривать это как крик души.&lt;br /&gt;&lt;br /&gt;играю я нечасто и поэтому игр–то особо не видел. но года два назад собрал железку специально для игр и поддерживаю ее конфигурацию в актуальном состоянии. поэтом за последний год через мои руки прошло небольшое количество продуктов, которые давали мне возможность тряхнуть стариной. переводные игры я отказываюсь покупать по вполне объективной причине — перевод на редкость уёбищный. а здесь, в москве, очень сложно купить продукт с оригинальной локализацией. поэтому до недавних пор я все скачивал из сети и все было замечательно. fallout 1/2, heroes of might and magic IV, psychonauts, orange box, gta: san andreas, bioshock, guitar hero 3 — отличные игры, хотя некоторые и довольно старые.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;сказ о «продуктах».&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;кучу лет назад моей девушкой был куплен диск с игрой «казаки». не знаю, какой версии и модификации, но после проверки компьютера на вирусы, оказалось, что папка с казаками заражена. переустановка системы и установка на чистую систему только игры дала тот же результат. судя по тому, что в интернет (http://playingworld.0pk.ru/viewtopic.php?pid=2113) есть аналогичные отзывы, проблема касалась не только моего диска. диск не был пиратским, была лицензия, книжица с кодом, которую нужно было куда–то послать. нафиг такое дерьмо, диск был выкинут. в саму игру я не играл — меня такие не интересуют.&lt;br /&gt;&lt;br /&gt;совсем недавно, после очередной смены «железа», мной был скачан дистрибутив разрекламированного сталкера. время игры составило 15 минут. после orange box игра кажется пресной. суперэффектов на максимальных настройках я не разглядел. то есть может дальше будет интереснее, но как–то уже не хочется. соответственно, хорошо что не купил.&lt;br /&gt;&lt;br /&gt;две недели назад был приобретен диск с king's bounty. игра хорошая, затягивает. то есть если уж сел, то оторваться будет сложно. но есть ряд нерешенных проблем, которые, по всей видимости и не будут решены. для начала расскажу о баг–трекинге этой игры. есть ее форум, где люди оставляют сообщения о багах соответственно патчам игры. патч 1.2 породил ветку на 35 страниц (на момент моего последнего просмотра). я оставил сообщение о проблеме, но не получил никакого подверждения о том, что мои проблемы будут учтены. у меня возникло подозрение о том, что они ничего и не исправят. так и оказалось. патч 1.3 не учел проблем, которые были описаны в ветке 1.2; например http://kingsbounty.ru/forum/index.php?showtopic=496&amp;amp;st=60&amp;amp;p=12190&amp;amp;#entry12190.&lt;br /&gt;&lt;br /&gt;дополнительно к таким клевым условиям для разработчиков и игроков на форуме есть некоторое количество долбоёбов–модераторов, которые закрывают и удаляют ветки, которые им не нравятся.&lt;br /&gt;&lt;br /&gt;теперь от поддержки плавно перейдем к игре.&lt;br /&gt;&lt;br /&gt;во–первых игру на машине без русской локали установить сложно, потому что разработчики инсталлятора не знают слов «юникод» и «многобайтовая кодировка». к тому же, после инсталляции, игра не сохраняется через меню, зато автосохраняется и быстросохраняется. так и приходится играть в три сохранения на всю игру. к тому же, если под одним аккаунтом пользователя два игрока, то у второго не будут работать вообще никакие сохранения. эту часть кода писал мудак.&lt;br /&gt;&lt;br /&gt;во–вторых, защита диска старфорсом, который отказался работать на моем приводе. пришлось искать другой привод (шлю лучи ненависти и поноса разработчикам старфорса). к счастью, таковой быстро нашелся, но те, кто защищают игру от пользователей лицензионной версии таким образом — тоже изрядные мудаки.&lt;br /&gt;&lt;br /&gt;в третьих, сам игровой процесс включает изрядное количество действий, связанное с передвижением персонажа. очень круто написан алгоритм движения персонажа: персонаж готов застрять в любом месте. в патче 1.3 это поправили, но по прежнему застревает и по прежнему там, где часто застревает при управлении мышью, там отлично двигается с помощью кнопки вперед. видимо, код писали два человека и тот, что писал управление мышью — мудак.&lt;br /&gt;&lt;br /&gt;ссылку на еще один баг я давал выше, при описании системы баг–трекинга.&lt;br /&gt;&lt;br /&gt;если честно, то все четыре приведенных бага я считаю критическими и релизный продукт не должен такого содержать. то есть я, как покупатель, заплатил денег чтобы стать бета–тестировщиком? почему ни одна из приведенных в начале текста игр не содержала такого количества багов? почему я играл в версии 1.0 безо всяких проблем, пожеланий, предложений и багов? с таким подходом идите–ка нахрен. я понимаю, что типа бабло, сроки, еще раз бабло, российский продукт, бла-бла, но почему это должно касаться меня? ответов на этот вопрос я не нашел.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;сказ об издателях.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;о, издатели, тумаки вам и пощечины пусть только достанутся. за трескающиеся диски с кинг баунти, за вирус в казаках, за уёбищную локализацию и невозможность купить продукт с оригинальной локализацией.&lt;br /&gt;&lt;br /&gt;небольшое отступление. многие зарубежные издатели выпускают так называемые hybrid iso, на котором содержится версия под PC и для Mac. ни один из продуктов, которые поставляются в росиию, не содержит мак секции. возьмите fallout 1/2 из старого или guitar hero 3 из нового — как минимум эти продукты поставляются в hybrid iso. но нет, зачем пользователям маков играть, решают мудаки в новом диске и 1c. пускай купят себе PC для игр. ведь известно же, что маки — унылое говно.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-3524838213643564541?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/3524838213643564541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=3524838213643564541' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/3524838213643564541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/3524838213643564541'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/05/blog-post.html' title='king&apos;s bouny and russian gamedev'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-5731888186653684492</id><published>2008-04-07T13:13:00.000-07:00</published><updated>2008-04-07T23:50:38.752-07:00</updated><title type='text'>apple quality</title><content type='html'>вот вам и хваленое качество операционки от эппл.&lt;br /&gt;&lt;br /&gt;система 10.5.2, все обновления, свежеперезагруженная, генерирует на каждый запуск приложения такими записями в лог:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-size: 70%"&gt;&lt;br /&gt;Apr  8 00:06:56 flo Console[380]: Console(380,0xa0301fa0) malloc: *** error for object 0x200022: Non-aligned pointer being freed\n*** set a breakpoint in malloc_error_break to debug&lt;br /&gt;Apr  8 00:06:56 flo [0x0-0x41041].com.apple.Console[380]: Console(380,0xa0301fa0) malloc: *** error for object 0x200022: Non-aligned pointer being freed&lt;br /&gt;Apr  8 00:06:56 flo [0x0-0x41041].com.apple.Console[380]: *** set a breakpoint in malloc_error_break to debug&lt;br /&gt;Apr  8 00:10:39 flo Adobe Lightroom[384]: Adobe Lightroom(384,0xa0301fa0) malloc: *** error for object 0x220020: Non-aligned pointer being freed (2)\n*** set a breakpoint in malloc_error_break to debug&lt;br /&gt;Apr  8 00:10:39 flo [0x0-0x43043].com.adobe.Lightroom[384]: Adobe Lightroom(384,0xa0301fa0) malloc: *** error for object 0x220020: Non-aligned pointer being freed (2)&lt;br /&gt;Apr  8 00:10:39 flo [0x0-0x43043].com.adobe.Lightroom[384]: *** set a breakpoint in malloc_error_break to debug&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;причем, это характерно для любых приложений, Console и Lightroom - это не единственные приложения, подверженные такому поведению&lt;br /&gt;&lt;br /&gt;теперь понятно, почему эппл так крепко озабочена выпуском апдейта 10.5.3, с такими ошибками все совсем грустно.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-5731888186653684492?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/5731888186653684492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=5731888186653684492' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/5731888186653684492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/5731888186653684492'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/04/apple-quality.html' title='apple quality'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-5992211201882595006</id><published>2008-04-06T05:36:00.000-07:00</published><updated>2008-04-06T05:39:59.135-07:00</updated><title type='text'>macbook air</title><content type='html'>&lt;h3&gt;каков?&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;macbook air - отличный ноутбук. он отнюдь не самый лучший, не самый быстрый, не самый легкий. он отличный от других и при этом хорошо сбалансирован.&lt;br /&gt;&lt;br /&gt;air - прямой наследник powerbook 12". и если «двенашка» была младшая модель в линейке, то air  - это отдельная модель, которая сильно отошла от своих больших братьев размером 15" и 17".  это настоящий мобильный компьютер. если двенашка отличалась от своих собратьев pcmcia слотом и подсветкой, то эйр приобрел подсветку, зато лишился всего того, что могло бы его тянуть к земле. поменьше проводов и разъемов, нет dvd драйва, вес как можно легче.&lt;br /&gt;&lt;br /&gt;вообще, самые-самые ноутбуки обычно выпячены в одну сторону. можно, например взять совренный asus eeepc. он легкий и маленький, но при этом очень убогий по своим техническим характеристикам. работать за ним каждый день? увольте. или alienware m15x. он оснащен самым быстрым процессором и видеокартой из возможных. но при этом он греется и шумит как паровоз при играх; батарея тоже не ахти. ну и 3.5 килограмма веса не вдохновляют. зато можно по ночам с таким ноутбуком ходить без опаски - им можно жестоко повредить грабителя/насильника. правда только один раз, корпус-то пластиковый; на сайте alienware даже промо-ролик есть на тему того, что отец купил своим дочерям по такому ноутбуку. air тоже выпячен. в сторону легкости и отказа от проводов. но не настолько, чтобы это было в ущерб чему-то.&lt;br /&gt;&lt;br /&gt;в air стоит вполне современный процессор, 2 гигабайта памяти, диск на 80 гигабайт. если опять сравнить air c «двенашкой», то можно обнаружить, что процессор и память подросли, а диск остался такого же объема (и, чуть меньшей производительности, но не настолько меньшей, чтобы это сильно напрягало). в принципе air по производительности аналогичен macbook самой первой серии, но при этом в нагруженном состоянии сильно меньше греется. точнее, греется там только один небольшой пятачок на днище, чуть левее центра. то есть, его производительность вполне достаточная для современного компьютера. сразу после загрузки вы будете видеть, как air пытается прочитать данные программ со своего небольшого и небыстрого диска, но когда все загрузится, он достаточно быстр.&lt;br /&gt;&lt;br /&gt;многие обозреватели сетуют на отсутствие множества usb, firewire, dvd. я считаю, что такая аскетичность впору для мобильного компьютера. если я в городе, то я соединюсь с интернет по wifi или через мобильный телефон с bluetooth. если я пришел на работу, то там есть wifi. если нет - не проблема купить единожды - &lt;a href="http://global.level1.com/products2.php?Id=15"&gt;такое&lt;/a&gt; устройство стоит полторы тысячи рублей и весит менее 50 грамм. клавиатура и мышь у меня подсоединяются через bluetooth. dvd приводом я пользуюсь редко и в основном дома; в рабочей обстановке или где-то на встрече flash drive значительно удобнее dvd, а стоит немного. единственное, что меня огорчает - это моно динамик. все звуки как из старого радио.&lt;br /&gt;&lt;br /&gt;вкратце: беспроводных интерфейсов хватает при теперешнем развитии технологий. если вам обязательно нужен проводной ethernet, который свяжет ваш старенький домашний pentium 133, который до сих пор звонит провайдеру по dialup с помощью модема usr sportster, то этот ноутбук не для вас. лучше подождите еще лет десять, загоните свой pentium и купите десятилетней выдержки air.&lt;br /&gt;&lt;br /&gt;даже если не обращать внимания на порты расширения и вес, то сравнивать его с большими и более тяжелыми современными братьями не получится, он ощутимо медленнее за счет процессора и диска. даже macbook последней версии ощутимо быстрее.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;для кого?&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;тут все просто. если вы не возите каждодневно сумку всякого барахла, которое стремится занять порты вашего любимого macbook pro, а также если у вас сломался ваш старый ноутбук apple, то air  - хороший выбор на замену.  эйр - это не тот ноутбук, который все время стоит на рабочем месте и остается на работе, когда вы с нее уходите. он скорее для людей, которые утром читают новости с компьютера за завтраком, а вечером перед сном переписываются с друзьями.&lt;br /&gt;&lt;br /&gt;веб-сервер и база данных, виртуализация и разработка - не самые сильные стороны этого ноутбука. в случае, если вы разработчик или вам нужен windows в виртуальной машине - сильно подумайте. скорость работы в таком случае будет сильно меньше, чем на macbook /pro.&lt;br /&gt;&lt;br /&gt;то же самое касается скорости работы в любых тяжелых средах. photoshop и microsoft office загружаются мучительно долго и время от времени так же мучительно работают. в случае одновременной загрузки safari с множеством вкладок, photoshop и excel, lightroom уже лучше не загружать, 2 гигабайта памяти недостаточно для таких монстров.&lt;br /&gt;&lt;br /&gt;80 гигабайт - не такой уж большой объем диска по сегодняшним меркам. если у вас есть ipod с коллекцией музыки на нем, то это здорово, моя коллекция в 80 гигабайт просто не поместится на air.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;может, подождем?&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;air - отличное железо для тех, кто умеет ждать. я все время перемещаюсь и ноутбук у меня с собой, но я подожду, пока появится следующая ревизия этих ноутбуков. не останавливайтесь, если он вам нужен здесь и сейчас, идите и купите его, но если вам не горит, то читайте дальше (beware: много технической шелухи).&lt;br /&gt;&lt;br /&gt;ssd - это большая темная лошадка. если вы готовы на нее поставить, то будьте готовы к не очень большой скорости (меньше, чем у традиционных жестких дисков на магнитных пластинах) и к отказу оборудования (ячейки памяти в ssd перезаписываются фиксированное число раз; то есть если у вас будет располагаться на ssd база данных, куда все время происходит запись, то возможен быстрый отказ жесткого диска).&lt;br /&gt;&lt;br /&gt;pata - умирающий стандарт. и в то же время диски в air именно такие. для них нет возможности найти замену. остается надеяться, что в следующей ревизии там будут уже sata диски.&lt;br /&gt;&lt;br /&gt;в том случае, если у вас в air хоть что-то сломается (жесткий диск, батарея), то вы полностью полагаетесь на сервис apple в россии, который, мягко говоря, не из лучших. в случае macbook /pro вы просто можете купить еще одну батарею или диск и забыть об этой неприятности. с эйром это исключено.&lt;br /&gt;&lt;br /&gt;2 гигабайта памяти для 10.5 - это совсем немного. хватает на посмотреть почту, полазить в сети, посмотреть фильм, загрузить iphoto. то есть для обычного применения вполне. но мне например, мало и четырех гигабайт. будем надеяться, что в будущем apple напаяет еще нмного памяти.&lt;br /&gt;&lt;br /&gt;intel сконструировал процессор для air в так называемом sff (small form factor или небольшой размер упаковки). теперешние процессоры в macbook и macbook pro производятся по нормам 45nm, в air же используется пока что 65nm чип. что это значит? это значит то, что когда у air появится 45nm чип, то он станет меньше греться и будет быстрее работать. в &lt;a href="http://en.wikipedia.org/wiki/List_of_future_Intel_Core_2_microprocessors"&gt;википедии указывается&lt;/a&gt;, что возможный выход sff процессоров для техпроцесса 45 nm ожидается в мае 2008 года.&lt;br /&gt;&lt;br /&gt;посмотрим на год вперед: не за горами (2009 год) выход новой платформы intel, с памятью ddr3 и новой архитектурой процессоров, с отказом от северного и южного мостов по отдельности и с видеоядром, интегрированным в процессор.&lt;br /&gt;&lt;br /&gt;в 2009 году же произойдет выпуск первых устройств на usb3. как обычно, первыми выйдут ноутбуки и десктопы, после этого появится периферия, но тем не менее, у вас появится возможность подключать высокоскоростные устройства.&lt;br /&gt;&lt;br /&gt;с учетом выпуска ноутбуков от apple с учетом появления новых intel'овских платформ, совсем неудивительно, если через год эйры будут сильно интереснее. так же, как было с macbook core duo и core 2 duo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-5992211201882595006?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/5992211201882595006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=5992211201882595006' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/5992211201882595006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/5992211201882595006'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/04/macbook-air.html' title='macbook air'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-156726087638901253</id><published>2008-04-06T01:18:00.000-07:00</published><updated>2008-04-06T01:52:25.056-07:00</updated><title type='text'>gigabit and airport express test</title><content type='html'>&lt;h2&gt;что такое гигабит и пару слов о airport express&lt;/h2&gt;&lt;br /&gt;когда сети были небольшие, коаксиальные и витые, то было сразу же понятно, сколько это - пропускная способность 10 мегабит или 100. 10 мегабит - это порядка 900 килобайт в секунду, 100 мегабит - это порядка 9-ти мегабайт в секунду. что же такое гигабит? казалось бы, что это 90 мегабайт в секунду. а вот нет.&lt;br /&gt;&lt;br /&gt;скорости более 20-30 мегабайт в секунду сложно получить простым копированием файлов с помощью имеющихся ноутбуков. мы воспользуемся самописным решением, которое просто пересылает данные из памяти одного ноутбука в память другого – в таком случае диск не становится узким местом.&lt;br /&gt;&lt;br /&gt;для того, чтобы убедиться, что сама реализация скрипта позволит нам получить заветный гигабит, я запустил его на локальной машине через локальный интерфейс.&lt;br /&gt;&lt;br /&gt;методика: во всех случаях копируется гигабайт данных, то есть 2^30 байт, замеряется скорость. для потока вычисляется средняя скорость и указывается максимальная (burst).&lt;br /&gt;&lt;br /&gt;mbp 2.33 - &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;19&lt;/span&gt; секунд, &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;53.9&lt;/span&gt; мегабита&lt;br /&gt;mbp 2.2  - &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;11.8&lt;/span&gt; секунд, &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;86.8&lt;/span&gt; мегабита&lt;br /&gt;&lt;br /&gt;негусто. я бы сказал, что внутренний интерфейс, который не ограничивают провода, выглядит не очень внушительно. ладно, это детали реализации, и, может, мои собственные ошибки.&lt;br /&gt;&lt;br /&gt;посмотрим на реальную сеть:&lt;br /&gt;&lt;br /&gt;mbp 2.33 &lt;=&gt; gigabit hub &lt;=&gt; mbp 2.2&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;26.4&lt;/span&gt; секунды, средняя скорость &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;38.8&lt;/span&gt;, максимальная &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;41.4&lt;/span&gt; мегабайт в секунду&lt;br /&gt;&lt;br /&gt;ха. гигабит тут тоже какой-то вшивый. он не дотянул дяже до уровня внутренней сети. и да, mtu у обоих адаптеров одинаковый, 4087&lt;br /&gt;&lt;br /&gt;не все то золото, что блестит, и не всякий гигабит, который гигабит.&lt;br /&gt;&lt;br /&gt;ладно, увеличение скорости в 5 раз тоже прикольно. скачать порно в пять раз быстрее - тоже достижение.&lt;br /&gt;&lt;br /&gt;а что у нас с беспроводными сетями?&lt;br /&gt;&lt;br /&gt;ведь есть же волшебные 802.11n, которые обещают скорость 300 мегабит. это, как не сложно посчитать почти 30 мегабайт в секунду.&lt;br /&gt;&lt;br /&gt;берем свежекупленный airport express 802.11n и подключаем одну железку к его ethernet, вторую соединяем по wifi.&lt;br /&gt;&lt;br /&gt;mbp 2.33 &lt;=&gt; airport express 802.11n, &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;5GHz, WPA2&lt;/span&gt;&lt;br /&gt;airport express ethernet &lt;=&gt; mbp 2.2&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;5 минут 15 секунд&lt;/span&gt;, средняя скорость &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;3.25&lt;/span&gt;, максимальная &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;7.26&lt;/span&gt; мегабайт в секунду&lt;br /&gt;&lt;br /&gt;скорость в пике хорошая, даже очень, это значит используется почти весь канал ethernet на все свои 100 мегабит. ой, а что это такое?&lt;br /&gt;&lt;br /&gt;&lt;img src="http://the-singlers.us/images/speed-down.png" /&gt;&lt;br /&gt;&lt;br /&gt;это привет от эппла. скорость ethernet соединения снижается после непродолжительной нагрузки. airport express разогревается при использовании соединения ethernet &lt;=&gt; wifi и пытается остудить себя, снижая скорость. видимо, это результат работы над перегревом старых станций airport express, которые отказывали через 14-20 месяцев после использования.&lt;br /&gt;&lt;br /&gt;любые применения airport express, которые связаны с ethernet каналом, сильно не радуют, соединения до 20 мегабит он отдает стабильно, а вот больше - может иногда, но достаточно быстро понижает скорость.&lt;br /&gt;&lt;br /&gt;проверим, что же будет, если соединить ноутбуки с airport express и передавать данные по wifi:&lt;br /&gt;&lt;br /&gt;mbp 2.33 &lt;=&gt; airport express 802.11n, &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;5GHz, WPA2&lt;/span&gt; &lt;=&gt; mbp 2.2&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;5 минут 17 секунд&lt;/span&gt;, средняя скорость &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;3.25&lt;/span&gt;, максимальная &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;4.4&lt;/span&gt; мегабайт в секунду&lt;br /&gt;&lt;br /&gt;mbp 2.33 &lt;=&gt; airport express 802.11n, &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;2.4GHz, WPA2&lt;/span&gt; &lt;=&gt; mbp 2.2&lt;br /&gt;12m7s 1.4 2.07 MB/s&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;12 минут 7 секунд&lt;/span&gt;, средняя скорость &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;1.4&lt;/span&gt;, максимальная &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;2.07 &lt;/span&gt;мегабайт в секунду&lt;br /&gt;&lt;br /&gt;mbp 2.33 &lt;=&gt; airport express 802.11n, &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;5GHz, no security&lt;/span&gt; &lt;=&gt; mbp 2.2&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;4 минуты 24 секунды&lt;/span&gt;, средняя скорость &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;3.9&lt;/span&gt;, максимальная &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;4.8&lt;/span&gt; мегабайт в секунду&lt;br /&gt;&lt;br /&gt;сильно лучше, скорость постоянна и, в целом, удовлетворительна, хотя до обещанных 150 и даже 300 мегабит совсем недотягивает. скорее, скорость такая же, как и в 100 мегабитном проводном канале. шифрование почти не оказывает влияния на скорость, а вот диапазон 5 гигагерц увеличивает скорость в два раза.&lt;br /&gt;&lt;br /&gt;в угоду дизайну, компактности и небольшому нагреву здесь принесли в жертву важные особенности экстремальной версии. при покупке мне казалось, что это экстремальная версия, но без гигабитного хаба, зато с музыкой; все оказалось сильно по другому. эти устройства дополняют друг друга, но не являются аналогами. в простейшем случае, когда вам нужно просто создать беспроводную сеть с выходом в интернет по кабельному модему, то airport express вам в этом отлично поможет. если вы захотите большего, как то проводная сеть или жесткий диск, который удобно разделить между беспроводными клиентами - вам придется купить airport extreme.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-156726087638901253?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/156726087638901253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=156726087638901253' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/156726087638901253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/156726087638901253'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/04/gigabit-and-airport-express-test.html' title='gigabit and airport express test'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-9024702092291334797</id><published>2008-02-28T06:28:00.000-08:00</published><updated>2008-09-03T00:20:30.078-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>DBD::mysql character set</title><content type='html'>порывшись некоторое время в документации mysql, я понял, что гарантированно выставить кодироку клиента, а именно character_set_client, character_set_results, character_set_connection в какую-то кодировку можно только с помощью «set names utf8». потому как не всегда есть возможность сменить кодировку в конфигурации сервера. теперь о том, если нет возможности использовать «set names».&lt;br /&gt;&lt;br /&gt;оказывается, DBD::mysql позволяет использовать некоторые дополнительные переменные при соединении, как то mysql_read_default_group и mysql_read_default_file. как это может помочь мне для установки кодировки данных для клиента:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;dbitest.pl:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/perl&lt;br /&gt;&lt;br /&gt;use strict;&lt;br /&gt;use DBI;&lt;br /&gt;&lt;br /&gt;print `mysql -e 'show variables' | grep char`;&lt;br /&gt;print "\n";&lt;br /&gt;&lt;br /&gt;my $conn_str = join ';', &lt;br /&gt;    'DBI:mysql:database=mysql',&lt;br /&gt;    'mysql_read_default_group=perl',&lt;br /&gt;    'mysql_read_default_file=/home/apla/my.cnf';&lt;br /&gt;&lt;br /&gt;my $d = DBI-&gt;connect($conn_str, "***", "***");&lt;br /&gt;my $s = $d-&gt;prepare ('show variables like "char%"');&lt;br /&gt;$s-&gt;execute;&lt;br /&gt;my $vars = $s-&gt;fetchall_arrayref;&lt;br /&gt;&lt;br /&gt;foreach (@$vars) {&lt;br /&gt; print "$_-&gt;[0] =&gt; $_-&gt;[1]\n";&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;my.cnf&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[perl]&lt;br /&gt;default-character-set=cp1251&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;соответственно, group  это то, что находится внутри квадратных скобок, то есть [group], а file - это если вы не хотите использовать стандартную конфигурацию, то можете использовать свою собственную. &lt;br /&gt;&lt;br /&gt;результат:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;perl dbitest.pl&lt;br /&gt;character_set_client latin1&lt;br /&gt;character_set_connection latin1&lt;br /&gt;character_set_database latin1&lt;br /&gt;character_set_filesystem binary&lt;br /&gt;character_set_results latin1&lt;br /&gt;character_set_server latin1&lt;br /&gt;character_set_system utf8&lt;br /&gt;character_sets_dir /usr/share/mysql/charsets/&lt;br /&gt;&lt;br /&gt;character_set_client =&gt; cp1251&lt;br /&gt;character_set_connection =&gt; cp1251&lt;br /&gt;character_set_database =&gt; latin1&lt;br /&gt;character_set_filesystem =&gt; binary&lt;br /&gt;character_set_results =&gt; cp1251&lt;br /&gt;character_set_server =&gt; latin1&lt;br /&gt;character_set_system =&gt; utf8&lt;br /&gt;character_sets_dir =&gt; /usr/share/mysql/charsets/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;mysql 5.0.26&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-9024702092291334797?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/9024702092291334797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=9024702092291334797' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/9024702092291334797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/9024702092291334797'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/02/dbdmysql-character-set.html' title='DBD::mysql character set'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-5454098238933029412</id><published>2008-02-25T14:10:00.000-08:00</published><updated>2008-02-25T14:19:31.775-08:00</updated><title type='text'>good, bad and ugly</title><content type='html'>обращаться с клиентом можно по разному. можно уважать пришедшего к тебе человека, можно просто менять деньги на товар, а можно плевать. мне хочется рассказать о тех фирмах, что вызвали у меня эмоции при обслуживании, как приятные, так и нет.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;abn.ru&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;месяц назад я решил купить себе переключатель монитор/клавиатура/мышь, потому как компьютеров в доме становится больше, а покупать на каждый из них монитор - расточительно и бессмысленно. особенно на тот, который стоит на антресоли. в силу того, что цена на подобные устройства с нужными мне характеристиками (dvi, usb, 4 компьютера) отличаются в разы, то решил попробовать самый дешевый - ведь если будет работать, то какая мне разница, сколько он стоил. поехал в abn.ru. сама фирма занимается сетями, кабелем и всем, что с этим связано. офис сответствующий:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://the-singlers.us/images/abn.ru/content/bin/images/large/DSC_0846.jpg"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://the-singlers.us/images/abn.ru/content/bin/images/large/DSC_0850.jpg"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://the-singlers.us/images/abn.ru/content/bin/images/large/DSC_0851.jpg"/&gt;&lt;br /&gt;&lt;br /&gt;устройство, которое я получил, оказалось нерабочим. отдал назад, на тестирование. тест подтвердил нерабочесть устройства. теперь самое вкусное: менеджер сказал, что у них на складе есть еще одно такое же и они его привезут, протестируют и отдадут мне, если со вторым будет все в порядке. чтобы мое время не терять.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;sunrise.ru&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;моя жена работает в том же здании, где находится магазин sunrise. несколько раз, когда я ее провожал, мне было удобно заказать пару железяк поутру и, получив их, поехать на работу. удачно закупился я там всего один раз. вообще, пожалуй, стоит немножко детально рассказать о самом магазине. санрайз - огромный склад. и люди, которые им управляют, наверное, никогда не видели, как санрайз работает с покупателями. купить в санрайзе можно тремя способами: собственно, приехав на склад, через ряд киосков с терминалами, где можно сделать заказ, оплатить его и приехать через несколько дней за покупкой (санрайз-лайт) и online-shop санрайза. &lt;br /&gt;&lt;br /&gt;все эти три способа заказа между друг другом не связаны. и если санрайз-лайт отделен от склада по понятным причинам, то совершенно непонятно, почему нельзя сделать резерв в онлайн магазине, а потом забрать его в санрайз лайт или на складе. такой возможности просто нет. ха, а в ultra-online.ru, fcenter.ru, oldi.ru все это есть! так нафиг нам сдался санрайз? особенно с учетом того, что если хочется купить что-то, что появляется в продаже не очень часто, и после появления находится недолго, то вероятность купить это в санрайзе близка к нулю.&lt;br /&gt;&lt;br /&gt;в результате получается такая ситуация - либо ты должен приехать в санрайз-лайт, заказать, оплатить и ждать пару дней, пока все доедет (если доедет - тот, кто принимает заказ, тоже не может зарезервировать товар; в некоторых случаях звучит волшебная фраза «эту позицию заказать нельзя, потому как тут всего две штуки осталось»). либо нужно приехать на склад, зарезервировать (теперь новые условия - не меньше 1000 рублей в заказе), оплатить, и через час-три ожидания получить вожделенную железку. либо заказать через интернет магазин, из которого придет пеший ходок через три-четыре дня и оплатить сверх стоимости заказа 400 рублей за доставку (это больше примерно раза в два, чем в других компьютерных магазинах).&lt;br /&gt;&lt;br /&gt;если честно, то санрайз мне представляется удобным только в том случае, если есть карта постоянного покупателя со скидкой, там есть что-то очень нужное, ты любишь ездить за покупками по ночной москве или работаешь в том же здании.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;ultra-online.ru&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;по моему, самый лучший компьютерный магазин накрывается медным тазом. всем удобен - онлайн резервирование, низкие цены, &lt;strike&gt;широкий ассортимент&lt;/strike&gt;. если раньше можно было купить все, начиная от электрозубощетки до sata кабеля с подсветкой, то теперь худо-бедно можно компьютер собрать, но на этом все. очень жаль. с горя уеду в киев навсегда.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-5454098238933029412?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/5454098238933029412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=5454098238933029412' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/5454098238933029412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/5454098238933029412'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/02/good-bad-and-ugly.html' title='good, bad and ugly'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-8197358240124969014</id><published>2008-02-24T12:39:00.000-08:00</published><updated>2008-02-24T13:12:27.935-08:00</updated><title type='text'>traveler laser: part II</title><content type='html'>в целом, как оказалось, мышь вполне приличная, и вполне прилично слизана с apple mighty mouse. но не без неприятностей:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. верхняя часть не разбита на кнопки, поэтому часто при нажатии нажимаются обе кнопки, одна за другой.&lt;/div&gt;&lt;div&gt;2.1. скролл работает горизонтально и вертикально, но по диагонали - не работает. горизонтальному скроллу для работу нужна mac os x 10.5.2 или драйвера под windows.&lt;/div&gt;&lt;div&gt;2.2. скролл в силу его оптической сущности не имеет тактического отклика. кроме того, палец не скользит по прозрачному пластику скролла, поэтому при прокрутке на несколько строк палец тормозит, при быстром же движении помех нет. результат - промотать на половину страницы не удается - либо на пару строк, либо на пару страниц. привыкаешь, но неудобно. так и не смог привыкнуть за две недели &lt;/div&gt;&lt;div&gt;2.3. светодиод в скролле разместили неудачно, в некоторых положениях он светит рямо в глаза. несильно, но неприятно. если бы он светил от пользователя, нареканий не было бы.&lt;/div&gt;&lt;div&gt;3. мышка обладает оптическим разрешением в 1600 dpi. это значит, что я за ней не успеваю. есть режим 800 dpi, включаемый долгим нажатием на кнопку с сенсором скролла, но режим не сохраняется между перезагрузками. &lt;/div&gt;&lt;div&gt;4. неудачный, чрезвычайно тонкий кабель. при моей аккуратности такие кабеля рвутся «на раз». поменял со старым genius netscroll, теперь вроде оторвать будет сложно.&lt;/div&gt;&lt;div&gt;5. драйвера в windows ставятся в папку c:\Genius и нет возможности выбрать другую папку. к счастью, не все производители так делают, потому как иначе было бы пользоваться диском c: невзможно.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;сравнивать traveler laser с mighty mouse глупо - это две похожие мышки, но похожи они лишь внешне. стоимость mighty mouse вполне компенсируется удобством пользования; в то же время, . genius traveler laser - дешевая имитация с прикольным оптическим скроллом, которым неудобно пользоваться. если на скроллинг наплевать (я на работе использую apple wireless mouse), то мышь вполне комфортная.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;поэтому genius следут сделать несколько простых вещей для того, чтобы мышью было бы пользоваться удобно:&lt;/div&gt;&lt;div&gt;1. разделить кнопки&lt;/div&gt;&lt;div&gt;2. переместить светодиод оптического скролла от пользователя&lt;/div&gt;&lt;div&gt;3. сделать пластик на скролле другим, так чтобы движению пальца не было помех&lt;/div&gt;&lt;div&gt;4. сделать переключатель dpi на дне мыши&lt;/div&gt;&lt;div&gt;5. заменить провод на менее хлипкий&lt;/div&gt;&lt;div&gt;6. доделать софт&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-8197358240124969014?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/8197358240124969014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=8197358240124969014' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/8197358240124969014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/8197358240124969014'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/02/traveler-laser-part-ii.html' title='traveler laser: part II'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-569813422985060861</id><published>2008-01-29T05:24:00.000-08:00</published><updated>2008-01-29T05:42:19.323-08:00</updated><title type='text'>traveler laser with 4d scroll against apple wireless mouse</title><content type='html'>&lt;h3&gt;или мышь-батискаф против мыши-мыла&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;вообще, мне нравятся оригинальные, привлекательные вещи. поэтому я стараюсь не использовать (и не покупать) то, что меня не привлекает. часто в техническом плане сложно выдержать какую-то эстетику, кроме функциональной, особенно инженеру на китайском заводе. и в то же время, многие производители начали понимать, что чем ближе техника к человеку, тем более эмоциональной должна быть покупка. например, сравните:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.trendnet.com/image/products/photo/TEW-510apb.jpg"/&gt;&lt;br /&gt;&lt;img src="http://www.trendnet.com/image/products/photo/TEW-633GR_1.jpg"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;и если раньше техника эппл была единственной эмоциональной техникой, то сейчас множество компьютерной техники становится такой. производителям, конечно же, сильно не хватает понимания что и как делать, и по свежекупленной мышке видно, что к дизайну ее приложил руку производитель китайских маек с крутыми надписями на груди, но лет через десять…&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://the-singlers.us/images/traveler-laser-a.jpg"/&gt;&lt;br /&gt;&lt;img src="http://the-singlers.us/images/traveler-laser-b.jpg"/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-569813422985060861?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/569813422985060861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=569813422985060861' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/569813422985060861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/569813422985060861'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/01/traveler-laser-with-4d-scroll-against.html' title='traveler laser with 4d scroll against apple wireless mouse'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-8217529883772469271</id><published>2008-01-28T00:03:00.000-08:00</published><updated>2008-01-28T00:05:34.938-08:00</updated><title type='text'>leopard server alternative disc image</title><content type='html'>&lt;img src="http://the-singlers.us/images/leopard-server.png" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-8217529883772469271?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/8217529883772469271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=8217529883772469271' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/8217529883772469271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/8217529883772469271'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/01/leopard-server-alternative-disc-image.html' title='leopard server alternative disc image'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-6226276274347565196</id><published>2008-01-22T21:20:00.000-08:00</published><updated>2008-01-22T21:25:14.511-08:00</updated><title type='text'>antibacterial waterresistant keyboard</title><content type='html'>решил себе купить клавиатуру для компа с вирусами и играми. я помню, что клавиатуры были сначала mitsumi и chicony, потом появились виндовс кмопки, мультимедия, беспроводность, идиотская ноутбучная раскладка, скроллер для мыши и вот теперь новый шик - антибактериальная, не боящаяся воды клавиатура. я вот все думал, зачем. все же просто - это клавиатуры специально для дрочеров - подрочил, помыл клавитуру.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-6226276274347565196?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/6226276274347565196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=6226276274347565196' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/6226276274347565196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/6226276274347565196'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/01/antibacterial-waterresistant-keyboard.html' title='antibacterial waterresistant keyboard'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-1935786201019431938</id><published>2008-01-22T04:22:00.000-08:00</published><updated>2008-01-22T11:34:22.108-08:00</updated><title type='text'>leopard persistent vpn</title><content type='html'>&lt;p&gt;в принципе, по сравнению с &lt;a href="http://wuff--wuff.blogspot.com/2007/05/mac-os-x-pptp-persistent-connection.html"&gt;тигром&lt;/a&gt; ничего не поменялось разительно, но в силу отсутствия /etc/rc нужно поместить в крон суперюзера строчки, которые будут поднимать vpn при загрузке системы. в терминале:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;sudo crontab -e&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;вводим административный пароль;&lt;br /&gt;потом две строчки&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;*/10 * * * * /etc/ppp/check-and-reconnect.sh&lt;br /&gt;@reboot      /usr/sbin/pppd plugin PPTP.ppp remoteaddress vpn.corbina.ru logfile /var/log/ppp.log user USERNAME password PASSWORD defaultroute usepeerdns persist maxfail 0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;еще по умолчанию в леопарде &lt;strike&gt;не работают правила для ipfw, поэтому единственный способ расшарить интернет соединение - это использовать IPNetRouterX; будем надеяться, что в 10.5.2 они все это починят.&lt;/strike&gt; natd зачем-то сбрасывает значение net.inet.ip.forwarding, посему следует изменить внутренности скрипта /etc/ppp/ip-up, если вы им пользовались в моей редакции, согласно &lt;a href="http://wuff--wuff.blogspot.com/2007/05/mac-os-x-pptp-persistent-connection.html"&gt;обновленной инструкции для тигра&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-1935786201019431938?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/1935786201019431938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=1935786201019431938' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/1935786201019431938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/1935786201019431938'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2008/01/leopard-persistent-vpn.html' title='leopard persistent vpn'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-4076046666454283576</id><published>2007-12-12T23:03:00.000-08:00</published><updated>2007-12-12T23:26:12.644-08:00</updated><title type='text'>speedup</title><content type='html'>&lt;h3&gt;postgresql&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;в последнее время на &lt;a href="http://seorate.ru/"&gt;проекте&lt;/a&gt; замечались некислые такие тормоза. они наблюдаются до сих пор, но их количество сильно уменьшено. часть из них, оказывается, была связана с тем, что postgresql по умолчанию настроен так, чтобы запускаться на 200 пентиуме с 128 мегабайтами оперативки. соответственно, даже на минимальных запросах он безбожно тормозит. 10 строк счастья:&lt;br /&gt;&lt;br /&gt;max_connections = 5 # на локальной машине мне совсем незачем 20 процессов постгреса&lt;br /&gt;shared_buffers = 32MB # required&lt;br /&gt;max_prepared_transactions = 10 # только если есть prepared transactions и то не уверен что работает так, как нужно&lt;br /&gt;work_mem = 16MB &lt;br /&gt;max_fsm_pages = 204800&lt;br /&gt;&lt;br /&gt;random_page_cost = 2.0 # required, сильно ускоряет работу, если у вас быстрый диск&lt;br /&gt;cpu_tuple_cost = 0.001 # required, у нас быстрый процессор и их даже несколько&lt;br /&gt;cpu_index_tuple_cost = 0.0005 # required, как и выше&lt;br /&gt;cpu_operator_cost = 0.00025 # required, как и выше&lt;br /&gt;effective_cache_size = 64MB # required, позволяет использовать кэш операционной системы&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;berkeleydb&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;кто-то говорил о том, что берклидб - быстрая? может быть, но в обычном применении в perl, когда ее используют как tie MLDBM+Storable - она просто пиздец какая тормозная.&lt;br /&gt;&lt;br /&gt;я тут сравнил скорость tie MLDBM и SQLite, где в SQLite создается табличка из двух колонок. и ужаснулся.&lt;br /&gt;&lt;br /&gt;1. SQLite быстрее пишет свои файлы, чем tie свои читает;&lt;br /&gt;2. разница в скорости записи - четыре раза, чтения - почти два раза, размер файла - полтора и все в пользу SQLite;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dev.the-singlers.us/dbd-bdb-compare.pl"&gt;тест&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-4076046666454283576?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/4076046666454283576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=4076046666454283576' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/4076046666454283576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/4076046666454283576'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2007/12/speedup.html' title='speedup'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-2366347033362485767</id><published>2007-10-26T16:14:00.000-07:00</published><updated>2007-10-30T07:26:35.234-07:00</updated><title type='text'>64 bit in leo</title><content type='html'>если вы хотели бы увидеть полностью 64 bit систему, то можете себе поставить linux или freebsd. опять же, что для вас 64 bit - это просто очередная галочка или вам это реально нужно?&lt;br /&gt;&lt;br /&gt;посмотрим на это с практической точки зрения. в той инсталляции, которая сейчас работает у меня - только apache2 web server работает как 64 bit приложение. основное преимущество 64 bit приложений в том, что они могут адресовать намного больше памяти, но за это приходится платить. все указатели, которые создаст приложение, будут занимать в два раза больше памяти. это легко показать на примере простого приложения, выполненного внутри апач.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://aplateka.net/images/leo/64/mem64bit.png"&gt;&lt;img src="http://aplateka.net/images/leo/64/mem64bit.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;скучные подробности&gt;&lt;br /&gt;у нас есть апач и мод_перл. мы создадим процесс апач, в котором мод_перлу укажем использовать массив на 10 миллионов элементов. потом избавимся от 64 bit части в апач и повторим процедуру. каждый раз внутри перла будет выполнена программа ps, которая нам расскажет, сколько памяти мы смогли сожрать.&lt;br /&gt;&lt;!--скучные подробности--&gt;&lt;br /&gt;&lt;br /&gt;все измерения производятся в /tmp&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;b&gt;cd /tmp&lt;br /&gt;cat &gt;/tmp/test.httpd.conf&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ServerName 127.0.0.1&lt;br /&gt;ServerAdmin aaa@bbb.com&lt;br /&gt;Listen 50081&lt;br /&gt;ServerRoot /tmp/&lt;br /&gt;DocumentRoot /tmp/&lt;br /&gt;User  _www&lt;br /&gt;Group _www&lt;br /&gt;ErrorLog error_log&lt;br /&gt;LoadModule perl_module /usr/libexec/apache2/mod_perl.so&lt;br /&gt;&lt;perl&gt;&lt;br /&gt;my $a = [];&lt;br /&gt;$a-&gt;[50_000_000] = 1;&lt;br /&gt;print `ps -o rss -p $$`, "\n";&lt;br /&gt;die;&lt;br /&gt;&lt;/perl&gt;&lt;br /&gt;^D&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;b&gt;lipo -info /usr/sbin/httpd&lt;/b&gt;&lt;br /&gt;Architectures in the fat file: /usr/sbin/httpd are: ppc7400 ppc64 i386 x86_64&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;b&gt;lipo /usr/sbin/httpd -output /tmp/httpdi386 -extract i386&lt;/b&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;b&gt;lipo -info httpdi386&lt;/b&gt;&lt;br /&gt;Architectures in the fat file: httpdi386 are: i386&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;b&gt;sudo /usr/sbin/httpd -f /tmp/test.httpd.conf&lt;/b&gt;&lt;br /&gt;RSS&lt;br /&gt;393356&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;b&gt;sudo /tmp/httpdi386 -f /tmp/test.httpd.conf&lt;/b&gt;&lt;br /&gt;RSS&lt;br /&gt;197808&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;то есть явно видно, что процесс, который оперирует 64bit указателями, использует почти в два раза больше памяти. совершенно точно, что если такой процесс будет использовать менее 4гигабайт оперативной памяти, то эффективность использования такого процесса будет стоять под большим вопросом - он съест вдвое больше памяти и будет работать медленнее за счет большего количества операций с памятью.&lt;br /&gt;&lt;br /&gt;в то же время, процессы, которым нет нужды оперировать с большим количеством объектов, например Preview.app, вполне может себе позволить быть 64bit, потому как он не сильно вырастет в памяти.&lt;br /&gt;&lt;br /&gt;теперь давайте посмотрим на то, что нам покажет activity monitor. в текущем состоянии с небольшим количеством процессов приложения потребляют половину оперативной памяти.  и при этом они 32 bit. если все они будут 64 bit, то количество свободной памяти уменьшится. и если в отношении (картинка ниже) VLС, Terminal и TextEdit при пересборке под 64bit потребление памяти почти не увеличится, то насчет остальных программ я этого сказать не могу, потому как они используют множество объектов.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://aplateka.net/images/leo/64/memusage.png"&gt;&lt;img src="http://aplateka.net/images/leo/64/memusage.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;для того, чтобы не быть голословным, я собрал пример из /Developer/Examples/WebKit/MiniBrowser для двух архитектур и запустил. в каждом из них рендерится по одной странице (http://apple.com/). разница в размере занимаемой памяти отличается от 20 до 100%. это потому, что браузеры используют множество объектов.&lt;br /&gt;&lt;br /&gt;до загрузки страницы&lt;br /&gt;&lt;a href="http://aplateka.net/images/leo/64/memempty.png"&gt;&lt;img src="http://aplateka.net/images/leo/64/memempty.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;после загрузки страницы&lt;br /&gt;&lt;a href="http://aplateka.net/images/leo/64/memdiff.png"&gt;&lt;img src="http://aplateka.net/images/leo/64/memdiff.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;поэтому, в большинстве GUI приложений, пользователь не получает выигрыша от использования в приложении 64bit. поэтому только некоторые серверные приложения собраны с поддержкой 64bit. но не все так плохо.&lt;br /&gt;&lt;br /&gt;если у вас есть процессы, оперирующие с данными, которые занимают в памяти больше четырех гигабайт и у вас есть mac pro или xserve, то это будет для вас очень хорошо. потому что вместо загрузки данных частями по два гига приложение сможет загрузить в память все, что вам нужно (если у вас есть достаточно памяти).&lt;br /&gt;&lt;br /&gt;другой выигрыш от этой архитектуры вы можете получить при математических рассчетах и сравнении строк. то есть Photoshop и Maya только выиграют. выиграют базы данных и веб сервера. выиграет профессиональное использование, а обычный пользователь ничего не заметит.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-2366347033362485767?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/2366347033362485767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=2366347033362485767' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/2366347033362485767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/2366347033362485767'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2007/10/64-bit-64-bit-linux-freebsd.html' title='64 bit in leo'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-8428087797563957399</id><published>2007-09-22T20:35:00.000-07:00</published><updated>2007-09-24T01:29:01.497-07:00</updated><title type='text'>leopard vs tiger</title><content type='html'>первой mac os x, с которой я работал, была версия 10.3. после linux все было несколько странно, но в целом приемлемо, и, даже, очень неплохо. год отработав на своем ноутбуке под 10.3, я решил сменить операционку на 10.4, благо что она только что вышла.&lt;br /&gt;&lt;br /&gt;трансфер был мучительный, потому что новый софт был несовместим со старым. чего стоит хотя бы новый quicktime 7, к которому не было плагинов, ноутбук, не возвращающийся из sleep, если подключена хотя бы одна samba share.&lt;br /&gt;&lt;br /&gt;проблем была масса, но и обновлений тоже было немало. dashboard и automator, spotlight и smart folders в finder, address book, mail. новый isync с поддержкой нового железа, новый safari, который наконец смог заменить ie 5.2&lt;br /&gt;&lt;br /&gt;10.4 - это к тому же первая система, портированная на intel. вместе с портированием на intel в mac os x появился bootcamp, photobooth, itunes с coverflow, front row. это уже была не 10.4, а нечто большее, благо что изменений не на одну major версию наберется.&lt;br /&gt;&lt;br /&gt;сейчас я сижу и рассматриваю mac os x 10.5 и что-то мне кажется, что джобс всех &lt;b&gt;омбанул&lt;/b&gt;. реально новых приложений - всего 3: spaces, time machine, podcast capture. изменения интерфейса вобрали в себя некоторые моменты дополнительно устанавливаемого софта на 10.4.&lt;br /&gt;&lt;br /&gt;все стало симпатичнее, многое стало лучше и понятнее работать, но если tiger по сравнению с panther это три шага вперед, то leopard - визуально этот даже один шаг не смог вытянуть. тем более странно смотреть на 300+ фич, которые отличают леопард от тигра.&lt;br /&gt;&lt;br /&gt;через сутки после начала работы на новом релизе я понял, что в леопарде больше скрытого, чем открытого глазу. netinfo manager? его больше нет. нет ни графического интерфейса, ни утилит, доступных через терминал. его полностью вырезали, заменив directory services. точнее, netinfo остался, но интерфейс к нему полностью сменился. lookupd? его тоже больше нет. вместо него directory service cache manager. /etc/rc? канул в лету. на его месте allmighty  launchd. java? для java становится все меньше программных интерфейсов. еще в тигре apple отказалась поддерживать нативные классы для  java. теперь модно программировать на ruby, в том числе и gui. universal binary? да, но они стали еще универсальнее. вместо архитектур i386 и ppc в тигре  во всех поставляемых с леопардом бинарников аж четыре архитектуры: ppc7400 ppc64 i386 x86_64. и леопард не умеет запускаться под g3 и ранними g4 вообще. потому что запускаемого кода под такую платформу не содержит.&lt;br /&gt;&lt;br /&gt;хотя, наверное, в теперешнем состоянии 10.5 совсем хороша. у нее нет множества детских проблем предыдущих версий (например, с сетью). интерфейс отполирован и лишился своей полосатости. улучшать систему можно, но особенно некуда. если раньше имело значение количество галочек, которые отмечают залатанные бреши отсутствующего софта, то теперь нужно переходить к доводке напильником и полировке. потому что под mac os x есть практически все, что нужно.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-8428087797563957399?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/8428087797563957399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=8428087797563957399' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/8428087797563957399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/8428087797563957399'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2007/09/leopard-vs-tiger.html' title='leopard vs tiger'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-4624638729150460513</id><published>2007-09-22T04:33:00.000-07:00</published><updated>2007-09-22T23:02:11.789-07:00</updated><title type='text'>performance testing</title><content type='html'>&lt;p&gt;некоторое время назад один человек рассказал о том, что в mac os x невозможно оперировать с 250 000 файлов в одной директории. конечно, делать так - это бред, но мне стало интересно, действительно ли оно так. при этом, этот же человек уверял, что в виндовс все в порядке и никаких проблем с этим нет.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;скрипт:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/perl&lt;br /&gt;&lt;br /&gt;use strict;&lt;br /&gt;&lt;br /&gt;local $/;&lt;br /&gt;&lt;br /&gt;my $file = $ARGV[0];&lt;br /&gt;my $dir  = $ARGV[1];&lt;br /&gt;&lt;br /&gt;die 'can\'t open file' unless open IN, $file;&lt;br /&gt;&lt;br /&gt;binmode IN;&lt;br /&gt;my $content = &lt;$file&gt;;&lt;br /&gt;&lt;br /&gt;close IN;&lt;br /&gt;&lt;br /&gt;foreach my $counter (0 .. 300000) {&lt;br /&gt;  print "$counter\n"&lt;br /&gt;      if $counter % 10000 == 0;&lt;br /&gt;&lt;br /&gt;  die 'can\'t open file for writing'&lt;br /&gt;      unless open OUT, '&gt;', "$dir/$counter.png";&lt;br /&gt;  binmode OUT;&lt;br /&gt;&lt;br /&gt;  print OUT $content;&lt;br /&gt;&lt;br /&gt;  close OUT;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;все тестировалось в фаловой системе hfs+ для mac os x, ntfs для windows xp sp2&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;создание файлов в виндах и mac os x заняло примерно 2-3 минуты (windows time /t не выводит секунды)&lt;br /&gt;время показа содержимого директории в finder и explorer - 4-5 минут. короче, не делайте так и будет вам счастье.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;P.S.: far всю ночь удалял файлы из директории, потому что эксплорер выдавал sharing violation при попытке удаления папки. и до сих пор еще не справился. под mac os x в finder все произошло достаточно быстро (10 минут), хотя файндер перед перемещением в корзину очень уж долго считал считал файлы.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-4624638729150460513?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/4624638729150460513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=4624638729150460513' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/4624638729150460513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/4624638729150460513'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2007/09/performance-testing.html' title='performance testing'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-5378732041948930432</id><published>2007-08-29T21:00:00.000-07:00</published><updated>2007-08-29T21:02:19.255-07:00</updated><title type='text'>mac os security guidelines</title><content type='html'>&lt;span style="font-size:180%;"&gt;безопасность в mac os x&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;для параноиков: мне придется вас огорчить. не существует и не будет существовать системы, которая при наличии сетевого соединения позволит вам чувствовать себя уверенным.&lt;br /&gt;&lt;br /&gt;для всех остальных: всегда есть что терять. если вам не жаль историю посещения сайтов или программу, которую вы установили вчера, то у вас наверняка найдется звуковая дорожка, видео или фотография, которые вам очень дороги и второй копии у вас не найдется. за время своей работы с компьютерами я три раза терял все данные из-за сбоя оборудования и данные по частям по мере смены операционных систем, компьютеров, телефонов и ошибок в программах. это очень неприятно. мне хочется рассказать вам, как части из этих напастей можно избежать.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;немного теории&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;вирусы и прочее могут нарушить стабильность и целостность системы, создать нежелательный сетевой трафик. в mac os x по умолчанию сложнее нарушить целостность системы за счет удаления и подмены системных файлов по сравнению с windows. потому что в windows xp системная папка защищена намного слабее - в ней можно удалять и перемещать файлы.&lt;br /&gt;&lt;br /&gt;нежелательный сетевой трафик создает большинство современных приложений. например, microsoft office 2004 при запуске «смотрит» по локальной сети, не стоит ли рядом такой же microsoft office с таким же серийным номером. желание производителя защититься понятно, но это не то, что нужно пользователю. coolbook при регистрации отправляет серийный номер вашего ноутбука по незащищенному соединению. itunes показывает по умолчанию itunes music store, хотя в россии купить в нем музыку невозможно. если вы платите за трафик, то вас может удивить, насколько много трафика потребляют проверки обновлений программ.&lt;br /&gt;&lt;br /&gt;все это можно заблокировать с помощью настроек программ или, если настроек нет,  ipfw (System Preferences/Sharing/Firewall) и LittleSnitch.&lt;br /&gt;&lt;br /&gt;стабильность системы без приложений достаточно высока. то есть, если вы только что установили операционную систему и не ставили никаких дополнительных приложений, то вероятность того, что вы потеряете данные, очень мала. чем больше у вас установлено приложений, тем более вероятна потеря данных, меньшая отзывчивость системы («у меня компьютер тормозит») или ее неожиданное поведение («у меня по контрол-пробел включается itunes и spotlight. как сделать так, чтобы айтюнс не загружался по этой комбинации?»). поэтому устанавливайте только то, что реально необходимо.&lt;br /&gt;&lt;br /&gt;к сожалению, совершенно неважно, какие приложения у вас установлены. потому что мне и вам приходится пользоваться сторонним софтом, исходники которого недоступны и контролировать запуск каждого приложения не представляется возможным. стабильность, то есть нежелательное поведение программ, относится уже не к системе, а к самому пользователю. потому как запускать все, что выкачал из интернет, будет именно пользователь. и я считаю пользователя, в том числе и умудренного опытом, стократ разрушительнее самого крутого вируса. тут не спасут ни антивирусы, ни firewall. то есть основная причина появления вирусов, троянов и тому подобного - это действия пользователя.&lt;br /&gt;&lt;br /&gt;причем этим пользователем можете быть совсем не вы. кошка, прошедшая по клавиатуре, однажды выключила мой интернет сервер. те, кто могут находиться рядом с вами, могут случайно удалить файлы или набранный за день текст совершенно случайно.&lt;br /&gt;&lt;br /&gt;единственное, как можно защитить действительно ценную информацию - это резервное копирование.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;внутренние средства системы&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;с помощью настроек системы вы можете немного обезопасить себя от случайных и намеренных потерь данных.&lt;br /&gt;&lt;br /&gt;запускаем яблочное меню -&gt; System Preferences&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;раздел Security&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;filevault позволит вам зашифровать вашу домашнюю директорию.&lt;br /&gt;&lt;br /&gt;я считаю, что использование filevault на компьютере оправдано лишь в том случае, если на нем есть действительно ценные данные, которые никто не должен увидеть. потому что если вы забудете пароль и master password, то и про данные тоже забудьте. включайте на свое усмотрение и под свою ответственность.&lt;br /&gt;&lt;br /&gt;require password to wake … - хорошая  опция для всех, кто дорожит своими данными и не сидит в гордом одиночестве в 100-метровом бункере под землей. с помощью этой опции у вас будет возможность вернуться к нетронутому рабочему столу после того, как вы решите сходить на кухню и попить чаю.&lt;br /&gt;&lt;br /&gt;disable automatic login - после загрузки будет показан список пользователей и нужно будет выбрать одного из них.&lt;br /&gt;&lt;br /&gt;require password to unlock … - с помощью System Preferences вы можете сделать многое. даже слишком многое. с установкой этой опции для некоторых небезопасных вещей вам придется ввести пароль.&lt;br /&gt;&lt;br /&gt;log out ater … - не рекомендую. возможна потеря данных.&lt;br /&gt;&lt;br /&gt;use secure virtual memory - не рекомендую. сильное снижение скорости работы. но если вы решили включить filevault - то эта опция сделает вашу машину защищеннее.&lt;br /&gt;&lt;br /&gt;Dashboard and Expose&lt;br /&gt;&lt;br /&gt;Active Screen Corners&lt;br /&gt;каждый раз, когда я отлучаюсь от компьютера, я блокирую его с помощью скринсэйвера. чтобы облегчить эту задачу, я установил для правого верхнего угла экрана опцию Start Screen Saver&lt;br /&gt;&lt;br /&gt;Accounts&lt;br /&gt;&lt;br /&gt;Change Password - установите пароль. хотите совет? откройте книжку со стихами и выучите одну из строк наизусть. и используйте ее в качестве пароля. взломать компьютер намеренно очень просто, если у вас в качестве пароля стоит день рождения или имя собаки.&lt;br /&gt;&lt;br /&gt;Sharing&lt;br /&gt;&lt;br /&gt;вкладка Services&lt;br /&gt;&lt;br /&gt;рекомендую оставить только Windows Sharing. и Printer Sharing, если у вас стоит общий принтер на несколько компьютеров. но тогда печатать на вашем принтере сможет любой человек из «вашей» сети. например, если ваш провайдер - корбина и интернет раздается другим компьютерам через макинтош с принтером, при включенном Printer Sharing вашим принтером сможет воспользоваться весь ваш район.&lt;br /&gt;&lt;br /&gt;вкладка Firewall&lt;br /&gt;&lt;br /&gt;firewall должен быть включен всегда. без вариантов. это позволит защититься от большей части атак извне.&lt;br /&gt;&lt;br /&gt;Software Update&lt;br /&gt;&lt;br /&gt;если вы включите проверку обновлений раз в неделю и будете устанавливать обновления, то это с большой вероятностью защитит вас от злоумышленников, которые будут ломить сквозь бреши в системе безопасности.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;сторонний софт&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;LittleSnitch&lt;br /&gt;&lt;br /&gt;позволит вам пресечь трафик некоторых программ, которым для работы не нужно лезть в интернет.&lt;br /&gt;&lt;br /&gt;AppFresh&lt;br /&gt;&lt;br /&gt;сделает архив приложений, которыми вы пользуетесь, чтобы в случае неприятностей восстановить рабочую версию.&lt;br /&gt;&lt;br /&gt;Carbon Copy Cloner&lt;br /&gt;&lt;br /&gt;позволит вам сделать точную копию рабочей системы&lt;br /&gt;&lt;br /&gt;Firefox + AdBlock Plus + flashblock&lt;br /&gt;&lt;br /&gt;позволит вам не смотреть рекламу на сайтах. для Safari есть подобное решение (PithHelmet), но за деньги.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-5378732041948930432?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/5378732041948930432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=5378732041948930432' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/5378732041948930432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/5378732041948930432'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2007/08/mac-os-security-guidelines.html' title='mac os security guidelines'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-5138145131720523121</id><published>2007-08-24T21:06:00.000-07:00</published><updated>2007-09-22T04:02:28.661-07:00</updated><title type='text'>coolbook</title><content type='html'>&lt;span style="font-size:130%;"&gt;об отсылке персональных данных с компьютера при регистрации, и о деньгах, которые платятся за уменьшение стабильности системы.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;есть такой софт - coolbook, позволяет охладить пыл macbook и macbook pro. в силу того, что я решил отдохнуть недельку в киеве, а температура держится тут на очень высоком уровне, то нужно было как-то бороться с жарой.&lt;br /&gt;&lt;br /&gt;coolbook без регистрации ничего не дает сделать, только посмотреть текущий вольтаж на процессоре и частоту. с ним поставляются два документа как пользоваться и руководство по понижению вольтажа процессора, и одна ссылка на cputest, который позволяет проконтролировать работу процессора после понижения вольтажа.&lt;br /&gt;&lt;br /&gt;я решил посмотреть, что будет, если нажать кнопку регистрации. coolbook поперся в интернет по незащищенному http, отправил first name, last name и activation code. я решил посмотреть, что еще он отправит, и для этого завернул с помощью firewall трафик, который идет на сервер регистрации, на локальный апач. оказывается, после первого запроса coolbook получает количество оставшихся лицензий. а потом отсылает на свой сервер серийный номер ноутбука. так мы не договаривались, посему я загрузил xcode tools и с помощью дебаггера два раза отредактировал регистр eax в процессе выполнения процедуры doRegistration. coolbook решил, что все в порядке и я стал зарегистированным пользователем.&lt;br /&gt;&lt;br /&gt;после часа тестирования (и постоянных перезагрузок) на каком же минимальном напряжении сможет работать мой процессор, выяснилось что таких напряжений два: .95 вольта для 1.67GHz и 1.025 вольта для 2.0GHz. естественно, все тестировалось с помощью CPUTest. хорошо, пускай так и будет. через некоторое время я запустил импорт фото с помощью adobe lightroom - перезагрузка. повышение вольтажа, потом снова импорт фото. в итоге оказалось, что для 2GHz стабильное напряжение будет 1.1 вольта. а автор CPUTest и автор coolbook просто облажались с тестированием.&lt;br /&gt;&lt;br /&gt;итоги:&lt;br /&gt;&lt;br /&gt;работа ноутбука: кулер крутится медленнее, реже начинает «завывать» и температура без нагрузки ниже - почти такая же как под нагрузкой, но для powerbook 12". но под нагрузкой ноутбук точно так же обжигает колени, хотя и без страшного воя. разница при работе от аккумулятора почти незаметна, то есть ставить кулбук только для того, чтобы бук больше жил от аккумулятора - бесполезно.  дополнительно к coolbook можно поставить &lt;a href="http://homepage.mac.com/holtmann/eidac/software/page5/page5.html"&gt;smcFanControl&lt;/a&gt;, тогда температура еще немного уменьшится.&lt;br /&gt;&lt;br /&gt;программа отправляет по незащищенному протоколу серийный номер ноутбука и это никуда не годится.&lt;br /&gt;&lt;br /&gt;способ тестирования программы, предагаемый автором никуда не годится. то есть, после удачного тестирования вы можете получить чрезвычайно нестабильный под нагрузкой ноутбук.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-5138145131720523121?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/5138145131720523121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=5138145131720523121' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/5138145131720523121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/5138145131720523121'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2007/08/blog-post.html' title='coolbook'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3829104390250367241.post-6778184903051949351</id><published>2007-05-12T07:07:00.000-07:00</published><updated>2008-01-22T11:35:22.499-08:00</updated><title type='text'>mac os x pptp persistent connection</title><content type='html'>&lt;p&gt; &lt;span style="font-family:Arial,Helvetica;font-size:+1;"&gt;&lt;i&gt;&lt;b&gt;corbina и другие vpn провайдеры: как подключиться и расшарить интернет&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;предупреждение: вам придется перед тем, как сделать это, освоить терминал и редактирование файлов в нем (мне нравится vim, но я не стану объяснять вам как в нем работать. &lt;a href="http://community.livejournal.com/ru_mac/3022860.html#comments"&gt;инструкция для nano&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;по отдельности ничего работать не будет. сначала выполните все шаги.&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;примечание: если у вас все работает, то не стоит делать описанного ниже.&lt;br /&gt;&lt;br /&gt;если вам нужно только подключиться, выполняйте шаги с первого по третий. если нужно подключиться и расшарить, то&lt;br /&gt;&lt;br /&gt;шаг первый. /etc/rc.local&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;/usr/sbin/pppd plugin PPTP.ppp remoteaddress vpn.corbina.ru logfile /var/log/ppp.log user USERNAME password PASSWORD defaultroute usepeerdns persist maxfail 0&lt;br /&gt;/usr/libexec/InternetSharing&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;описание:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;важно&lt;/b&gt;: заменить USERNAME и PASSWORD на свои логин и пароль соответственно&lt;br /&gt;&lt;br /&gt;первая строка соединит вас с интернетом прямо при старте компьютера. при дисконнекте соединит заново&lt;br /&gt;а вторая строка расшарит этот интернет&lt;br /&gt;&lt;br /&gt;шаг второй. /etc/ppp/check-and-reconnect.sh&lt;br /&gt;&lt;pre&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;GOOGLE_CHECK=`/sbin/ping -c 10 -o google.com &amp;&amp;amp; echo ok`&lt;br /&gt;&lt;br /&gt;if [ "x$GOOGLE_CHECK" == "x" ] ; then&lt;br /&gt;       echo &gt;&amp;amp;2 "link failed"&lt;br /&gt;       kill -1 $(&lt; /var/run/ppp0.pid)&lt;br /&gt;fi&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;после того, как создали файл, в терминале выполните&lt;br /&gt;&lt;pre&gt;sudo chmod 755 /etc/ppp/check-and-reconnect.sh&lt;br /&gt;sudo chown root:wheel /etc/ppp/check-and-reconnect.sh&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;этот скрипт будет проверять соединение с гугл и при недоступности гугла пинать соединение с корбиной на предмет пересоединения&lt;br /&gt;&lt;br /&gt;шаг третий /var/cron/tabs/root&lt;br /&gt;&lt;pre&gt;*/10 * * * * /etc/ppp/check-and-reconnect.sh&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;после того, как создали файл, в терминале выполните&lt;br /&gt;&lt;pre&gt;sudo chmod 600 /var/cron/tabs/root&lt;br /&gt;sudo chown root:wheel /var/cron/tabs/root&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;примечание для флеймеров и эстетов: для crontab -e нужна установленная переменная EDITOR. объяснять, как ее устанавливать, я не хочу по причине, указанной в первом абзаце поста.&lt;br /&gt;&lt;br /&gt;примечание для тех, кому не нужно расшаривать интернет: теперь сохраняйтесь и перезагружайте машину. все должно работать.&lt;br /&gt;&lt;br /&gt;шаг четвертый. /etc/natd.conf&lt;br /&gt;&lt;pre&gt;same_ports yes&lt;br /&gt;use_sockets yes&lt;br /&gt;dynamic yes&lt;br /&gt;interface ppp0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;это позволит пакетам, переданным на машину с других машин, уходить в интернет (и обратно)&lt;br /&gt;&lt;br /&gt;шаг пятый. /etc/ppp/ip-up&lt;br /&gt;&lt;pre&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;IPFW='/sbin/ipfw'&lt;br /&gt;&lt;br /&gt;/usr/sbin/natd -f /etc/natd.conf&lt;br /&gt;$IPFW add 1001 divert natd all from any to any via $1&lt;br /&gt;&lt;br /&gt;$IPFW add 501 allow tcp from any to any in recv en1&lt;br /&gt;&lt;br /&gt;/usr/libexec/InternetSharing&lt;br /&gt;&lt;br /&gt;/usr/sbin/sysctl -w net.inet.ip.forwarding=1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;и еще /etc/ppp/ip-down&lt;br /&gt;&lt;pre&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;IPFW='/sbin/ipfw'&lt;br /&gt;&lt;br /&gt;$IPFW delete 1001&lt;br /&gt;&lt;br /&gt;$IPFW delete 501&lt;br /&gt;&lt;br /&gt;/usr/libexec/InternetSharing&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;после того, как создали файлы, в терминале выполните&lt;br /&gt;&lt;pre&gt;sudo chmod 755 /etc/ppp/ip-{up,down}&lt;br /&gt;sudo chown root:wheel /etc/ppp/ip-{up,down}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;важно&lt;/b&gt;: замените интерфейс en1 на тот, который у вас airport.&lt;br /&gt;&lt;br /&gt;описание: сие действо открывает после соединения ваш компьютер для атак через airport. а после рассоединения - закрывает. в принципе, вы можете удалить строчку с цифрой 501, но тогда на компьютерах, для которых вы расшариваете интернет, отключатся все сервисы, закрытые у вас в закладке firewall в секции shared ваших system preferences. но можете на этот текст не обращать внимания. потому что если кто-то сильно захочет, то сломает вашу машину даже с работающим файрволлом.&lt;br /&gt;&lt;br /&gt;после перезагрузки вы станете счастливым обладателем расшаренного интернета.&lt;br /&gt;примечание: или не станете.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3829104390250367241-6778184903051949351?l=wuff--wuff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wuff--wuff.blogspot.com/feeds/6778184903051949351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3829104390250367241&amp;postID=6778184903051949351' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/6778184903051949351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3829104390250367241/posts/default/6778184903051949351'/><link rel='alternate' type='text/html' href='http://wuff--wuff.blogspot.com/2007/05/mac-os-x-pptp-persistent-connection.html' title='mac os x pptp persistent connection'/><author><name>apla</name><uri>http://www.blogger.com/profile/09186789987135896876</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
