|
|
|
|
Пенсионная математика
Mon, 25 Jun 2018 21:47:19 GMT
|
В тему повышения пенсионного возраста, которое щас хотят внедрять наши горячо любимые вожди.
Можно заюзать вот такую математику.
Если предположить, что:
- пенсии субсидируются исключительно налогом с зарплат
- средняя зарплата в стране 36000 руб
- средняя пенсия в стране 14000 руб
- количество пенсионеров 30 %
- количество работающих 54 %
(все цифры взяты из интернетов, предположим что близки к реальности)
Тогда налог будет 14/36*30/54 = 21,6 %
Что характерно, весьма близко к реальности Д реальность 22 %.
С одной стороны, правда, в среднем в реальности меньше, так как всякие льготы и [регрессивнаяk шкала налога. С другой стороны, вроде и ПФР субсидируется не только налогом с зп. Ну и сам очевидно жрёт Д но поисследовать сколько он жрёт вопрос к исследователям типа ФБК ну и не знаю,Ц ФСБ там.
В общем, если так смотреть Д то вроде:
- по мне как-то не видно явной необходимости повышать возраст.
- реальная проблема России в низких зарплатах. из-за низких зарплат и пенсии низкие.
А, да, и ещё соответственно накопительная система была в принципе тоже логичным решением проблемы Д тогда типа убралось бы [усреднениеk Д у кого зп большая, была бы и пенсия большая (в теории), а у кого маленькая Д была бы и пенсия маленькая. Но [получилось как всегдаk, так как у будущих бабушек в усть-задрищенске зарплата мизерная, а содержать их надо (ну в принципе логично что надо Д вроде там этоЦ помощь незащищённым слоям населения и всё такое). Вот и закопали её видимо.
Но по сути правильное решение Д постараться обеспечить рост средней з/п по стране + оптимизировать нецелевые расходы ПФР (в России же живём, наверняка там их можно найти) + продолжать сколько-то субсидировать, наверное.
И ещё на самом деле сам этот налог Д для мелкого бизнеса идиотский совершенно. Вот допустим ты ИП и работаешь на себя Д платишь только фиксированный взнос 28000 в год в ПФР и 6 % налога с выручки.
А потом вдруг хочешь нанять ОДНОГО сотрудника и хренак!!! Сразу 43 % налога!!! Из которых 22 % это ПФР, 8 % прочее и 13 % НДФЛ. И ещё твои 6 % тоже ведь никуда не деваются.
Как-то это тупо, разрыв слишком огромный. Выходит либо никого не оформляй и работай в чёрную, либо оформляй на 10000 руб оклад и снижай ту самую среднюю з/п по стране, либо ищи где-то лишних 43 % бабла, что для мелкого бизнеса весьма проблематично.
Какой-то более мягкий переход должен быть, тогда мелочь повылезает из чёрных/серых окладов и небось и средняя з/п тоже повысится и фактические отчисления в ПФРЦ
|
|
ссылка | наверх
|
|
История одного просветления, произошедшего уже несколько лет назад
Thu, 14 Dec 2017 22:53:43 GMT
|
Надо запротоколировать Д прикольная история.
Когда я на это напоролся, у меня было, собственно, открытие Д я полностью прочувствовал, что PHP по дефолту не умеет обрабатывать 2 параллельных запроса от одного юзера.)))
Суть такая: в PHP сделано тупое, но надёжное решение для исключения параллельной записи данных одной сессии двумя процессами Д сессия тупо блокируется на весь период от её открытия до закрытия. А открывается она обычно в начале запроса Д а закрывается в конце.))
Следовательно, если никто ничего специально не предпринимал Д 2 параллельных запроса от одного и того же юзера пхп выполнять не умеет :) ну то есть, например, невозможно параллельно открыть нескольких вкладок с одного сайта Д они последовательно открываться будут.
Оно понятно, зачем сделано Д если не блокировать, то что окажется в итоге в сессии Д неизвестно Д два процесса могут писать в сессию параллельно и один может перезаписать данные другого. И оно обычно как бы не страшно, так как да, действительно сайтики редко кто так насилует, а если и насилует, то типа нефиг же Д типа, тоже мне кулхацкер, у нас тут и так 100500 юзеров параллельно, а ты ещё и свои запросы хочешь в параллель пускать, падла?!
И видимо, когда народ в PHP переключает сессию на redis и говорит, что всё стало [летатьk Д летать оно начинает именно потому, что redis хранилище сессий в пхп не делает блокировку Д не то что это его фича Д просто не умеет оно в блокировки :)
А вот теперь история, как я на это напоролся:
Ставил я VisualEditor (визуальный редактор для MediaWiki) и хотел его подружить с нашими правами (IntraACL). Для справки Д в VisualEditor википеды же тоже прилично извратились Д конфигурация там такая Д сама вики на PHP, но рядом, чисто для VisualEditorЙа, на сервер ставится node.js.
В котором выполняется parsoid, служащий бэкендом к VisualEditorЙу. Parsoid Д это частично переписанный на js парсер медиавики Д полностью не осилили и не осилят никогда, уж больно там говнокода много на него завязано.
И запросы идут через такую жопу: браузер -> PHP -> node.js -> (а дальше нода же хочет получить текст страницы, которую правишь) -> обратно запрос в PHP.
И по дефолту на втором запросе к PHP они его сессионную Cookie ему обратно не передавали. Соответственно, у нас из-за прав доступа отредактировать страницу не удавалось Д но зато эта конструкция вообще работала! :)
А когда я включил передачу куки юзера на этом запросе, чтобы нода читала текст страницы с учётом прав Д вся эта конструкция стала радостно повисать. Я чуть башку не сломал, а оказывается, это была как раз блокировка сессии. Второй запрос же [вложенk в первый и запускается в той же сессии => 2 ждёт, пока кончится 1, а 1 ждёт, когда закончится 2. Дедлок.
Вот тогда у меня и случилось просветление.))
А после внедрения в медиавики неблокирующей работы с сессией, естественно, попёрли гонки и стала иногда отваливаться авторизация. Причём, почему-то, в том числе при вызове из скрипта репликации, который вообще однопоточный Д там до сих пор гонка бывает, я так и не понял пока, откуда она там Д для обычных-то юзеров поправили, конечно.
И есть ещё вторая часть этой истории. Причём на неё я наткнулся даже раньше первой части, но в первый раз не понял, в чём была проблема. А повторно наткнулся, уже когда разобрался с сессиями.
Короче: какая-то, с*ка, светлая голова в SemanticMediaWiki впилила для пересчёта какой-то очередной внутренней хрени обработчик очереди. Стандартной медиавиковской очереди Д есть у неё в ядре очередь задач, и можно туда свои задачи пихать.
Но так как стандартная обработка заданий идёт в том числе потихоньку в конце каждого запроса, после отдачи страницы юзеру (ну, типа, чтобы работало даже там, где демона не запустишь) Д эта, с*ка, светлая голова решила, что это же будет тормозить! И реализовала обработку самого задания через дополнительный запрос с сервера на самого себя, к URLу который фактически обрабатывает задание.
И оно как-то большей частью даже прокатывалоЦ пока пользователь не открывал 2 вкладки одновременно Д после чего висло нафиг 2 процесса сервера, а после N повторов висли все доступные процессы сервера и вики переставала отзываться. Причём все такие спокойные Д загрузки CPU нет, никто ничем не занят, а вики висит Д все в дедлоках.
Сами википеды на свои сессии тоже вроде потом напоролись, но уже после меня (после 1.26) Д и то ли в 1.27, то ли в 1.28, вроде, переосмыслили своё поведение.
|
|
ссылка | наверх
|
|
Вылез называется из PoE
Thu, 10 Nov 2016 23:27:44 GMT
|
Тьфу. Вылез из кодинга+PoE, почитал новости:
- linkedin не будет, его блокируют
- ебэя не будет, до конца года поручено внести закон об НДС на онлайн-покупки из-за рубежа
- сарказма тоже не будет, некто Пётр Толстой ([на словах ты Лев ТолстойЦk) озвучил идею жёсткого пресечения сарказма, сатиры и мемов в интернете
- ютуба, вотсаппа и телеграма тоже не будет, кто-то там хочет внести законопроект о мессенджерах (требовать договоры с операторами, идентифицировать пользователей и т.п) и видеосервисах (почему туда попали видеосервисы Д непонятно, но предлагается 20 % иностранное участие ограничить и чего-то там ещё)
- операторы, предлагающие услуги кабельного телевещания подпадают своей деятельностью под [Пакет Яровойk
- Анна Кузнецова, уполномоченный при президенте РФ по правам ребёнка, посетовала, что с момента введения цензуры в Рунете объём детского порно вырос на 63 % (свечку что ли держала?)
- UPD да, забыл Д ещё объявили об идее оснастить ВСЕ автомобили устройствами слежения, которые будут сливать информацию о ваших передвижениях. кто-то уже высказался, что неконституционно, но кого это остановит?
Лучше бы не вылезал. По ходу только метод страуса и остаётся, всё общество так живёт, ага.
А, ну да, Трампа ещё избрали и бакс почти 2р прибавил сегодня вдруг. Говорил же я, Клинтон = бакс вниз, Трамп = бакс вверх. Причём для США-то Трамп по мне возможно реально лучше Клинтонихи окажется, а вот надежды наших патриотов что он щас с нами резко помиритсяЦ по-моему, бессмысленны. Наоборот, Клинтониха абсолютно предсказуемая, а эта рыжая мордаЦ)
|
|
ссылка | наверх
|
|
Thin RAID5
Thu, 22 Sep 2016 21:11:59 GMT
|
Блин. А есть в Linux'е что-нибудь такое, чтобы сделать RAID5, но без необходимости полного resync'а? Т.е. что-то типа thin provision, чтобы блоки под RAID выделялись по запросу. В идеале - чтобы оно при этом поддерживало извращённые схемы расположения, т.е. например 3-дисковый (2 данные, 1 чётность) рейд на 4-х дисках 3+3+2+2 тб.
Это кстати очень даже возможно - 3+3+2+2 нарезать на 6.66 тб RAID5! Схема такая: сначала кладём по 2тб на первые 3 диска, остаётся свободных 2*1тб и 1*2тб, кладём на них ещё по 1тб, остаётся 1тб свободный. Дальше забираем 0.33тб из первой группы с 1-го диска и 0.33тб из второй группы со второго диска и перекладываем на свободный 1тб, и на освободившееся место дописываем новую группу 3*0.33тб.
Т.е. вот так схема выглядит:
111422333 114222333 111222 333214
Вот. ceph так умеет, но он сетевой и распределённый, локально не поюзаешь. ZFS... "thin raid" умеет, но не умеет его расширять - т.е. ещё диск не добавишь.
А с LVM, например, нельзя так извратиться?
|
|
ссылка | наверх
|
|
Тестирование скорости дешёвого SSD Silicon Power Slim S55 120Гб
Thu, 08 Sep 2016 09:32:42 GMT
|
Спойлер: Чтение приличное, а вот скорость записи Д не очень (устоявшаяся 95 Мб/с).
Отчёт о реальных скоростях данного SSD. Тестировал утилитой fio, под Linux. Глубина очереди везде 128, планировщик noop, слияние запросов в очереди для теста отключено. При снижении глубины очереди производительность сильно проседает; ну, так и не надо её снижать.
- Последовательное чтение в идеальном случае (блоками >= 256кб) Д 550 Мб/с
- Последовательное чтение блоками по 4к Д в среднем 190 Мб/с, но прилично колеблется в пределах 170Д280 Мб/с
- Последовательное чтение блоками по 8к Д 370 Мб/с; по 16к Д 450 Мб/с; по 32к Д 500 Мб/с; по 64к Д 530 Мб/с; по 128к Д 540 Мб/с. Тут уже все цифры абсолютно стабильны, не колеблются.
- Случайное чтение блоками по 4к Д 170 Мб/с (~41000 iops), тоже колеблется в пределах 120Д220 Мб/с.
- Случайное чтение блоками по 8к Д 305 Мб/с. По 16к Д 340 Мб/с. По 32к Д 380 Мб/с. По 64к Д 440 Мб/с. По 128к Д 510 Мб/с. По 256к Д 535 Мб/с (это уже фактически последовательное чтение, а не случайное). Тут скорость опять стабильна, практически без колебаний.
- Есть [псевдо-SLC кэшk. Последовательная запись первых 2.4 Гб блоками по 4к Д 244 Мб/с. Крупными блоками (>= 256к) Д 490 Мб/с.
- После 2.4 гб запись устаканивается на уровне 95 Мб/с, независимо от размера блока (SLC кэш кончается).
- Скорость случайной записи абсолютно идентична скорости последовательной записи.
- Скорость записи сохраняется постоянно, в том числе после полной перезаписи всего диска без TRIM.
- 30 секунд простоя достаточно, чтобы SLC кэш сбросился и запись вернулась к 490 Мб/с.
Наибольший [физический смыслk имеют случайные чтение/запись блоками 4к (стандартный размер блока ФС как в винде, так и в линуксе), а также последовательное чтение/запись блоками по 16к (так будет, если программа читает по 4к, а драйвер будет объединять соседние запросы), ну либо уже максимальными блоками (если программа копирует данные крупными блоками).
В общем, с чтением всё ок, но огорчает устоявшаяся скорость записи, 95 Мб/с Д для SSD мало. Хотя, наверное, за эти деньги ожидать чего-то сильно лучшего и не приходится.
|
|
ссылка | наверх
|
|
btrfs для флешек
Wed, 07 Sep 2016 09:55:57 GMT
|
Давно уже люблю на всяких мелких/тестовых серверках / с флешек монтировать. Удобно Д места под rootfs много не надо, а скорость чтения Д что случайного, что последовательного Д вполне адекватная.
Другое дело, что случайная запись с обычными ФС типа ext4 очень медленная, флешки Д это не SSD, гигагерцовых контроллеров и гигабайтов оперативки у них внутри нет Д потому и Translation Layer внутри тупой, всё, что он обычно умеет Д это [открытьk (стереть) и держать [открытымиk 2-3-4 блока стирания (обычно по 2 мб) и поддерживать в них последовательную запись. То есть, случайную запись мелкими блоками флешки не переваривают вовсе Д iops на запись при этом обычно ограничивается 3-4 запросами в секунду.
Стандартно это решается лог-структурированными ФС, которые никогда не перезаписывают файлы [на местеk, а всегда дописывают новую версию [в конецk, одновременно постепенно освобождая место от старых блоков [в началеk. То есть такие ФС чем-то похожи на кольцевой буфер :). И такие ФС под linux есть, я их ещё раньше уже тестировал: ubifs, jffs2, yaffs, logfs, nilfs2Ц фиг кстати знает почему, но в прошлый раз я почему-то остановился на ubifs, хотя она (как и jffs2, и yaffs) предназначена для MTD (голой флеш-памяти, не блочных устройств) и монтировать её одно извращение, и после краша она ещё не восстанавливается потом.
На самом деле из этих лучше брать nilfs2 Д вроде самая живая и для блочных устройств подходит. Правда есть у неё как минимум один [нюансk Д на пустой ФС можно получить ошибку [нет свободного местаk, потому что она защищает (отказывается удалять) часть недавно созданных снапшотов. Время защиты вроде бы задаётся параметром `-o pp` при монтировании, но что-то я даже с pp=1 эту ошибку всё равно время от времени (при интенсивной записи) получал. Да и в общем в стабильность её работы у меня, честно говоря, особой веры нет. Экзотика, в общем.
Ещё отдельный юмор Д это самсунговская F2FS (Flash-Friendly FS). Фиг знает, в каком она месте friendly и зачем она вообще создана Д случайную запись она не ускоряет вообще.
ВотЦ некуда казалось бы податься любителю флешек. Но вчера возникла у меня идея Д есть же btrfs! А в нём cow по дефолту для всех данных! Это ж как раз то, что нужно! И популярная, и по стабильности Д не ext4, конечно, но я думаю уж точно получше экзотических nilfsЙов.
И таки точно! Берём обычную флешку (5 мб/с скорость последовательной записи), бенчмаркаем случайное чтение+запись блоками по 4-16кб (с помощью fio, в 8 потоков). Получаем суммарно (чтение+запись):
- ext4=7.15 iops
- f2fs=7.38 iops
- nilfs2=160.8 iops (лог-структурированная ФС)
- btrfs=128 iops (круто, почти не хуже чем nilfs2)
Короче всё, я на флешках буду btrfs теперь юзать.
|
|
ссылка | наверх
|
|
Математическое наблюдение на тему MTBF / AFR
Fri, 26 Aug 2016 21:57:23 GMT
|
Есть такой параметр, заявляемый производителями жёстких дисков Д MTBF (Mean Time Before Failure), среднее время наработки на отказ. Ясно, что он чисто маркетинговый, так как очевидно, что невозможно честно определить его для новой модели. И фигурируют там обычно миллионы часов, самое меньшее 800000 Д аж 91 год с гаком.
И вот непонятно Д а какого чёрта харды вообще мрут при такой оценке надёжности? :-) ну как же, он 91 год в среднем прожить должен?
Ответ кроется в математике. Есть более осмысленный параметр Д AFR (Annualized Failure Rate), вероятность выхода из строя в течение года. По статистике Backblaze (кроме них никто её по ходу не публикует) реальный AFR у дисков Seagate и WD как минимум процентов 5-10, у некоторых [особо надёжныхk моделей аж 25-28 %, и даже у дисков HGST не ниже 0,8 % (а в основном 1-1.5 %).
А давайте попробуем по AFR посчитать MTBF? Если предположить, что AFR диска не меняется со временем, то MTBF в годах = 1*(1-AFR) + 2*(1-AFR)b + 3*(1-AFR)c + Ц (матожидание числа лет). Разворачиваем формулу дважды в сумму геометрической прогрессии (так как это по сути сумма геометрических прогрессий, начинающихся с 1Ц 2Ц 3Ц и т. п. членов), и получаем MTBF в годах = (1-AFR)/AFRb. Можно записать это и наоборот, решив квадратное уравнение, и получить AFR = (-1 + sqrt(1+4*MTBF)) / (2*MTBF).
По этой формуле MTBF 800000 часов = 9,93 % AFR, MTBF 1400000 часов = 7,6 % AFR, MTBF 2000000 часов = 6,4 % AFR. А 1 % AFR соответствует MTBF аж 86724000 часов! То есть, в принципе, MTBF 800000 часов не так уж и много, так как на самом деле он означает, что 10 % дисков выйдет из строя в первый же год :-).
Упс. В вычисления закралась досадная ошибка Д правильная формула MTBF в годах = AFR + 1*AFR*(1-AFR) + 2*AFR*(1-AFR)b + 3*AFR*(1-AFR)c + Ц = AFR + (1-AFR)/AFR. Соответственно AFR = (MTBF+1 Д sqrt((MTBF+1)b-4)) / 2, и соответственно, никаких впечатляющих % там не будет Д 800000 MTBF = 1,08 % AFR, 1400000 MTBF = 0,62 % AFR, 2000000 MTBF = 0,44 % AFR. Ну ладно, тогда да, MTBF Д просто ничего не значащая маркетинговая цифра :). Даже 1,08 % Д абсолютно нереально.
А, и ещё картина по идее может зависеть от распределения отказов Д интуиция подсказывает, что вряд ли оно равномерное. Но сильно, наверное, это вряд ли повлияет, так как вот тут http://www.cs.cmu.edu/~bianca/fast/ есть статья, из которой видно, что, по-видимому, лет где-то до 5 каждый год вероятность отказа неуклонно возрастает, а потом даже немного снижается.
|
|
ссылка | наверх
|
|
Паттерн бэд блоков в ddrescueview
Sun, 21 Aug 2016 14:11:56 GMT
|
Короче прогнал ddrescue на своём сдохшем Seagate Constellation ES.3 3 тб (ST3000NM0033). Вот такая картина (ddrescueview):
Если поближе, то вот:
О чём нам говорит такой паттерн? Судя по всему, об одной полностью сдохшей головке. Если посмотреть на цифры, то становится чётко видно, что картина по всему диску следующая Д в начале диска идёт 50мб читаемых, 50мб нечитаемых, потом 600мб читаемых, потом примерно 50мб нечитаемых, 100мб читаемых, 50мб нечитаемых и дальше так и повторяется Д 600-50-100-50Ц 600мб ближе к концу диска (к центру пластин), на самом деле, превращается в ~265мб, но соотношение всё время сохраняется чётко Д 12:1:2:1 (где-то 11.8, где-то 12.2, но суть одна).
Блина у этой модели 4, головок 8. Потеряна как раз 1/8 данных. Логично, что это как раз и должно означать мёртвую головку. Единственным непонятным для меня моментом был паттерн Д я думал, раз головок 8, хард с них должен читать по порядку Д 12345678 12345678 и т. п. Но тогда картина читаемых-нечитаемых областей выглядела бы как 7-1-7-1-7-1Ц, а не 12-1-2-1-12-1-2-1Ц, как у меня.
Ответ, оказывается, простой Д вместо традиционной схемы диски сейчас применяют также схемы [Cylinder Serpentinek, [Surface serpentinek и их комбинации. В моём случае это как раз [Cylinder serpentinek: 12345678 87654321 12345678 87654321Ц, и плохая тут, видимо, как раз 2-я головка: 1(2)345678876543(2)11(2)345678876543(2)1Ц
Такой вот получился [RAID 0k из одного диска Д сдохла одна головка, а потеряется почти всё, так как все данные дырявые, максимальный размер неповреждённой области Д 614 мб.
Интересные ссылки по теме:
|
|
ссылка | наверх
|
|
Корпус Aerocool - наедалово
Fri, 29 Jul 2016 21:45:56 GMT
|
Твою мать! Козлы! https://market.yandex.ru/product/9275336, https://market.yandex.ru/product/9275333 - написано, что безвинтовое крепление HDD, в отзывах кто-то подтверждает Д да, безвинтовое крепление, да, удобно.
А там оно не то что безвинтовое! Там и винтового-то не очень! Схема крепления через дикую жопу. Какие салазки, вы о чём! Крепления хардов просто какой-то суперизвращенец придумывал:
- два 3.5" в самом низу на винтах, вставляются со стороны материнки.
- один 2.5" плашмя на отведённом месте + с ОДНОЙ стороны крепится винтами.
- один 2.5" аж вертикально, крепится к панели внутри корпуса 4 винтами.
- один 3.5" плашмя на отведённом месте под 5.25" отсеками и крепится винтами.
- и один 3.5" прикручивается к специальной 5.25" панельке-переходнику, к ней же по желанию под хард лепится доп.вентилятор (если докупишь) и этот страшный бутерброд ставится в 5.25" отсек.
И ещё остаётся пара свободных 5.25" отсеков (нафиг они вообще нужны в 21 веке). ЖЕСТЬ.
Повёлся блин на описание товара. Заказал, теперь возвращать буду.
|
|
ссылка | наверх
|
|
Опа! В связи с законом о перс данных Seagate гарантии больше нет
Thu, 21 Jul 2016 13:35:26 GMT
|
За#бцаааааЦ
Гарантия производителя на диски Seagate Constellation ES.3 Д 5 лет, но похоже, что теперь в связи с законом о персональных данных ей невозможно воспользоваться: http://www.seagate.com/ru/ru/support/russia-law/
Типа мы же иностранная компания, гарантийные запросы обрабатываем за рубежом. А они включают персональные данные.)). запретили обрабатывать персональные данные Д вот и идите со своей гарантией в жопу в магазин, где покупали. :-))
Это у меня такой хард дуба дал. производство 2013, купил либо в 2013, либо в 2014, гарантия в магазинах обычно года 2-3, но главное чек не могу найти и не помню где бралЦ
|
|
ссылка | наверх
|
|
Helvetica Neue Condensed
Thu, 21 Jul 2016 12:37:41 GMT
|
Всегда считал, что Helvetica Д это тот же Arial, а так как Arial не люблю, считал, что и Helvetica Д отстой. Потом, правда, понял, что в мелких размерах Arial выглядит неплохо, но уже было не важно).
А недавно открыл для себя, что Helvetica Neue ещё бывает Condensed и вот это классный шрифт. Правда, в теории платный, но кого ж это волнует на самом деле, он настолько похож на свободный Roboto Condensed, что фактически можно юзать его (хотя субъективно гельветика чуть поаккуратней). Ещё один похожий шрифт Д PT Sans Narrow (но он-то точно покривей). Вот все три:
Посередине Helvetica, сверху Roboto, внизу PT Sans.
|
|
ссылка | наверх
|
|
Минутка юмора nodejs
Mon, 27 Jun 2016 09:43:49 GMT
|
Задача: вытащить часть пути до первой части, содержащей glob-паттерн (glob Д это стандартные шаблоны имён файлов: * ? [] {}).
Решение: один регэксп, да? Нееееет!
Для node.js есть целая библиотека glob-parent. Очень содержательная:
var path = require('path');
var isglob = require('is-glob');
module.exports = function globParent(str) {
str += 'a'; // preserves full path in case of trailing path separator
do {str = path.dirname(str)} while (isglob(str));
return str;
};
Не, ну наверно там парсинг сложный, да? Давайте посмотрим, как написан is-glob:
var isExtglob = require('is-extglob');
module.exports = function isGlob(str) {
return typeof str === 'string'
&& (/[*!?{}(|)[\]]/.test(str)
|| isExtglob(str));
};
Гм. Ну что ж, может вся хитрость в is-extglob?
module.exports = function isExtglob(str) {
return typeof str === 'string'
&& /[@?!+*]\(/.test(str);
};
Это весь код этих 3-х библиотек, ну за исключением всяких README и package.json, конечноЦ которые там в 5 раз больше.
|
|
ссылка | наверх
|
|
ClickHouse
Thu, 16 Jun 2016 09:40:32 GMT
|
ВАУ! ЖИР!
Яндекс сделал опенсорсную столбцовую СУБД! ClickHouse, https://clickhouse.yandex/
https://github.com/yandex/ClickHouse
https://habrahabr.ru/company/yandex/blog/303282/
|
|
ссылка | наверх
|
|
А между прочим, в 5-м Android'е (в ART) запилили именно то, о чём я говорил
Thu, 03 Mar 2016 21:09:17 GMT
|
А между прочим, в 5-м Android'е, в новом рантайме ART, запилили именно то, о чём я говорил!
А именно - "разделяемые assembly". Т.е. чтобы можно было писать dalvik-библиотеки, которые не нужно, как jar'ники, загружать заново в каждый java-процесс.
Именно это и сделано в ART (ART - прозрачная замена Dalvik): вместо JIT-компиляции они теперь перешли к AOT, dex'ы теперь компилятся в нативный код, складываются в файлик на диске, а потом из него mmap()ятся - и, соответственно, ведут себя приблизительно как обычные .so'шки, не сжирая память отдельно в каждом процессе. Точно так же это сделано и в .NET - чтобы assembly превратить в разделяемый код, нужно её прекомпилировать.
Зиготу (zygote), правда, всё равно оставили, чтобы держать в общей памяти ещё и преинициализированные данные, и таким образом всё-таки экономить ещё чуть-чуть памяти. Но всё равно молодцы. По сути, это теперь получается, что ART чуть ли не круче самой явы :) вот бы его на десктопе попробовать с java кодом... :)
|
|
ссылка | наверх
|
|
Тупняк, но реально Quadro и FirePro - нае..надувательство
Mon, 29 Feb 2016 22:36:09 GMT
|
Обалдеть, вот дурь-то. Производимые и Nvidia, и AMD [профессиональныеk видеокарты (Quadro, FirePro) Д тупое искусственное разводилово. Просто в [непрофессиональныхk на уровне firmware обрезают часть функционала и производительности в числах двойной точности, а аппаратно они ИДЕНТИЧНЫЕ.
В качестве пруфа можно привести тему на форуме, в которой чувак путём перепайки пары SMD-резисторов смог поменять PCI ID своей GTX690 и она ВНЕЗАПНО превратилась в Quadro K5000: http://www.eevblog.com/forum/chat/hacking-nvidia-cards-into-their-professional-counterparts/
Жёсткое нае..дувательство, я бы такое запретил законодательноЦ запретил бы физически один и тот же продукт продавать по разной цене и под разными названиями. Вполне, по-моему, на мошенничество тянет)
|
|
ссылка | наверх
|
|
Уроды на службе FCC
Fri, 19 Feb 2016 12:55:08 GMT
|
Вашу ж мать. TP-LINK уже внедряет запрет обновления прошивки в соответствии с уродством FCC... http://www.opennet.ru/opennews/art.shtml?num=43907
|
|
ссылка | наверх
|
|
Печальные итоги 2015 года
Wed, 30 Dec 2015 10:49:23 GMT
|
В общем, по итогам 2015 года стало чётко ясно, что всё это не временный маразм и кризис, а вполне осознанно установленный курс:
- внешнеполитический Д на конфронтацию с Западом
- внутриполитический Д на защиту жуликов и подавление оппозиции
- в интернете Д цензурно-запретительный
- в рубле-баксе Д 50р за$ уже видимо не будет никогда, не говоря уже о 35. дай бог на 80-90 не улететь.
- народного протеста не будет Д половина ЗА, половина просто делает вид, что ничего не происходит
Всё это было и в 2014 году, но тогда надежда на скорое выравнивание ситуации ещё была, а теперь, по-видимому, понятно, что это было лишь начало тренда, а ближайшие лет 3-5-10 будет продолжение.
Так что чем НГ ближе, тем что-то мне грустнееЦ
Вот кстати хорошая статья по теме: http://www.gazeta.ru/column/vladislav_inozemcev/7996685.shtml
...И подчеркну еще раз: ничто из отмеченного не привлекает особого внимания.
Это означает только одно: в отличие от 1998, 2008 или 2014 годов, кризис стал восприниматься в России как нечто обыденное.
Это огромный успех российской власти: народ окончательно превратился в безмолвную массу. Даже многократно обсуждавшийся протест дальнобойщиков не привлек к себе широкого внимания и не породил волны поддержки не потому, что их требования показались кому-то несправедливыми, а скорее, потому, что все хорошо понимают: против пожеланий власти народ бессилен, и ничего не изменится, сколько ни протестуй.
Население действительно перестало так пристально, как прежде, следить за курсом доллара, смирившись с тем, что страна деглобализировалась и нужно переходить на пошехонский сыр и белорусскую мебель, так как альтернативы им нет и не предвидится. Стало понятно, что любое развитие международной обстановки не приведет ни к отмене санкций, ни к притоку в Россию инвестиций, и это означает, что со снижением уровня жизни придется смириться на несколько лет.
|
|
ссылка | наверх
|
|
Юхуууу тесселяцияяя!!!
Sat, 01 Aug 2015 19:40:45 GMT
|
Юхууу! В последней мезе запилили тесселяцию и сразу OpenGL 4.1! Кроме гит-версии мезы, всего-то надо LLVM 3.7 поставить, а к осени это уже будет релиз. [Я джва года ждалk (ц) :-)
Снизу Д тесселяция включена, сверху Д выключена.
|
|
ссылка | наверх
|
|
ExtJS - status update
Tue, 21 Jul 2015 14:29:34 GMT
|
Пописал я в очередной раз на ExtJSЙе, и в очередной раз имею сказать следующее:
- На голом HTML писать быстрее
- На голом HTML писать проще (не нужно [натягиватьk всё на [десктопнуюk парадигму)
- На голом HTML код лаконичнее
- Голый HTML легче стилизовать
- Голый HTML гораздо, на порядки шустрее.
Если перефразировать, то ExtJS Д тормоз с однояйцевым интерфейсом, при этом писать на нём НЕ быстро, НЕ просто и НЕ лаконично. И даже если вы работаете не над чисто HTMLЙным интерфейсом, а, например, с биндингами, всё равно есть лучшие альтернативы (тысячи их Д Angular.JS, React и так далее). И GPL свой они трактуют так, что по их мнению ты должен открыть код не только фронтенда, но и бэкенда Д и денег просят за любое коммерческое использование.
Был бы он хотя бы быстрымЦ но это же невозможно с таким нагромождением кода! Простой пример: самый полезный компонент ExtЙа, Grid Д реализован не в виде ОДНОЙ таблицы, а в виде множества, по таблице на каждую строку! Естественно, оно не использует layout браузера и естественно, оно лагает.
И самое главное, что ИМХО приложений, для которых [десктоп-подобныйk интерфейс бы подходил ЯВНО лучше Д НЕТ! Просто люди, которые раньше писали десктопные приложения, припёрлись в веб и тащат туда свой способ разработки. Чистый [BECAUSE WE CANk, короче.
|
|
ссылка | наверх
|
|
Турбина дула хорошо, но недолго
Sat, 18 Jul 2015 22:37:44 GMT
|
Пару недель назад заодно с ремонтом субарика (была немного продута прокладка ГБЦ) попросил Альпину вырезать катализаторы и прошить мозг, дабы дуло побольше и мощность была повыше. Сделали, Альпинский вроде как дунул туда 1.15 бара, машина поехала явно пободрее.
И ехала так две недели и где-то 1000 км, до сегодняшнего дня Д а сегодня турбина перестала дуть вообще =) то есть машина едет тупо как атмосферная, никакого подхвата не наблюдается, и привычного свиста турбины тоже не слышно. Хотя я не понял, по форумам вроде пишут, что исправная турбина свистеть и не должна Д а моя свистела всегда, сколько езжу)).
Варианты Д либо сама турбина сдохла (заклинила), либо вестгейт, либо где-то дырка в тракте Д во впуске, но тогда по идее движок нестабильно работать должен, либо может в аппайпеЦ
Абыдно, да, а я только датчик наддува купил, поставить хотел))
|
|
ссылка | наверх
|
|
WD Black2
Fri, 10 Jul 2015 22:44:51 GMT
|
WD Black2 Д гибридный диск, объединяет 120гб SSD и 1тб HDD в одном корпусе. Логически представляется одним диском, у которого в начале идёт SSD, потом HDD. Фактически единственный способ установить и SSD (для скорости), и HDD (для объёма) в ноутбуки, в которых не предусмотрен второй SATA- или mSATA-слот.
Производитель зачем-то извратился и сделал так, что изначально видна только SSD-часть, а чтобы увидеть ещё 1 Тб HDD, его нужно сначала активировать путём запуска официальной Windows или MacOS утилиты. В комплекте идёт внешний USB 3.0 кабель Д бонус приятный, но вот только активацию через него не сделаешь Д она делается только через SATA интерфейс, не помогут даже более умные, поддерживающие SMART (в лице scsi-to-ata трансляции) USB кабели.
К счастью, после этой самой активации диск можно использовать в любой ОС, HDD уже никуда не [деваетсяk. Собственно, всё, что делает утилита Д отправляет диску пару VSC (Vendor-Specific Command) и создаёт два раздела Д один на SSD, второй на HDD. Теоретически VSC команды можно относительно легко подсмотреть, дизассемблировав консольную софтинку, идущую в составе MacOS версии официальной утилиты Д она маленькая, написана на C++ и довольно легка к пониманию. Я даже немного попробовал туда взглянуть, но не добил.
SMART диском поддерживается хреново Д работает лишь несколько общих показателей (температура, наработка часов и т.п). С TRIM, напротив, проблем нет.
Число 512-байтных секторов SSD: 234441648 (именно такого размера нужно делать раздел SSD). Общее число 512-байтных секторов SSD и HDD: 2187966778.
SSDЙшка в составе довольно вшивая, последовательное чтение всего 133 Мб/с. Для сравнения, последовательное чтение с HDD в начале диска Д 110 Мб/с, в конце (на внешнем краю блина) Д 57 Мб/с. Вшивость SSD связана, видимо, с тем, что там всего 2 чипа флеш-памяти Д непонятно, почему нельзя было поставить побольше: место над корпусом HDD на самом деле пустует, вся электроника SSD располагается с краю, там же, где и электроника HDD.
А вот скорость случайного чтения и записи. Тестировал утилитой fio, в 8 потоков блоками по 4-16 кб и по 1 мб:
- WD Black2 HDD:
- 4-16 кб: 0.46/1.57 Мб/с (чтение/запись)
- 1 мб: 37/32 Мб/с
- WD Black2 SSD:
- 4-16 кб: 13/43 Мб/с
- 1 мб: 64/51 Мб/с
- Для сравнения нормальный SSD Plextor PX-128M3:
- 4-16 кб: 23/78 Мб/с
- 1 мб: 128/114 Мб/с
То есть SSD WD Black2 примерно в 2 раза медленнее обычного SSD. Но, конечно, при случайном доступе всё равно гораздо быстрее HDD.
|
|
ссылка | наверх
|
|
Тупое клонирование интерфейсов
Thu, 09 Jul 2015 13:48:46 GMT
|
Вот никогда не понимал, зачем в некоторых программах настолько тупо клонировать некоторые интерфейсы?
Пример Д Open/LibreOffice Document Recovery, абсолютно втупую склонированный с MS Office. Никогда не понимал, нафига для восстановления документа показывать отдельный модальный диалог при следующем запуске? Ну хочешь восстановить мой документ Д просто открой закэшированную копию и покажи тонкой строчкой сверху [Документ восстановленk или [Документ не восстановленk. На хрен для этого показывать отдельный диалог и заставлять меня ещё несколько раз кликнуть [Далееk, [Finishk и [OKk в окне с ошибкой, если восстановить не удалось? Налицо же совершенно тупорылое копирование интерфейса MS Office, причём, очевидно, ещё старого, в котором был ровно такой же диалог.
И, наконец, самая дурь! Это самое [Recoveryk происходит даже тогда, когда несохранённых изменений в документе вообще не былоЦ
|
|
ссылка | наверх
|
|
Вкатил себе попи лоль 5.1 + нашёл нормальную тулу для MTP
Sun, 21 Jun 2015 18:07:51 GMT
|
Потратил чуть не день, но наконец-то выпилил штатную самсунговскую чудо-прошивку с кучей блотвари и залил какой-то левый билд CyanogenMod 12.1 (Android 5.1, попи лоль, SaberMod). Вообще можно было ещё взять JDC Д там OTA есть.
Вроде стало побыстрее.
Так как, чтобы не прилетели какие-нибудь идиотские фантазии типа KNOX, официальные обновления отключены с первого дня, загрузчик остался XXUAMDE Д это самый древний, а радиомодуль обновил до XXUBMH1 Д это последняя версия модема, совместимая с не-KNOXЙовым загрузчиком. Смысл буковок в том, что пока все нормальные люди нумеруют версии цифрами, самсунг это делает буквами: XXUA.., XXUB.., и т. п. Вот первая XXUD.. версия Д уже KNOX, а KNOX нормальному человеку не друг.
И ещё наконец-то нашёл нормальную тулу для монтирования MTP в виде FUSE файловой системы: simple-mtpfs Д она ЕДИНСТВЕННАЯ не тормозит (как, например, jmtpfs, go-mtpfs и android file transfer) и не глючит (как просто mtpfs).
|
|
ссылка | наверх
|
|
Perl 6
Mon, 18 May 2015 09:08:59 GMT
|
|
|
ссылка | наверх
|
|
ХОССПАДИ НАКОНЕЦ-ТО!!! В PostgreSQL появился UPSERT!!!
Fri, 08 May 2015 15:11:04 GMT
|
Фича, доступная в MySQL со хрен знает каких времён! REPLACE был уже в 3-ем (~2000 год), INSERT ON DUPLICATE KEY UPDATE - с 4.1, т.е. с 2003 года :)))) добавлен как раз последний - INSERT ON CONFLICT (id) DO UPDATE.
Вот прям сегодня они это закоммитили в 9.5-devel... Прям реально ДЕНЬ ПОБЕДЫ!..
http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=168d5805e4c08bed7b95d351bf097cff7c07dd65
P.S: Нет, в обобщённом виде через CTE оно не эмулируется, потому что возникают проблемы с типами Д как раз сегодня пробовал и обломался. Даже вот такой кейс обламывается, если a или b Д INT: WITH v (a, b) AS (VALUES ('1', '2'), ('3', '4')) UPDATE t SET t.b=v.b FROM v WHERE t.a=v.a. Работает, только если явно указать '1'::int, но получается, что через функцию-обёртку ты UPSERT уже не сделаешь Д нужно типы всех колонок в приложении (там, где запрос генеришь) знать. Обойти можно только совершенно дебильным способом Д WITH v (a, b) AS ((SELECT a, b FROM t LIMIT 0) UNION ALL SELECT '1', '2' UNION ALL SELECT '3', '4') UPDATE... Д только в этом случае постгрес осиливает '1' и '2' к нужному типу привести.
|
|
ссылка | наверх
|
|
|
|
|