C++ — один из старейших и наиболее влиятельных языков программирования, который продолжает развиваться и сохраняет свою актуальность в современной разработке. Несмотря на то, что язык появился еще в 1980-х годах, он претерпел значительные изменения и улучшения, особенно в последние годы. В этой статье мы рассмотрим современные подходы и лучшие практики, которые помогут вам эффективно работать с C++ и использовать его потенциал по максимуму.
JavaScript является одним из самых популярных языков программирования в веб-разработке. Однако, с ростом сложности веб-приложений, производительность JavaScript-кода становится критически важной. Оптимизация кода позволяет улучшить скорость загрузки страниц, отзывчивость интерфейсов и общую эффективность работы приложения. В этой статье рассмотрим основные методы оптимизации производительности JavaScript.
Тестирование кода – это один из ключевых аспектов разработки программного обеспечения, который позволяет обеспечить качество продукта и предотвратить ошибки на ранних этапах. В этой статье рассмотрим две важнейшие методологии тестирования: Unit-тесты и автоматизированное тестирование, а также лучшие практики их использования.
Инженерно-геологические изыскания требуют тщательного анализа больших объемов данных, которые могут включать геологические карты, данные о грунтах, гидрогеологическую информацию и другие параметры, влияющие на строительные проекты. В последние годы Python стал популярным инструментом для обработки и анализа данных в этой области благодаря своей гибкости и мощному набору библиотек.
Два с половиной года назад я представил два скрипта: Google Cache Dumper и Bing Cache Dumper. Как нетрудно догадать по названию, их задача состояла в вытаскивании страниц заданного сайта из кэша соответствующего поисковика.
Оба скрипта я поставил на продажу по цене в $2 и $1 соответственно, и до сих пор их поддерживал. В качестве площадки для продаж по принципу наименьшего сопротивления я выбрал сервис Digiseller. Могу сказать, что на протяжении долгого времени меня всё более чем устраивало: скрипты потихоньку продавались, мне капала копеечка на хостинг, людям — польза в виде возможности хотя бы отчасти восстановить потерянный сайт.
Однако, в минувшем году Digiseller преподнёс один за другим два неприятных сюрприза. Сначала он потребовал персональный аттестат WebMoney для продажи через магазин на своем домене. Большой нужды у меня в этом сертификате не было, руки до него вечно не доходили, так что я пошел по пути наименьшего сопротивления: перенес продажи на их площадку-партнера plati.ru. Но и там был через некоторое время заблокирован без объяснения причин, о чем вчера узнал из комментов. Никаких уведомлений на почту, ничего.
Поразмыслив, я понял, что самым честным решением будет попросту открыть исходники этих скриптов, чему и посвящен этот пост.
Отныне и навсегда, оба эти скрипта размещаются на GitHub под славной лицензией WTFPL. Вы можете скачивать и использовать скрипты на свое усмотрение, а так же улучшать их и присылать пулл-реквесты:
P.S. Если вы подумали, что в качестве картинки к посту я разместил задницу, то это вовсе не так. Это не задница, а стилизованная буква W, официальный логотип лицензии WTFPL. Сравните с ©.
Сегодня вечером пришел нежданчик от Last.fm:
Last.fm вносит ряд изменений в радио, которое ранее было доступно во всем мире. Мы тщательно обдумали эти изменения, и эти изменения не случайны: они были приняты в ответ на на ряд факторов, в разной степени влияющих на наш бизнес в разных странах.
До сегодняшнего дня радио было функцией только для подписчиков. Однако начиная с 15 Янв 2013 мы вынуждены прекратить предоставление потокового радио в твоей стране в связи с лицензионными ограничениями. Это значит, что ты больше не сможешь слушать радио Last.fm.
Скробблинг останется бесплатным, и твои данные о прослушивании, чарты и рекомендации не будут затронуты изменением.
Подписчики по-прежнему смогут пользоваться своими преимуществами: сайтом без рекламы, доступом к демонстрациям в разделе Last.fm Playground и другие возможностями, которые будут добавлены в дальнейшем.
Однако ты вправе отказаться от подписки. В этом случае тебе следует ознакомиться с соответствующим разделом FAQ. Там ты найдешь информацию об отмене. Если ты заранее оплатил(а) подписку сроком более чем на 30 дней, ты можешь запросить возмещение.
Мы продолжим отслеживать состояние рынка в разных странах и надеемся расширить нашу аудиторию в будущем, когда это будет целесообразно.
Прочитай наше объявление. Там ты найдешь более подробную информацию об изменениях Last.fm, новости и сведения о других музыкальных службах, совместимых с Last.fm.
Будем рады пользователям, которые решат остаться с нами.
Спасибо,
Команда Last.fm
Для тех, кому лень было читать, краткое резюме: в России даже платные подписчики теперь не смогут слушать радио. Но пусть они не унывают: у них по-прежнему останется сайт без рекламы, доступ к красивым графикам на playground и стильный значок VIP в профиле.
Для тех, кому читать не лень, вот то же самое, но подробнее в блоге lasf.fm.
Так как для меня в last.fm ценность представляют только подборка исполнителей по вкусу и стримминг радио, то после закрытия радио смысл в платной подписке пропадает.
Вопрос о том, куда мигрировать сейчас активно обсуждается на Хабре, а я скорее всего перейду на Яндекс.Музыку. Ещё есть libre.fm, но интерфейс и выбор на нём странноват. Кстати, и на YouTube музыку тоже можно послушать, хотя и не очень удобно.
Хочу предложить вашему вниманию историю, которая приснилась мне не далее как сегодня под утро. Проснувшись, я первым делом подумал: "ну и к чему вообще мне это приснилось?..", но потом понял, что этот нехитрый сюжет имеет прямое отношение к нашей отрасли. Строго говоря, это применимо к молодым специалистам практически в любой области, но именно в программировании это цветёт пышным цветом и даёт сочные плоды :-) Сон получился на удивление связный, так что привожу его почти без литературной правки.
История приключилась с двумя мальчишками-приятелями, будем называть их Сашей и Петей. День был солнечный, тёплый — пожалуй, идеальный день с точки зрения шестиклассника на каникулах. Поэтому, когда Петя зашёл за Сашей и позвал его гулять, Саша немедля согласился, задержавшись лишь чтобы завязать шнурки кроссовок. Родители были на работе, а потому предполагалось, что они не против прогулки, по крайней мере, если они о ней не узнают.
Здесь будет уместно заметить, что жил Саша на шестом этаже довольно нового дома, и его подъезд до сих пор избегала неприятная участь быть загаженным с первого этажа до последнего. Сашу не особо интересовало, кто за этим присматривал, но кого вообще могут интересовать такие скучные вещи? С другой стороны, Саше было приятно, что их подъезд был чистый и аккуратный, по крайней мере в тех местах, где Саше доводилось проходить.
В этот раз, спускаясь по лестнице вниз и обсуждая с Петей, кого бы ещё позвать, чтобы поиграть в мяч, Саша заметил, что на стене у одного из лестничных пролётов краска некрасиво облупилась и раскрошилась (наверное, кто-то тащил по лестнице что-то тяжёлое и задел стену углом). В принципе, мелочь, но Саше стало как-то обидно, что их подъезд теперь не такой аккуратный, как раньше.
— Петь, смотри, какой-то дурак нам стену покорябал! Кажется, у нас дома в коридоре как раз стояла банка с краской именно такого цвета! Ты спускайся и зови пацанов в футбол, а я сейчас подкрашу и к вам!
— А ты умеешь вообще красить? А то влетит тебе от старших, если криво намажешь, или цвет не тот.
— Да не, меня папка учил, мы в ванной стену подкрашивали. И это точно та самая краска, сто пудов.
— Ладно, но если что, я не при чём. И ты надолго не зависай, мы же гулять пошли.
— Да я вообще мигом, тут такое маленькое место, на два взмаха кисти.
Саша побежал обратно в квартиру, а Петя пошёл вниз, звать остальных друзей гулять. Через полчаса Петя вместе с тремя другими приятелями и мячом подходили к Сашиному подъезду. По подьъезда оставалось метров десять, когда с крыши с грохотом рухнула какая-то железяка. Следом за ней показался виновато улыбающийся Саша:
— Сори, пацаны, эта железяка тут мешала! Я её приладил удобнее, но она тут как поедет, да как жахнет вниз!
— А ты вообще какого фига на крышу-то полез?!
— Да я закрасил ту дырку, а пока красил, понял, что это не долбанули, а с крыши вода протекла во время дождя, вот краска и обвалилась. Я подумал, что лучше уж починить крышу, пока и нашу квартиру не затопило по самые окна!
— Не гони, не затопит! Вы же не на верхнем этаже живёте! Да и не умеешь ты крыши чинить!
— Ну мало ли, в подъезде вот затопило, аж краска полезла. И не на последнем этаже! И вообще, я тут гамал в симулятор строителя, супер-новый, и знаю, как делать крыши!
— Мы тебя сто лет ждать будем?
— Не, я мигом! Я уже всё разобрал, осталось только обратно сложить, только правильно. Идите на поле, я вас догоню!
Мальчишки пошли на поле, но Саша их не догнал. Не пришёл он и через час, так что Петя забеспокоился, не грохнулся ли он с крыши. Крикнув остальным никуда пока не уходить, он побежал к Сашиному дому. Подойдя к дому, он обнаружил, что дом как будто бы стал чуток ниже. И действительно, чердака как ни бывало. Зато наверху вовсю кто-то грохотал, не иначе как Саша.
— Санёк! Са-а-анё-ё-ёк! Ну где ты там?! Ты чего творишь?!
— Чо?! Щас, один сек! Да я тут, понимаешь, переделывал крышу, а часть стены чердака как рухнет! Вон, внизу валяется, глянь! В общем, я посмотрел, а тут кладка неправильная! Мне брат рассказывал, как они с другом помогали его папке дом на даче строить, и как кирпичи надо класть! А тут всё не так! Ну я решил, что раз уж я крышу разобрал, надо и стены переделать по уму. А то когда ещё кто-нибудь возьмётся! В общем, я через пол часа буду, не сваливайте!
— Да ну тебя! — ответил Петя и вернулся на стадион.
Естественно, Саша не пришёл и через час. Более того, не пришёл он и на следующий день, и даже через неделю, и вот почему. Всё дело в том, что когда в шестом часу его родители приехали с работы, они застали на месте дома котлован и Сашу, увлечённо ругающего строителей-недоумков, которые даже котлован правильно вырыть не могут, потому что чуть тронешь фундамент, и он тут же разваливается. И естественно, "старшие" не оценили Сашины старания по достоинству, в наказание запретив ему выходить гулять следующие три недели, хотя он ещё чуть-чуть и построил бы самый правильный и надёжный дом на свете. Вот, чесслово, если бы они в пробке задержались, он бы уже успел!
Мораль сей басни... думаю, она не нуждается в особых комментариях. Молодым программистам очень хочется делать всё "по науке", как они читали в умных книгах, но в жизни, когда дело касается реальных продуктов, попытки внедрить все правильные подходы как правило превращают неплохой, в сущности, продукт в хаос. И даже маленький фикс может положить ему начало.
В то же время, задумывался ли Саша, что это наверняка далеко не первая царапина, возникшая в подъезде, и аккуратно закрашенная кем-то, благодаря кому Сашин подъезд выглядел красиво и опрятно? И если у его отца была банка краски в точности, как стена в подъезде, то, может быть это он и следил за порядком, и стоило хотя бы посоветоваться с ним? В прочим, я начинаю писать азбучные истины, а это не к добру, так что я закруглюсь :-)
P.S. Признаюсь, время от времени, я еле успеваю перехватить себя за руку, чтобы не разобрать очередной дом до основания во имя правильной архитектуры.
Поводом к этому посту стала одна дискуссия об хороших и плохих сторонах открытого софта, в которой мне довелось участвовать. Я являюсь давнишним пользователем Linux, а потому поневоле постоянно имею дело с большим количеством open-source проектов. Более того, так повелось, что большинство инструментов и фреймворков для веб-разработки, которой я занимаюсь, так же является открытым. Поэтому в ходе того обсуждения у меня сформулировалось мнение, заслуживющее отдельного упорядоченного изложения.
На мой взгляд, современный open source радикально отличается от того, каким он был ещё лет семь назад, и состоит он из четырёх мало пересекающихся миров, представители которых различаются буквально во всём.
Сюда относятся крупнейшие открытые проекты, над которыми работают сотни людей. Именно о них упоминают в первую очередь, когда хотят проиллюстрировать важную роль открытого ПО в IT-индустрии: ядро Linux, Apache, FreeBSD, KDE, GNOME, Mozilla Firefox. Следом за ними идут продукты менее именитые, но от того не менее важные: Drupal, phpBB, OpenJDK, Eclipse, целая плеяда языков программирования и многие другие.
У этих проектов одна общая черта: за ними стоят различные коммерческие организации, которым открытое ПО служит основой их бизнеса. Для Linux это в первую очередь RedHat, в Apache заинтересована практически вся хостинговая индустрия, FreeBSD прочно прописался на высоконагруженных серверах, в KDE и GNOME заинтересованны множество (полу-)коммерческих дистрибутивов, спонсирующих их разработку, Mozilla Foundation имеет спонсорские соглашения со многими интернет-компаниями, в числе которых Google. Факт тот, что именно наличие заинтересованного бизнеса позволяет открытому проекту перейти в клан тяжеловесов, получая инвестиции в виде долларов или человеко-часов.
Соответственно, эти проекты чаще всего не уступают в качестве своим коммерческим собратьям, имеют чёткое и стабильное будущее. Да простятся мне эти слова, но, в каком-то смысле, эти продукты и являются коммерческими, только для широкой массы пользователей они доступны бесплатно и их исходные коды открыты, а прибыль из них извлекается иными способами.
К этой категории я отношу проекты, которые делаются сравнительно небольшими группами людей, как правило не больше десятка активных контрибьюторов, и делаются just for fun. Первое, что приходит в голову из этой сферы — большая часть открытых игр.
Работа над ними ведётся потому, что это приятно и интересно самим разработчикам, и как правило вокруг таких проектов собирается достаточно тёплое и заинтересованное сообщество, в которое несложно влиться, если только ваши интересы совпадают с интересами сообщества. Часто сообщество тоже участвует в разработке, особенно если проект живёт на GitHub, но каждый отдельно взятый человек вносит вклад сравнительно небольшой и эпизодический.
Мне очень симпатичны такие сообщества, и, если в большом Open Source — сила, то здесь — гибкость и свежая кровь. Именно поэтому проекты из этой сферы может ждать самое разнообразное будущее: они могут перейти в лигу тяжеловесов, получив поддержку коммерческих структур и вырастив большое сообщество, могут тихо увянуть, если разработчики потеряют интерес и некому будет подхватить падающее знамя, а могут на многие годы остаться в этом состоянии, не спеша развиваясь на радость фанатам.
В этой сфере вращаются проекты, поддерживаемые и развиваемые одним разработчиком, редко — парой. Чаще всего эти проекты решают сразу две проблемы — обеспечение портфолио и реализация собственных творческих интересов программиста.
Это и накладывает ограничение на рост проекта: основатель редко на постоянной допускает других разработчиков к своему детищу, чтобы, во-первых, иметь полную свободу принятия решений в проекте, и, во-вторых, не размывать свой вклад в глазах потенциального нанимателя, который будет просматривать портфолио. По тем же причинам не все охотно принимают в свои проекты чужие патчи, если они не касаются багфиксов, предлагая просто форкать проект.
На мой взгляд, сейчас таких проектов количественно больше всего, и это легко проиллюстрировать, порывшись на том же гитхабе. Будущее у большинства из них не самое радужное — с угасанием интереса основателя, он наверняка будет заброшен, а сколько продлится интерес, предсказать сложно. Шанс, что проект всё же перехватят, невелик так как вокруг них редко бывает активное сообщество. Признаюсь, у меня самого есть несколько таких вот заброшенных проектов, за что мне иногда бывает стыдно, но едва ли у кого-то нет таких "скелетов в шкафу".
Такие проекты возникают по принципу: "Возникла проблема, я её решил, вдруг кому-то пригодится?"
В этот класс попадает воистину гигантское количество программ и программок, которые пишутся, чтобы решить одну проблему своего создателя и публикуются по принципу "чтобы зря не пропадало". Как правило, такие проекты имеют очень небольшой размер и функционал, и развиваются недолго — ровно до того момента, как начинают удовлетворять нуждам разработчика. Поскольку разработчик знает, как программа работает, документацией она тоже не отягощается, что ограничивает круг потенциальных пользователей в основном такими же программистами, которые вместо чтения документации могут и по коду всё понять, благо его немного.
Если к первому названному миру я отношусь с уважением, ко второму — с восхищением, а к третьему — с пониманием, то к этому, четвёртому, я испытываю самые противоречивые чувства. Тут можно найти всё, что угодно, но найти и заставить работать настолько сложно, что проще самому написать. А от сюда возникает огромное количество велосипедов, что не облегчает поиск в следующий раз :-) И если уж говорить про гитхаб, то у них есть отдельный подсервис специально для таких вот проектов: GitHub:Gist.
Судьба большинства представителей этого мира — забвение и быстрое устаревание по причине отсутствия поддержки со стороны основателя, но история знает примеры, когда начатые на коленке проекты получали интерес и перерождались в виде соло- или небольших проектов из второго и третьего миров.
Каждый из миров, о котором я говорил, имеет свои достоинства и недостатки для разработчиков и конечных пользователей. Где-то ценою за надёжность становится гибкость в развитии, где-то разработчики готовы пожертвовать стабильностью во имя пребывания на острие технологий. Часто люди сталкиваются лишь с одним из ликов открытого программного обеспечения и пугаются, думая что есть только оно, и совершенно напрасно. Многоликость open source — это его сила, надо лишь уметь ею пользоваться :-)
Три раза пытался начать этот пост, и три раза получалась полная ерунда — предыдущий пост был написан пол года назад, и, похоже, навык написания постов на человеческом языке я слегка растерял. Почему я упомянул про "человеческий" язык? Да потому, что за эти пол года мне пришлось написать вагон и маленькую тележку текста на академическом жаргоне, но обо всём по порядку.
С одной стороны, событий было много, и было о чём рассказать. С другой стороны, в голове царил такой бардак и суматоха, что все силы уходили на то, чтобы удержать в голове все обещания, срочные дела и тому подобное. Соответственно, написание поста в блог постоянно проигрывало борьбу за моё внимание.
Самым главным квестом была защита диплома — отныне я дипломированный бакалавр информационных технологий. Осознавать это приятно, но, честно говоря, наличие формального диплома мало что изменило. Быть может я окажусь в меньшинстве, но от наличия корочек пользы куда меньше, чем от обучения, им предшествовавшего. Полагаю, мне очень повезло с универом, так как большинство преподавателей действительно знали, о чём говорят, и умели это объяснить. И хотя в повседневной работе я не пользуюсь большей частью высоких наук, которые мне довелось познать, расширению сознания они весьма поспособствовали. А вот умение абстрактно мыслить в программировании — это наше всё, и математика даёт прекрасный шанс этому научиться.
Отдельную пару слов посвящу своему дипломному исследованию, посвящённому гомоморфной криптографии. Особенность данного вида шифрования в том, что над зашифрованными данными можно выполнять математические операции таким образом, что после расшифрования результат совпадёт с результатом тех же вычислений над незашифрованными данными. Это, в свою очередь, ключ к безопасным облачным вычислениям и базам данных — данные можно хранить и всячески обрабатывать, но без ключа враг не сможет эти данные прочитать, даже если у него есть доступ к серверам. Если будет время, я, пожалуй, напишу парочку постов об этом с изложение всей этой науки "на пальцах".
В конце мая я так же делал доклад на эту тему на Positive Hack Days в секции Young School. Кажется там даже была выложена запись презентации, но я за это не поручусь — не проверял. Впечатления от самой конференции остались самые радужные, тем более, что это мой первый опыт участия в конференциях такого уровня.
Таким образом, весь май и июнь были посвящены диплому, и, в перерывах, работе. После завершения этой эпопеи и поступления в магистратуру (благодаря хорошему среднему баллу и диплому, это не составило труда) мне пришлось отдать должное работе, так что и июль нельзя было назвать свободным. А во время отпуска в августе я просто не желал думать ни о чём компьютерном, кроме, разве что, игр. Это был самый беззаботный и потому прекрасный месяц :-)
Последующие два осенних месяца пролетели практически моментально, но писать тут не о чем — сплошная рутина, которая, наконец, стала принимать регулярный характер, и стало легче выкраивать время на дела типа блога :-)
Последние комментарии
/Гость/ 10 недель 11 часов назад
/Гость/ 12 недель 3 дня назад
/Alek$/ 19 недель 5 дней назад
/Alek$/ 19 недель 5 дней назад
/Гость/ 19 недель 5 дней назад
/Гость/ 19 недель 5 дней назад
/marintsSER/ 21 неделя 2 дня назад
/Alek$/ 23 недели 6 дней назад
/Виталий/ 23 недели 6 дней назад
/Alek$/ 25 недель 3 дня назад