109: (animated-1)
вы не поверите, что Эрик сделал с мягкой игрушкой в этом видео!

старое, но я не видел раньше. к тому же Эрик тут произвёл на свет пару крылатых фраз:

- If you have many choices, eventually you'll make a wrong one
- Obsession with monads is medical condition

в общем, смешное видео.
109: (animated-1)
There is a new feature in Sql Server 2016 called "stretch database". This feature is amazing in a very perverse way: everything is wrong with it.

Starting with a name: it's not a database. This is a feature that you can apply on a table-by-table basis. The gist of the feature is that now you can take part of the data from a table residing in Sql Server 2016 instance (whether on-premise or on VM in the cloud) and move and store it in Sql Azure.

Technical limitations that preclude from using this feature are amazing. Here is the small subset:

Computed columns
Check constraints
Default constraints
Foreign key constraints that reference the table
Indexed views that reference the table

To be amazed even more, see the full list.

Okay, assume you have some [useless] table that has none of these "limitations". How much can you save by moving historical data to Azure? Here is the price list. The least expensive "performance level" will cost you $930/month. Ouch, but okay, let's estimate the size of data that can provide savings. With current hard drive prices, yearly cost of 1TB is around $10. $20, if we count mirroring. $930 * 12 / $20 = 560TB. So if you "stretch" more than 560TB into cloud, you may save something. (FYI, if you dedicate 1 Gbps link solely to the task of moving 560TB to the cloud, it will take 65 days).

Oops again though! The pricing page says "During preview, you can stretch up to 60TB of data with Stretch Database. Actual size limits will be determined as we get closer to general availability". However, the home page for the feature says "The size of the remote portion of a database with enabled for Stretch is limited only by the Azure SQL Database service tier". And the biggest tier, as we know from this page, is miserable 1TB for Premuim P11 tier. Moreover, the feature home page says that the price for the Azure part of the database is defined by the price of the corresponding Sql Azure tier ($7,000/month for P11, not $930 as described in the direct link to stretch database pricing).

I hope it is somewhat clearer now how insane is this "offering". That said, please don't misunderstand me. Sql Server by itself is an awesome platform. Azure by itself is an awesome platform. Combination of the two (Sql Azure or regular Sql Server running on Azure VM) can be even more awesome (as always, you need to carefully weight all pros and cons). But this feature? Nah. It's just some PM got carried away without proper check from someone with common sense.
109: (animated-1)
For the last 8 years I have been telling people: "CAP is misleading", "don't use CAP terms and definitions", "just forget about it, it's useless". Suddenly, today I stumble on relatively new article on the topic. I don't agree with author on all points he makes (like, why is that he thinks mvcc is not linearizable?), but most points are right on.

The CAP theorem is too simplistic and too widely misunderstood to be of much use for characterizing systems. Therefore I ask that we retire all references to the CAP theorem, stop talking about the CAP theorem, and put the poor thing to rest. Instead, we should use more precise terminology to reason about our trade-offs. (Yes, I realize the irony of writing a blog post about the very topic that I am asking people to stop writing about).

Many systems are neither consistent nor available under the CAP theorem’s definitions. However, I’ve never heard anyone call their system just “P”, presumably because it looks bad. But it’s not bad – it may be a perfectly reasonable design, it just doesn’t fit one of the two CP/AP buckets.

Even though most software doesn’t neatly fit one of those two buckets, people try to shoehorn software into one of the two buckets anyway, thereby inevitably changing the meaning of “consistency” or “availability” to whatever definition suits them. Unfortunately, if the meaning of the words is changed, the CAP theorem no longer applies, and thus the CP/AP distinction is rendered completely meaningless.

Whatever you do, please stop talking about CP and AP, because they just don’t make any sense.

109: (animated-1)
ебаас-колотиц! пока я был в отпуске, наши тут выпустили Ethereum Blockchain as a Service (EBaaS) on Microsoft Azure
109: (animated-1)
столкнулся с проблемой, из которой, кажется, получится хороший вопрос для интервью на продвинутого девелопера.

проблема такая: есть относительно длинная строка, например "lasdkfbvaouvyaou". и есть в базе таблица с миллиардом записей, в которой хранятся потенциальные подстроки, например "la", "las", "lasdk". надо их все найти как можно быстрее.

поверхностное гуглование нашло только кошмарное решение, гордо опубликованное на http://www.loganbibby.com/2011/03/reverse-pattern-matching-in-mysql

