Рубрика «код» - 6

Автор материала рассказывает об устройстве системы управления версий, которая реализована в компании Stripe.

image

Когда дело доходит до API, изменения — вещь непопулярная. В то время как многие разработчики ПО привыкли к работе в режиме частых и быстрых итераций, разработчики API теряют эту гибкость как только у них появляется хотя бы первый пользователь их интерфейса. Многие из нас знакомы с историей эволюции операционной системы Unix.

В 1994 году была издана книга «Настольное пособие Unix-ненавистника» (Unix-Haters Handbook), в которой затрагивался целый список самых разных острых тем, от имен оптимизированных под телетайпы команд с совершенно непонятной историей происхождения до необратимого удаления данных, непонятных интуитивно программ с избытком опций. Более 20 лет спустя, подавляющее большинство этих жалоб по-прежнему актуальны несмотря на все многообразие доступные сегодня систем-наследников и ответвлений. Unix стал настолько широко популярен, что изменение его поведения может привести к далеко идущим последствиям. Хорошо это или плохо, но между ним и его пользователями уже сложились определенные договоренности, определяющие поведение Unix-интерфейсов.

Похожим образом и API представляет собой коммуникационный договор, изменить который без значительной доли сотрудничества и усилий со стороны обеих сторон не представляется возможным. Многие бизнесы полагаются на Stripe как поставщика инфраструктуры и поэтому мы думаем над этими этим видом взаимодействия с самого начала деятельности нашей компании. В настоящее время нам удалось сохранить поддержку каждой версии нашего API с момента появления компании в 2011 году. В этой статье, мы бы хотели поделиться с вами, как нам в Stripe удается организовать работу с версиями API.
Читать полностью »

Одно из предназначений смарт-контрактов — автоматизация платежных операций между контрагентами. На этом рынке работает и наш платежный блокчейн-сервис Wirex. Несмотря на перспективность смарт-контрактов, автор материала анализирует недостатки этой технологии.

Как разработчика популярной блокчейн-платформы меня иногда спрашивают есть ли в планах развития нашего сервиса Multichain место умным контрактам по типу тех, что используются в Ethereum. В ответ всегда звучит: «Нет, или во всяком случае не сейчас».

image

Но ведь в шумном хайповом мире блокчейнов умные контракты считаются чем-то очень крутым. Почему же ответ всегда нет? Что ж, проблема в том, что если в случае с работающими подобно биткоину контролируемыми блокчейнами нам известны как минимум три мощных сценария их практического применения (отслеживание истории происхождения, хранение документов компаний, облегченная организация финансовых систем), то для эфирных умных контрактов эквивалентных по эффективности кейсов попросту не существует.
Читать полностью »

Привет! Предлагаю вашему вниманию свободный перевод статьи «Good code is its own best documentation» от Amit Shekhar.

image

Хороший код, как хорошая шутка — не требует объяснений.
Читать полностью »

Пентестер (тестировщик на проникновение) рассказывает, как ему удалось найти баг в загрузке файлов и проникнуть на сервер платежной системы PayPal.

image

Привет всем!

Надеюсь, у вас все хорошо. Уверен, что заголовок вас немало удивил, и вы ринулись сюда чтобы глянуть, реально ли я cмог получить удаленный доступ не куда-нибудь, а на сервер PayPal.

На самом деле это был довольно простенький взлом, направленный на проверку уязвимости (так называемый POC). Единственный момент, с которым мне повезло — поиск и успешное определение уязвимого домена.
Читать полностью »

Микрооптимизации в коде

Как правило, при обсуждении диагностических возможностей PVS-Studio за кадром остаются рекомендации, выдаваемые анализатором по поводу микрооптимизаций Си и Cи++ кода. Конечно, микрооптимизации не так важны, как диагностики выявляющие ошибки, но про них тоже интересно поговорить.
Читать полностью »

«Погрузитесь в изучение предмета, найдите наставника и не оглядывайтесь назад» — ключевые советы, которые автор материала дает всем, кто стремится освоить программирование с нуля. В истории, приведенной ниже, речь идет о непростом пути человека, решившего сменить профессию после 30 лет, чтобы стать разработчиком программного обеспечения.

image

Люди часто спрашивают меня, как я начал кодить и всегда удивляются, узнавая, что научился я после 30.

