Вот и пролетел еще один год и мы хотим поздравить всех с наступающим 2014-ым Новым Годом! Желаем вам в новом году осуществления всего задуманного, новых целей и побед, крепкого здоровья и побольше денег чтобы его подрывать. 😉 Новый Год – это праздник, к которому нужно готовиться и загадывать желания. Так нас учили с детства и эту замечательную привычку не стоит забывать. В исполнении желаний многое будет зависеть от вас, поэтому они заставят вас стать сильнее, мудрее и напористее.
Каждый год мы подводим официальные итоги года, но это скучно и поэтому обойдемся кратким списком наших “достижений”:
До встречи в новом году! Счастья и удачи вам!
Как известно, уже больше года DataStax всячески пропагандирует свой новый бинарный протокол для работы с Cassandra и язык для работы с ним – CQL 3.x. Разработчикам детально разъясняют различия со старым “дедовским” способом работы через Thrift и просят не переживать по поводу обратной совместимости. На самом деле все обстоит несколько не так радужно, потому что направление на CQL 3 частью политики имеет не развивать новые возможности в Thrift. Впрочем, статья не совсем об этом.
Мы рассматриваем переход на CQL 3 для новых сервисов и нас больше всего обеспокоили принципы формирования составного ключа для колонок в динамических таблицах (раньше они назывались column family). Дело в том, что часть составного первичного ключа будет присутствовать во всех колонках для конкретной записи. Мало того, дополнительно будет вставлена пустая колонка-закладка с этой частью первичного ключа. Выглядит это примерно вот так:
Нигде об этом явно не говорится с негативным оттенком, но за подобную структуру придется “заплатить” местом на диске. Например, использование композитного типа для имени колонки дает дополнительных 2 байта на каждую колонку, а повторение части первичного ключа дает дополнительных “размер части ключа” x (“количество колонок в одной записи” + 1) байт. А вот это уже может быть очень существенным для некоторых случаев.
Мы подготовили тестовые данные и решили рассмотреть 5 различных форматов хранения. В качестве доменной модели мы будем использовать “родную” для нас область SEO и ранжирования доменов по различным кейвордам. Каждый домен и кейворд имеют свои идентификатор, отдельно будет поле data, с которым можно будет экспериментировать в вариациях разного размера полезных данных. Остальные поля должны быть достаточно понятными.
Итак, первый вариант выглядит наиболее “натурально” в рамках CQL 3 и это первое что приходит в голову:
CREATE TABLE natural ( domain_id bigint, keyword_id bigint, ranking_date int, rank int, data blob, PRIMARY KEY ((domain_id), keyword_id, ranking_date));
Второй вариант призван проверить зависимость размера данных от имен колонок:
CREATE TABLE short_names ( d bigint, k bigint, rd int, r int, da blob, PRIMARY KEY ((d), k, rd));
Третий вариант пытается сэкономить на количестве колонок и объединяет несколько полей в одно, а именно rank и data:
CREATE TABLE single_column ( domain_id bigint, keyword_id bigint, ranking_date int, ranking_data blob, PRIMARY KEY ((domain_id), keyword_id, ranking_date));
Четвертый вариант идет дальше и делает из двух частей первичного ключа одну:
CREATE TABLE everything_is_blob ( domain_id bigint, ranking_id blob, ranking_data blob, PRIMARY KEY ((domain_id), ranking_id));
Пятый и последний вариант пытается воспользоваться “компактным” хранением данных, задуманном для поддержки таблиц, созданных с помощью Thrift:
CREATE TABLE old_storage_emulation ( domain_id bigint, ranking_id blob, ranking_data blob, PRIMARY KEY ((domain_id), ranking_id)) WITH COMPACT STORAGE;
Код для загрузки данных оставим для домашнего задания читателям (осторожнее будьте с использованием класса ByteBuffer в Java, потому что он содержит массу сюрпризов для новичков) и перейдем непосредственно к результатам (перед замерами не забудьте вызвать nodetool flush, а возможно и сделайте полный compaction).
При загрузке 1 млн. записей по 100 на один домен с использованием для поля data битовой маски из одного байта результаты выглядят так:
natural - 73 MB short_names - 73 MB single_column - 64 MB everything_is_blob - 62 MB old_storage_emulation - 47 MB
Разницы между natural и short_names нет и это сильно радует (было бы совсем печально иначе). Разница между single_column и everything_is_blob незначительная, что говорит о небольших потерях на хранение частей первичного ключа. Разница между худшим и лучшим вариантом составляет 26 MB (около 35% от худшего результата).
А это говорит сразу о многом. Во-первых, если данные достаточно небольшие и их очень много, то новые механизмы хранения могут сильно ударить по объему диска, что незамедлительно ударит по стоимость решения (особенно в облаке), скорости работы с данными (чтение, поиск, сжатие и т.д.). Во-вторых, при росте размера первичного ключа все еще больше усугубится, а это значит, что не стоит использовать большие значения в качестве составляющих первичного ключа. В-третьих, схема подобного дублирования и “закладки” выглядит действительно не так здорово и отличия от старой схемы хранения существенны.
При загрузке 1 млн. записей по 100 на один домен с использованием для поля data реальных существующих URL различных сайтов результаты выглядят так:
natural - 114 MB short_names - 114 MB single_column - 102 MB everything_is_blob - 99 MB old_storage_emulation - 84 MB
А это значит, что между худшим и лучшим вариантом разница составляет 30 MB (около 25% от худшего результата). И это при использовании достаточно больших значений в поле data, размер которых превышает в несколько раз размер чистого первичного ключа.
Детальнее о данной тебе планирую рассказать на одной из будущих конференций. Поэтому наберитесь терпения либо повторите опыты в домашних условиях. 🙂
Не хочешь пропускать ничего интересного? Подпишись на ленту RSS или следи за нами в Twitter!
Очень часто от компаний поступают вопросы о стоимости тренингов для разработчиков и насколько это дорогое удовольствие. Я решил написать небольшую статью чтобы поделиться своим видением данного вопроса. Сразу оговорюсь, что выгода для компании будет рассматриваться с точки зрения вложения средств и полученных взамен “плюшек” (эдакий простенький ROI). Для этого компания должна отправлять сотрудника на те тренинги, которые помогут ему в его текущей работе и тем самым принесут прибыль компании.
Итак, давайте закрепим исходные данные: будем рассматривать Java разработчика со средней зарплатой $3000 (это и не много и не мало по результатам публичных опросов на том же DOU), так как статью пишу я, то возьмем за стоимость тренинга самую дорогую на данный момент у нас – $300 за участника. Речь пойдет о двухдневном тренинге.
Теперь непосредственно к вычислениям. За один рабочий день выбранный нами разработчик зарабатывает около $140, если считать количество рабочих дней в месяце около 21-22. Мы стремимся в идеале проводить тренинги в формате пятница-суббота с захватом выходного дня. Это означает, что участники готовы инвестировать свое свободное время в собственное развитие, что автоматически отсеивает незаинтересованных в результате людей. И тут очень важным становится условие выбора правильного тренинга, о котором я говорил в самом начале. Если тренинг действительно служит интересам продукта/проекта/компании, то оба этих дня можно считать потраченными на работу. Для работодателя это означает дополнительный день работы сотрудника, который оценивается в $140 (не учитываем коэффициент за овертаймы). Получается, что стоимость тренинга для компании $300 – $140 = $160, что составляет около 5% зарплаты разработчика.
Много это или мало судить не мне. Мне кажется, что это ничтожно мало для современных IT компаний с учетом ситуации на рынке труда и возможностей мотивации сотрудников. Я не раз наблюдал ситуации, когда целые команды вкладывали недели работы, наступали на кучу граблей и потом приходили к тем решениям и практикам, которые бы могли легко и быстро почерпнуть от опытных практиков. Я сам всегда предпочитаю экономить свое время, потому что это единственный невозобновляемый ресурс. Если есть возможность узнать много полезной информации в сжатые сроки, то просто глупо ей не воспользоваться за деньги, которые можно заработать еще.
И тут я еще раз хочу обратиться к вопросу о выборе тренингов. Тренинг связан с технологиями, которые вы потенциально будете использовать в будущем? Это инвестиция в развитие и она может как оправдать себя так и не оправдать. Тренинг нужен ради получения сертификата? Это тем более неоправданно, потому что при текущем рынке занятости сотрудник может покинуть компанию в любой момент и сертификат уйдет вместе с ним. Тренинг нужен для мотивации команды на какие-то изменения? Это снова инвестиция, которая отобьется только при грамотной дальнейшей работе. Все перечисленные случаи являются спорными с точки зрения ROI и указанные выше расчеты не могут быть применены к ним.
Компании, выбирайте правильные тренинги и не жадничайте на развитие своих разработчиков! 🙂
Не хочешь пропускать ничего интересного? Подпишись на ленту RSS или следи за нами в Twitter!
Мы с ужасом обнаружили, что не проводили встреч «Клуба анонимных разработчиков» с 1 октября. Вроде как все не было времени, да и потенциальные докладчики не торопились с принятием финального решения. Поэтому в этом году встреч уже не будет. А вот сразу после новогодних праздников, во вторник 14 января, мы рады пригласить всех вас на открытие нового сезона встреч.
Поговорим мы о достаточно популярном NoSQL решении – Cassandra. Причем, больше о практических аспектах ее применения. Одним из докладчиков будет Николай Алименков. Он расскажет о построении очередей и расписаний задач, реализованных с помощью Cassandra:
“Всем известно, что Cassandra представляет собой NoSQL решение для хранения данных. Но часто для обработки этих данных используется система очередей, которая реализуется с помощью других инструментов. За счет этого появляется неконсистентность по данным и дополнительный уровень для поддержания. Так как для одного из наших продуктов все данных хранятся именно в Cassandra, мы разработали свое решение для очереди, которое автоматически приобрело много полезных качеств: масштабирование, высокую доступность, гибкость. Это решение я и представлю в докладе.”
Вторым докладчиком будет Иван Соболев. В своем докладе он поделится впечатлениями от использования Cassandra 1.1.х в качестве базы хранилища для системы резервного копирования данных. В программе впечатления двух команд, их пробы, ошибки, полтора года в продакшене и хеппи енд. Хорошая возможность сэкономить свое время на чужих экспериментах.
Мы ищем других докладчиков, которые могли бы поделиться успешными и не очень историями использования Cassandra в своей практике.
Итак, 14 января пройдет 34-ая встреча клуба. Наши встречи собирают все больше и больше участников, поэтому мы снова начинаем не влезать даже в более просторные залы. Поэтому место встречи будет объявлено ближе к дате проведения.
Официальное начало встречи по-прежнему в 19:00, завершение в 23:00. Стоимость участия 80 гривен при оплате заранее, 120 гривен при оплате на месте. Пива, пиццы и кофе с печеньками хватит на всех. Регистрация обязательна. Все детали по оплате будут высланы вам после успешного прохождения регистрации. Количество мест ограничено 90 участниками.
Не хочешь пропускать ничего интересного? Подпишись на ленту RSS или следи за нами в Twitter!
Ingin Bermain Qiuqiu99? Tahu Panduan Bermain Judi Qiuqiu99 Online! Disini kita menghadirkan permainan judi Qiuqiu99 atau yang disebut fish hunter yang cukup dahsyat dan menarik. Permainan Qiuqiu99 sangatlah mudah untuk pada mengerti dan dimainkan. Di permainan ini, pemain cuma perlu menembak ikan-ikan yang melintas.
Namun apabila tokoh berhasil mematikan ikan, di bermain betting Qiuqiu99 online maka pemain akan mendapatkan coinnya. Setiap jenis ikan memiliki nilai atau coin yang berbeda-beda dimana bertambah sedikit jumlah ikan nya, maka semakin besar juga coin atau nilai yang dapat di raih.
Tata Cara Permainan Judi Qiuqiu99
Permainan pertaruhan Qiuqiu99 online dapat di mainkan secara menggunakan komputer dan mobile baik yang berbasis Android dan apple. Permainan betting Qiuqiu99 menyediakan aplikasi sehingga dapat di mainkan kapanpun dan dimanapun.
Cara Masuk Ke Sajian dengan Menggunakan Komputer
Setelah selesai mendownlad aplikasinya, maka langkah lalu kemudian adalah memasukkan Username atau Login ID dan password.
Setelah sukses melakukan login, akan muncul tampilan home atau halaman utama. Sebagai informasi, selain judi Qiuqiu99 online. Jika ingin permainan Qiuqiu99, maka player cuma perlu klik permainan Fish Hunter 2. Setelah faksi, maka secara otomatis sistem akan mendownload permainan Fish Hunter 2. Di tunggu hingga 100% dan bakal secara otomatis masuk di permainan.
Cara Masuk ke Permainan Dengan Android atau Apple
Setelah selesai berbuat download dan instalasi aplikasi, maka langkah selanjutnya adalah memasukkan ID permainan & password di kolom login. Setelah itu akan terbit tampilan home atau pekarangan utama seperti gambar pada bawah ini. Untuk bermain judi Qiuqiu99, maka pada pilih permainan yang baru. Di klik dan biarkan selesai terdownload.
Cara Bermain Judi Qiuqiu99
Pemain seharga perlu menembaki ikan-ikan yang melintas dalam permainan. Strategi dan faktor keberuntungan sangat menentukan dalam permainan judi Qiuqiu99 on line . Pengaturan besar-kecilnya sistem dalam melakukan sekali tembakan juga ikut berpengaruh saat hendak ingin mematikan ikan-ikan yang melintas.
Tambah besar nilai dalam melaksanakan sekali tembakan, maka taktik itu akan semakin mudah ikan-ikan tersebut akan mati. Namun perlu di tahu, permainan judi Qiuqiu99 berwatak multiplayer ataupun dapat pada mainkan oleh beberapa player lainnya secara bersamaan. Sambil karena itu, dengan menggunakan strategi yang tepat sangatlah berpengaruh untuk menghasilkan kelebihan.
Akun dan Saldo Permainan
Saldo atau Coin dalam akun permainan bukanlah dalam nilai rupiah, melainkan berupa saldo atau coin permainan judi Qiuqiu99 tersebut.
Pergantian Senjata atau Tembak
Cara agar mudah unggul dalam bermain judi tembak online Anda harus selamanya menemukan pergantian senjata. Dalam permainan judi Qiuqiu99 online, terdapat 3 pilih senjata atau tembak yang dapat Anda gunakan. Masing-masing senjata memiliki fungsi yang berbeda-beda.
Nilai Coin Tembakan
Satuan nilai terkecil pada melakukan 1 kali tembakan dalam permainan ini ialah 10 dan nilai paling-paling adalah 1500 coin. Bertambah besar nilai coin wujud yang Anda dapatkan oleh sebab itu hal itu memungkinkan ikan lebih cepat mati. Tombol + untuk menambah nilai coin, dan tombol – untuk mengurangi nilai coin.
Multiplayer Mode
Dalam produk judi Qiuqiu99 bersifat multiplayer mode, dimana dalam 1 ruangan terdapat player lainnya yang bermain juga. Oleh karena itu pemain harus bermain dengan strategi seperti pengaturan besar-kecil nilai coin tembakan. Dengan penggunaan senjata atau tembak serta keberuntungan akan membawa player meraih kemenangan.
Demikian informasi dari artikel abdi mengenai panduan cara tampil judi Qiuqiu99 online . Semoga bermanfaat dan selamat bermain!
Мы уже давно планировали расширить набор тренингов по проектированию и разработке. По многочисленным просьбам участников различных наших мероприятий выбор пал на шаблоны проектирования (design patterns) и наиболее популярный фреймворк в мире Java разработки – Spring. Оба этих тренинга будет вести Женя Борисов – опытный тренер из Израиля. Он уже приезжал в Киев и мы получили очень позитивную обратную связь от участников.
Итак, тренинг “Spring 3 – копаем до самого ядра” пройдет 12-13 февраля в Киеве. Данный тренинг поможет вам пройти путь от начинающего до мастера. Вы не просто научитесь пользоваться Spring, но и поймете как расширять его возможности, а для этого придется залезть глубоко под капот. Будут обсуждаться все основные компоненты Spring, разные виды контекстов и их конгломераты, интеграция Spring с другими популярными технологиями, такими как Hibernate, web, security, validation. Данный тренинг будет максимально практичным. Много кода будет писаться вживую. Будет весело, сурово, но максимально понятно. Регистрация уже открыта и группа ограничена по размеру.
Второй тренинг “Шаблоны проектирования или как писать код, которым можно гордиться” состоится 14-15 февраля. Данный тренинг отличается от привычных всем тренингов по шаблонам проектирования, он основан на реальных примерах, на чужой боли и суровом опыте. Здесь вы не столкнетесь с нудной теорией, которая редко применяется на практике. Вы будете решать реальные задачи, с которыми сталкивается почти каждый программист. Будут обсуждаться как правильные, так и неправильные шаблоны, названия которых будут озвучены только после того, как качественный код будет написан. С этого тренинга вы унесете чужой жизненный опыт и собственноручно написанный красивый код, которым можно гордиться. Регистрация открыта, торопитесь занять себе место среди участников.
17-18 января пройдет тренинг “Инженерные практики в Agile”. Это один из самых информативных наших тренингов. Его проводит Николай Алименков и он приготовил для участников увлекательный рассказ о 8-ми инженерных практиках. За два дня тренинга вы можете получить целостную картину эффективного процесса разработки с точки зрения его технической составляющей. В программу вошел весь многолетний опыт и знания тренера в области применения и внедрения инженерных практик. Регистрируйтесь и присоединяйтесь к группе участников.
Не хочешь пропускать ничего интересного? Подпишись на ленту RSS или следи за нами в Twitter!
Мы уже 2 месяца занимаемся подготовкой конференции Selenium Camp 2014 и рады поделиться нашим видением программы. Это будет уже 4-ый год проведения данного мероприятия. В прошлом году конференция собрала больше 300 человек и впервые прошла в двухдневном формате. Нам он понравился и мы решили взять его в качестве стандарта.
Прежде всего, хочется сказать о важном изменении – сайт конференции теперь будет официально вестись на английском языке. При этом доклады будут как на русском так и на английском (информация о языке указывается для каждого доклада в программе). Это важно прежде всего для привлечения иностранных докладчиков и доступности информации для иностранных участников.
В этом году никаких существенных изменений в самом Selenium/WebDriver не произошло, за исключением развития мобильного направления. Мы постараемся покрыть определенные направления, которые нам кажутся интересными.
Рынок мобильных устройств развивается очень быстро, а вместе с ним и рынок мобильных приложений. А их нужно тестировать не меньше чем обычные веб-приложения. Уже давно существуют неофициальные драйвера для iOS и Android, но до недавнего времени им не уделялось достаточно внимания. В последнее время происходит много активностей вокруг этой области, недавно даже выпустили драйвер для Windows Phone. Мы считаем это направление интересным и перспективным.
Selenium/WebDriver позволяет не только писать автоматизированные функциональные тесты, но и просто удаленно управлять браузером. В паре с другими инструментами, плагинами к браузерам, разнообразными прокси-серверами вы получаете мощный инструмент для проведения разнообразных активностей со своим приложением, начиная от мониторинга, тестирования производительности, поиска “битых” ссылок и заканчивая мониторингом состояния вашего приложения.
Уровень абстракции Selenium/WebDriver очень низкий и мало подходит для тестирования напрямую. Поэтому создается все больше и больше прослоек, фреймворков и библиотек поверх него. Многие из них заточены под определенные языки программирования, другие предоставляют удобный мета-язык для разработки тестов, а также мощные отчеты и управление данными. Все они могут очень сильно упростить работу тестировщика и сложность написания и поддержки тестов.
Практические отчеты – чуть ли не самая полезная часть на каждой конференции. Люди делятся своими удачами и провалами, наработками и инструментарием, которые были опробованы в реальной практике. Этот опыт является очень полезным как для начинающих так и для уже опытных тестировщиков. В этот раздел входят вопросы масштабирования запуска тестов, подходы к отчетам, хорошие практики по написанию и поддержке тестов и многое другое.
Программа уже потихоньку публикуется на сайте, в январе планируется выложить финальную версию. Мы активно ищем интересных докладчиков. Если вам есть чем поделиться в заявленных направлениях, мы будем рады видеть вас с докладом на конференции. Подача докладов открыта до 10 января.
В этом году мы снова решили ограничить количество участников и продать только 300 билетов. Билеты продаются в 4 этапа, каждый из которых ограничен по числу билетов в наличии. Не теряйте времени и регистрируйтесь, чтобы обеспечить себе место на конференции по максимально комфортной цене. Почти 100 участников уже сделали свой выбор. Действуют групповые скидки для групп от 5 человек.
Перед конференцией, 26-27 февраля, как обычно мы проведем тренинги, целью которых будет дать больше практического материала для желающих работать с Selenium/WebDriver. При участии в тренинге вы получаете возможность купить билет на конференцию с 10% скидкой.
Присоединяйтесь, будет интересно!