это решение сканирует всю таблицу, весь миллиард, вне зависимости от существования индексов.

чисто датабазное решение, которое приходит в голову, это поиск по индексу для каждой подстроки типа "l", "la", "las", и так далее. это даёт O(M log N), где M - количество букв в строке, а N - количество записей в таблице.

если надо лучше, то придётся в памяти строить trie, и делать по нему лукап. для дополнительного ускорения, вместо традиционного trie, где дети лежат в списке, можно держать детей в Dictionary, тогда будет чуть быстрее (насколько - непонятно, зависит от статистики), но памяти съест больше.

.Net native

Sep. 9th, 2015 01:40 pm
109: (animated-1)
wow! микрософту пришла в голову идея пре-компиляции в native code, чтобы делать программы, которым не нужен .Net runtime. как в анекдоте, стюардессу откопали обратно (через 15 лет).

109: (animated-1)
вот там же специальные люди сидят, которые эти тексты придумывают. это же важный текст, посылаемый тысячам внешних юзеров, которые реальные деньги платят. а текст такой:

This week Azure infrastructure will be upgraded to improve service reliability.
As a result, you may experience intermittent failures...


Mar. 11th, 2015 03:46 pm
109: (animated-1)
а вот этой хренью (OpenStack) кто-нибудь пользуется? а то все провайдеры, которых я смог найти, либо вообще цен не пишут (значит, кидалово), либо ломят в два-три раза больше, чем Azure. это же low margin business, почему цены так различаются? все же убежать должны.
109: (animated-1)
вот, например, метод у меня принимает IList, потому что внутри метода мне надо делать Remove(). но если передать туда [], который имплементирует IList, то дотнет кинет исключение "коллекция фиксированного размера". ну вот кто так дизайнит, нах?

ну или почему в IEnumerable нет Foreach()? силком тащат в счастливое функциональное будущее? да я и сам пойду, когда это appropriate.
109: (animated-1)
заметил, что в последнее время тенденции в подходах к разработке софта смещаются как-то в более легкомысленную область. даже, может, не тенденции, а attitude, как это по-русски.

agile вот этот вот, "некогда думать - трясти надо", слово "архитектор" стало чуть ли не ругательным. по этому поводу, кстати, язвительно проходится Ivar Jacobson в последней статейке. но я не об этом.

зовёт меня как-то шеф и говорит: ты тут присмотри за этими двумя. они там что-то херачат, а у меня нет никакой уверенности, что они там хотя бы приблизительно правильно делают.

ну захожу к одному, говорю: тут шеф меня попросил ознакомиться с вашим пайплайном, расскажи про свою часть, когда будет время? нет проблем, говорит, у меня есть несколько work items, которые я могу тебе поручить. ну, я улыбнулся про себя - не, говорю, я вообще-то не планировал код писать, только ознакомиться.

ну вот, послушал я его рассказ, полчаса всего заняло, включая наводящие вопросы и отступления от темы. обнаружился один критический баг (из-за которого часть данных теряется при перекладывании с места на место) и один критический псевдо-баг1. подчёркиваю, в код я не смотрел, просто слушал рассказ и задавал вопросы.

1 чувак рассказал, как компонент работает. я переспросил, уверен ли он. чувак был непреклонен - "работает именно так". тогда я описал, какие проблемы с такой имплементацией. чувак поупирался, но согласился. тогда я описал, как делать, чтобы не было проблем. чувак согласился. говорит "ну вроде не так уж много менять, давай прямо сейчас". ладно, говорю, всё равно уже всё остальное обсудили. открываем код, а там написано ровно то, как я говорил, как должно быть. то есть коряво, конечно, но функционально эквивалентно.
109: (animated-1)
там правда ужас-ужас, или мне просто не повезло?

понадобился мне монитор для редиса, чтобы красивые графики рисовал. ничего фришного standalone не нашёл. нашёл какой-то ruby gem. ну ладно, мне трудно что ли ruby поставить? cinst ruby 200 OK

запускаю "ruby gem redmon". кричит "это native gem, please install devkit". сам devkit, конечно, через gem не ставится, надо скачивать и распаковывать отдельно лежащий zip и следовать инструкциям. ладно, поставил devkit. "ruby gem redmon", наконец, радостно запустился, принялся что-то там компилировать, обнаружил отсутствие какого-то .h файла. ну и закончил на этом, проще самому написать.