Предлагаю вам свою историю о том, как я прошел путь с самых азов до разработчика широкого профиля в Udacity — стартапе из Кремниевой долины, команда которого поставила перед собой цель демократизировать образование. В этой истории я уделил особое внимание рассказу о том, как мне удалось получить работу, несмотря на то, что каждая вакансия младшего веб-инженера требовала наличия научной степени в области компьютерных наук или двухлетнего опыта работы по профессии.

За все это время мне довелось побороться за сохранение отношений с близкими, потратить все свои сбережения, потерять веру в себя и сдаться. И только спустя год размышлений над неудачей, изменив свой настрой, я предпринял еще одну попытку и добился успеха.
Читать полностью »

image

Нам, в команде платежного блокчейн-сервиса Wirex, на собственном опыте знакома необходимость постоянной доработки и совершенствования существующего технологического решения. Автор материала, приведенного ниже, рассказывает об истории эволюции развертывания кода известной социальной новостной платформы Reddit.

«Важно следить за направлением своего развития, чтобы иметь возможность вовремя направить его в полезное русло».

Команда Reddit постоянно развертывает код. Все члены команды разработки регулярно пишут код, который перепроверяется самим автором, проходит проверку со стороны, чтобы после отправиться в «продакшн». Еженедельно мы делаем не менее 200 «деплоев», каждый из которых обычно занимает в общей сложности менее 10 минут.

Система, которая обеспечивает все это, развивалась на протяжении многих лет. Давайте посмотрим, что изменилось в ней за все это время, а что осталось неизменным.

Начало истории: стабильные и повторяющиеся деплои (2007-2010)

Вся имеющаяся у нас сегодня система выросла из одного зернышка — Perl-скрипта под названием push. Он был написан давно, в совсем другие для Reddit времена. Вся наша техническая команда тогда была настолько мала, что спокойно помещалась в одну небольшую «переговорку». Мы тогда еще не пользовались AWS. Сайт работал на конечном количестве серверов, и любые дополнительные мощности надо было добавлять вручную. Все работало на одном крупном, монолитном Python-приложении под названием r2.
Читать полностью »

Как поменьше беспокоиться о собственной бездарности - 1

Только что я столкнулся с еще одним проявлением синдрома самозванца: «Я правда разработчик — или просто хорошо гуглю?»

Далее следовал ответ, в котором я, однако, не увидел главного — поэтому ответить придется мне: слишком уж многие боятся без каких-либо оснований.

Переведено в Alconost

Если информацию легко найти, это не делает человека глупым

Частенько мне доводится слышать одну историю — полагаю, подлинность ее сомнительна, но, как бы там ни было, суть такова. Когда у Эйнштейна попросили номер телефона, он полез его искать и сказал: «Зачем запоминать то, что можно найти менее чем за две минуты?»

Читать полностью »

Зло в функциях сравнения
Возможно, читатели помнят мою статью под названием «Эффект последней строки». В ней идёт речь о замеченной мной закономерности: ошибка, чаще всего, допускается в последней строке однотипных блоков текста. Теперь я хочу рассказать о новом интересном наблюдении. Оказывается, программисты тяготеют к тому, чтобы допустить ошибку в функциях сравнения двух объектов. Такое утверждение выглядит неправдоподобным, однако, я покажу огромное количество примеров ошибок, которые шокируют читателя. Читайте новое исследование, будет интересно и страшно.
Читать полностью »

Мне нравится думать, что я пишу хороший код. Ну или, что я хотя бы пишу больше хорошего кода, чем плохого.

Моя любимая особенность хорошего кода — это его скука. Предсказуемые выражения, одно за другим. Никаких сюрпризов, никаких трюков, никаких уникальных случаев. Никакого мета-программирования, конечно! Скучный код очень легко отлаживать, читать, объяснять.

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

Код, использующий неявное поведение, может быть основан на каком-нибудь недокументированном, но уже реализованном функционале. Например, в мире написана целая куча НЕВЕРНОГО кода, который полагается на то, что функция файловой системы, возвращающая список директорий, вернёт их в отсортированном по алфавиту порядке. Это и вправду часто работает именно так, но ровно до того момента, пока не ломается по «непонятным» причинам. А на самом деле просто никто никогда этой сортировки не гарантировал.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js