прямо как в 90-е вернулся, со всеми этими низкоуровневыми манипуляциями.


Sep. 19th, 2014 12:24 pm
109: (animated-1)
скачал левенчуковский редактор 15926, потыкал в него. в процессе возникло несколько мыслей, как по поводу собственно редактора, так и вообще.

1. текст: это пока что не human-readable. [hasSubclass for posccaesar.org/rdl/RDS905886631 : Specialization], really? вместо: [TANK is FLUID STORAGE DEVICE], а уж все остальные детали мелким шрифтом или в отдельной панели.

2. графика: представление в виде дерева is just wrong. не надо даже пытаться. ну 2014 год на дворе, можно же уже динамический граф нарисовать на экране.

3. рассматривая данные, пришёл к выводу, что модель subject-predicate-object не работает. или, другими словами, работает плохо. потому что subject сам по себе обычно не определён или определён плохо. например, слово TANK может означать совершенно разные вещи в разных контекстах. то есть -predicate-subject должно прилепляться не к subject, а к subject-in-context. как замоделировать subject-in-context? ну вот, например, очень похожая идея в ворднете называется synset. это позволит сразу избавиться от 90% шума, генерируемого нерелевантными предикатами в модели triples.

4. мне сейчас скажут, что задачей всех этих owl, rdf, triples, и проч. является data integration, а не то, что я подумал. а я скажу, что, во-первых, неправда - декларируемая "большая цель" - это knowledge representation, и текущий подход сильно смахивает на dead end. а во-вторых, самое интересное-то зачем нужен knowledge representation - это natural language processing, AI, smart interfaces. а просто две системы интегрировать - это программисты и так захардкодят как-нибудь худо-бедно.
109: (animated-1)
Microsoft выкатил NoSQL database[1], использующую SQL[2] для запросов :)
Хранит эта база json documents и называется (surprise!) DocumentDB.

Смех смехом, но ничего особенно абсурдного (ну, если не считать sql/nosql) при чтении документации я пока не обнаружил. Предлагаемые consistency levels[3] тоже вполне осмысленны.

[1]: http://azure.microsoft.com/en-us/services/documentdb
[2]: http://azure.microsoft.com/en-us/documentation/articles/documentdb-sql-query
[3]: http://azure.microsoft.com/en-us/documentation/articles/documentdb-consistency-levels
109: (animated-1)

bitcoin paper wallet storage

пора самому что-нибудь тоже забацать.

holy dev

Sep. 7th, 2013 03:15 pm
109: (animated-1)
вспомнилось. пару лет назад занесло меня как-то на интервью. владелец конторы купил церковь, и посадил туда программистов. вот прямо там, где раньше сидели прихожане, теперь у него сидят программисты и молятся на свои компьютеры. а ведущий программист, значит, контролирует процесс разработки сверху с алтаря.

интервью же опытные интервьюёры начали со слов "ну конечно, платить вам столько, сколько вы сейчас получаете, мы не сможем...". как вы понимаете, это в любом случае сильное начало, и уж тем более когда не знаешь, сколько же на самом деле человек получает. так и не использовал я возможность стать ведущим программистом и надзирать с алтаря.
109: (animated-1)
вот, наткнулся на изделие мартина фаулера: lmax.

интересная и нетривиальная часть, как обычно, упомянута одним предложением: Should the master node go down, it's lack of heartbeat will be noticed, another node becomes master, starts processing input events, and starts its replicator.

вопросы, как обычно - кем will be noticed? что гарантирует единственность нового мастера? чем гарантируется, что старый мастер не очухается - или, если очухается, поймёт, что он уже не мастер?

в любом случае, интересное чтиво, например:

10: While the LMAX team shares much of the current interest in functional programming, they believe that the OO approach provides a better approach for this kind of problem. They've noticed that as they work to write faster code, they move away from a functional style towards OO style. Partly this because of the copying of data that functional styles require to maintain immutability. But it's also because objects provide a better model of a complex domain with a richer choice of data structures.

а, и ещё одного я не понял. почему фаулер считает, что lock приводит к context switching и cache invalidation? To deal with the write contention a queue often uses locks. But if a lock is used, that can cause a context switch to the kernel. When this happens the processor involved is likely to lose the data in its caches.


109: (Default)

December 2016

    1 23


RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags