Pull to refresh
-23
Валера Соловьев @sumejread⁠-⁠only

Пользователь

Send message

ИИ убивает программирование?

Level of difficultyEasy
Reading time5 min
Views6.7K

Приветствую, читатель. Недавно на youtube, я посмотрел видео в котором высказывалось мнение, что ИИ скоро заменит программистов и программирование в целом может исчезнуть. Аргументы из видео меня совершенно не убедили и мне захотелось написать статью с разбором аргументов с которыми я не согласен.

Читать далее
Total votes 17: ↑9 and ↓8+1
Comments51

Сервис для оперативной оценки стоимости своих навыков на рынке труда

Reading time2 min
Views12K

Уважаемые читатели, хочу представить Вашему вниманию свой небольшой проект https://sugar-beet.herokuapp.com/, который является воплощением идеи описанной в своей предыдущей статье Сколько ты стоишь? Метод анализа вакансий с HR-агрегаторов. Стадию развитию его можно определить как MVP. Однако, к сожалению, Heroku отказывается от бесплатного тарифа 28 ноября 2022 года, что печально. Собственно выкладываю текущую версию на всеобщее обозрение, через 2 месяца она всё равно "превратится в тыкву". Приветствую всех заинтересовавшихся.

Читать далее
Total votes 12: ↑11 and ↓1+10
Comments11

Go для самых маленьких. Разрабатываем для Arduino и других микроконтроллеров

Reading time8 min
Views13K

Язык Go благодаря своей простоте, возможности компиляции в выполняемый образ и встроенной поддержке многозадачности стал, в некотором смысле, "серебряной пулей" для создания высокопроизводительных инструментов и, совместно с Rust, сформировал современный технологический ландшафт для DevOps. Но в действительности, благодаря поддержке набора инструментов LLVM, стало возможным использовать Go и для встраиваемых систем, например при создании мобильных приложений для Android/iOS (например, проекты android-go или gomobile) или микроконтроллеров. В этой статье мы поговорим о возможностях проекта TinyGo, его преимуществах по сравнению с C++ для Arduino и других микроконтроллеров, рассмотрим несколько примеров по работе с оборудованием (на примере реализации драйвера шины SPI для светодиодной ленты WS2812).

Читать далее
Total votes 13: ↑12 and ↓1+11
Comments4

Как работает yield

Reading time6 min
Views663K
На StackOverflow часто задают вопросы, подробно освещённые в документации. Ценность их в том, что на некоторые из них кто-нибудь даёт ответ, обладающий гораздо большей степенью ясности и наглядности, чем может себе позволить документация. Этот — один из них.

Вот исходный вопрос:
Как используется ключевое слово yield в Python? Что оно делает?

Например, я пытаюсь понять этот код (**):
def _get_child_candidates(self, distance, min_dist, max_dist):
    if self._leftchild and distance - max_dist < self._median:
        yield self._leftchild
    if self._rightchild and distance + max_dist >= self._median:
        yield self._rightchild

Вызывается он так:
result, candidates = list(), [self]
while candidates:
    node = candidates.pop()
    distance = node._get_dist(obj)
    if distance <= max_dist and distance >= min_dist:
        result.extend(node._values)
        candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
        return result


Что происходит при вызове метода _get_child_candidates? Возвращается список, какой-то элемент? Вызывается ли он снова? Когда последующие вызовы прекращаются?

** Код принадлежит Jochen Schulz (jrschulz), который написал отличную Python-библиотеку для метрических пространств. Вот ссылка на исходники: http://well-adjusted.de/~jrschulz/mspace/

Подробный и обстоятельный ответ
Total votes 141: ↑136 and ↓5+131
Comments41

Обзор испанской социальной сети Tuenti.com

Reading time6 min
Views21K
Ходят слухи, что Павел Дуров позаимствовал несколько новых идей именно оттуда. Что ж, давайте разберемся.

Прошлое и будущее


Tuenti была основана в 2006 году группой молодых испанских студентов: Феликс Руис, Зарин Дентзел, Кенни Бентлей, Хоакин Айюсо де Поль и Адейеми де Аджао.

Сеть быстро набирала популярность и 4 августа 2010 года была приобретена крупнейшей в Испании сотовой компанией Telefonica за 70 миллионов евро. Telefonica в настоящее время контролирует 85% компании. Тем не мение Дентзел остался генеральным директором, а Бентлей — ведущим программистом.

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

Tuenti на испанском языке звучит как английское сленговое слово «двадцатилетний». На самом же деле название происходит от испанского словосочетания «Ту enti», означающее «ваше лицо».

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

В докладе от 2008 года статистическая служба Google оценила Tuenti как четвертый сайт в мире по скорости прироста пользователей, а уже в 2009 году Tuenti переместился на третью строчку этого рейтинга.

Интересная статья была опубликована на сайте shperk.ru, согласно которой 17 378 940 пользователей посещают сеть ежемесячно, 4,700,000 пользователей посещают сайт ежедневно, и каждый из них в среднем просматривает аж 1418 страниц!

Интерфейс


Не знаю почему, но в хороших социальных сетях зачастую в дизайне используют оттенки синего цвета. Туэнти не стал исключением, и, на сегодняшний день, его интерфейс представляет собой что-то среднее между «Вконтактом» и «Фейсбуком».

Существует главная страница, страница профиля, стена, сообщения, видео, публичные страницы, приложения и места.

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

Впрочем, обо всём по-порядку.
Читать дальше →
Total votes 73: ↑60 and ↓13+47
Comments42

Cuckoo – собственная автоматизированная лаборатория анализа вредоносных файлов

Reading time21 min
Views62K
image
Месяц назад портал на моей новой работе был взломан. Руководство задалось вопросом «Как?». В ходе недолгих поисков и анализу подключений к серверам, был найден ПК сотрудника, с которого устанавливалось подключение примерно в то самое время. Сотрудник ничего о взломе не знал, но в ходе беседы вспомнил один случай, ему незадолго до взлома пришёл документ от «сотрудника фирмы», который не открылся. Файл был в формате exe, с этого и началась вся история.
Читать дальше →
Total votes 58: ↑56 and ↓2+54
Comments26

PHP класс для удобной и безопасной работы с MySQL

Reading time9 min
Views116K
После написания статьи про защиту от инъекций я взялся за написание класса, реализующего изложенные в ней идеи.
А точнее, поскольку ключевой функционал уже использовался в рамках рабочего фремворка, я занялся выделением его в самостоятельный класс. Пользуясь случаем, хочу поблагодарить участников PHPClub-а за помощь в исправлении нескольких критических ошибок и полезные замечания. Ниже я постараюсь описать основные особенности, но сначала небольшой
дисклеймер
Есть несколько способов работы с SQL — можно использовать квери-билдер, можно ORM, можно работать с чистым SQL. Я избрал последний вариант, потому что мне он ближе. Я совсем не считаю первые два плохими. Просто лично мне всегда было тесно в их рамках. Но я ни в коем случае не утверждаю, что мой вариант лучше. Это просто ещё один вариант. Который можно использовать, в том числе, и при написании ORM-а. В любом случае, я считаю, что наличие безопасного способа работать с чистым SQL не может принести какой-либо вред. Но при этом, возможно, поможет последним оставшимся приверженцам использования mysql_* в коде приложения, отказаться, наконец, от этой порочной практики.

В двух словах, класс строится вокруг набора функций-хелперов, позволяющих выполнять большинство операций с БД в одну строку, обеспечивая при этом (в отличие от стандартных API) полную защиту от SQL инъекций, реализованную с помощью расширенного набора плейсхолдеров, защищающих любые типы данных, которые могут попадать запрос.
В основу класса положены три базовых принципа:
  1. 100% защита от SQL инъекций
  2. При этом защита очень удобная в применении, делающая код короче, а не длиннее
  3. Универсальность, портабельность и простота освоения

Остановлюсь чуть подробнее на каждом из пунктов.
Читать дальше →
Total votes 92: ↑51 and ↓41+10
Comments103

Защита от SQL-инъекций в PHP и MySQL

Reading time26 min
Views252K
К своему удивлению, я не нашёл на Хабре исчерпывающей статьи на тему защиты от инъекций. Поэтому решил написать свою.

Несколько пространный дисклеймер, не имеющий прямого отношения к вопросу
Давайте признаем факт: количество статей (и комментариев) на тему защиты от SQL-инъекций, появившихся на Хабре в последнее время, говорит нам о том, что поляна далеко не так хорошо истоптана, как полагают некоторые. Причём повторение одних и тех же ошибок наводит на мысль, что некоторые заблуждения слишком устойчивы, и требуется не просто перечисление стандартных техник, а подробное объяснение — как они работают и в каких случаях должны применяться (а в каких — нет).

Статья получилась довольно длинной — в ней собраны результаты исследований за несколько лет — но самую важную информацию я постараюсь компактно изложить в самом начале, а более подробные рассуждения и иллюстрации, а так же различные курьёзы и любопытные факты привести в конце. Также я постараюсь окончательно развеять множественные заблуждения и суеверия, связанные с темой защиты от инъекций.

Я не буду пытаться изображать полиглота и писать рекомендации для всех БД и языков разом. Достаточное количество опыта у меня есть только в веб-разработке, на связке PHP/MySQL. Поэтому все практические примеры и рекомендации будут даваться для этих технологий. Тем не менее, изложенные ниже теоретические принципы применимы, разумеется, для любых других языков и СУБД.

Сразу отвечу на стандартное замечание про ORM, Active record и прочие query builders: во-первых, все эти прекрасные инструменты рождаются не по мановению волшебной палочки из пены морской, а пишутся программистами, используя всё тот же грешный SQL. Во-вторых, будем реалистами: перечисленные технологии — хорошо, но на практике сырой SQL постоянно встречается нам в работе — будь то legacy code или развесистый JOIN, который транслировать в ORM — себе дороже. Так что не будем прятать голову в песок и делать вид, что проблемы нет.

Хоть я и постарался подробно осветить все нюансы, но, вполне возможно, некоторые из моих выводов могут показаться неочевидными. Я вполне допускаю, что мой контекст и контексты читателей могут различаться. И вещи, которые кажутся мне сами собой разумеющимися, не являются таковыми для некоторых читателей. В этом случае буду рад вопросам и уточнениям, которые помогут мне исправить статью, сделав её более понятной и информативной.

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

Правила, соблюдение которых гарантирует нас от инъекций


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

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

Но вперёд, читатель — перейдём уже к подробному разбору.
Читать дальше →
Total votes 128: ↑98 and ↓30+68
Comments97

Несколько интересных приемов и особенностей работы с MySQL

Reading time3 min
Views88K
Я думаю, что в процессе изучения той или иной СУБД каждый из вас не раз изобретал велосипеды для решения своих задач, не зная о существовании той или иной функции или приема, которые бы могли в разы ускорить выполнение запросов и уменьшить объем кода. В данной статье я хочу поделиться с вами своим опытом работы с очень «добрым» и «отзывчивым» MySQL, часто позволяющему программисту делать вещи, которые другие СУБД переварить бы не смогли. Материал будет полезен скорее тем, кто только решил углубиться в чудесный мир запросов, но возможно и опытные программисты найдут тут что-то интересное.
Читать дальше →
Total votes 132: ↑116 and ↓16+100
Comments83

Спасибо Путину за это как баш

Reading time1 min
Views1.6K
Сегодня уже писали про новый хеш-тег, покоривший мировой Твиттер. Весь день тег перескакивал с первого на третье место и обратно среди самых популярных трендов. Посмотрев на это безобразие, мы решили сделать микробаш из твитов, отмеченных этим тегом. На момент написания этой статьи, число оригинальных твитов в нашей БД перевалило за 15 000 (если считать с ретвитами, то это примерно 40 000 твитов).

СпасибоПутинуЗаЭто

Правильным решением было сначала написать сборщик твитов, и, запустив его в фоновую работу, прикручивать голосовалку, модераторскую и прочие прелести нового микробаша. Решение было верным потому что метод search API твиттера возвращает максимум 1500 последних твитов. Это число в середине дня набиралось примерно за 20 минут.
Читать дальше →
Total votes 246: ↑168 and ↓78+90
Comments239

10 практичных WordPress шорткодов

Reading time5 min
Views44K
Шорткоды – пользовательские функции, которые сохраняют время при написании поста в WordPress. Сегодня я хочу представить Вам 10 самых используемых WordPress шорткодов.
Читать дальше →
Total votes 96: ↑73 and ↓23+50
Comments22

Пещерные технологии будущего

Reading time7 min
Views2.6K
Никогда не обращали внимание, как часто старые интерфейсы, старый код и вообще старые решения выглядят странными и уродливыми? Причём всё это может стать старым за считанные годы. Когда приходится очень быстро бежать только, чтобы оставаться на месте, возникает желание как-нибудь срезать, заглянуть немного в будущее, перепрыгнуть через пару пунктов.

Давайте попробуем. Для этого нам необходимо понять по каким принципам идет развитие: внимательно рассмотреть те пещерные технологии, что мы использовали пару лет назад и то, как они превращались в “технологии будущего”, что мы используем сегодня.
Читать дальше →
Total votes 102: ↑88 and ↓14+74
Comments41

Microsoft, как и Apple, отказалась от поддержки технологии Flash в новом браузере Metro IE10, приведя сходную аргументацию

Reading time3 min
Views3.2K
В одной из двух разновидностей браузера Internet Explorer, поставляющихся в пакете с ОС Windows 8, не будут поддерживаться модули расширения, в частности Adobe Flash.

Пояснения причин, по которым Microsoft остановилась на таком решении, данные Дином Хачамовичем, руководителем группы разработки Internet Explorer, способны вызвать ощущение дежавю. Больше года назад Стив Джобс, тогда еще генеральный директор Apple, почти теми же словам объяснял решение отказаться от поддержки Flash в iPhone и iPad.
image
Читать дальше →
Total votes 67: ↑48 and ↓19+29
Comments105

Учебный пример разработки PHP-класса с использованием TDD

Reading time7 min
Views19K
В данном посте приводится учебный пример разработки PHP-класса, который совершает запрос к Twitter API с целью выборки статусов пользователя по его никнейму. Кроме того, Twitter-класс кеширует полученные данные с использованием еще одного PHP-класса, который осуществляет простое кеширование данных в файлах.

Целью поста является закрепление собственных знаний, полученных в результате прочтения некоторых книг, статей, а также возможность получить комментарии от опытных TDD-практиков, с указанием на грубые ошибки в процессе разработки или в тестах.

Читать дальше →
Total votes 48: ↑41 and ↓7+34
Comments26

Вторичная аутентификация аккаунта на сайте

Reading time4 min
Views2.2K
Что такое вторичная аутентификация?
Когда на сайте имеются учетные записи пользователей, применяется аутентификация или идентификация пользователя.
Но с некоторых пор стали применять и вторичную аутентификацию – пароли крадут, они могут теряться, часто забываются. Да и ошибочные действия пользователей или банальная невнимательность может к этому привести.
Вторичная аутентификация поможет идентифицировать и вернуть доступ к данным.
Используются различные процедуры вторичной аутентификации:
• пересылка пользователю по e-mail ключа доступа;
• отправка SMS с кодом доступом;
• ответ на определенный контрольный вопрос;
• ввод старого пароля;
• подтверждение личности от третьего лица (третьих лиц).
Если взлом сайта, системы будет направлен на систему вторичной аутентификации (а не на обход более сложной системы доступа по паролю), то аккаунт может стать менее защищенным.
Например, в 2008 году в США хакер взломал аккаунт Сары Пэйлин (кандидата в президенты США) только лишь отгадав ответ на секретный вопрос к ее аккаунту: «Где Вы познакомились со своим будущим супругом?» (т.е. хакер имитировал известный вирус Морриса).
Читать дальше →
Total votes 19: ↑12 and ↓7+5
Comments10

Всё серьёзно

Reading time11 min
Views58K
Компания Samsung представила на рынке ноутбук премиум-класса, NP900X3A — так сказать, для состоятельных людей, предпочитающих всё и сразу. В итоге получился качественный сплав из современных технологий — тут вам и новый процессор, и чипсет и твердотельный накопитель. Давайте узнаем, насколько всё это пригодно для повседневного использования.



Осторожно, трафик — внутри 50 фотографий.

Читать дальше →
Total votes 105: ↑87 and ↓18+69
Comments195

Создание графиков с JavaScript

Reading time2 min
Views6.7K
imageС началом существования HTML 5 возможности веб-приложений в браузерах возросли фантастически. Один из примеров – canvas элемент, который позволяет, с помощью JavaScript, рисовать 2D и 3D модели, равно как и растровую графику (bitmaps).

Благодаря этим возможностям, статистические графики могут быть нарисованы прямо в браузере. Типы графиков могут быть различными. В прошлом, чтобы изобразить график, использовались различные подходы. Если внешний вид графика позволял, использовался стандартный HTML и CSS. Однако, подходы для более сложных графиков использовали различные технологии встроенных в браузеры HTML, CSS и JavaScript. Популярным было использование Flash, или графики вычерчивались на сервере, с последующей передачей их изображения клиенту. Эти подходы требовали много времени для поддержки, нарушали консистенцию приложений, вынуждали клиента устанавливать дополнительное ПО и дополнительно нагружали сервера.
Читать дальше →
Total votes 12: ↑7 and ↓5+2
Comments1

Обзор свежих материалов, август 2011

Reading time5 min
Views808
Этот материал продолжает серию ежемесячных обзоров свежих статей по теме интерфейсов, новых инструментов и коллекций паттернов, интересных кейсов и исторических рассказов. Из лент нескольких сотен тематических подписок отбирается примерно 5% стоящих публикаций, которыми интересно поделиться. Предыдущие материалы: апрель 2010-июль 2011.



Читать дальше →
Total votes 58: ↑58 and ↓0+58
Comments7

Ставим объекты на поток, паттерн фабрика объектов

Reading time12 min
Views87K
Доброго времени суток, читатель. Я хочу поделится с тобой знаниями об одном из наиболее часто используемых мною паттернов — фабрики объектов, для данного паттерна так же подходит другое название — виртуальный конструктор.

Что представляет из себя этот паттерн?

Исходя из названия легко догадаться, что это некая, определенная, фабрика (или завод), который создает объекты. Еще раз выражу слово определенная. Как и в реальной жизни фабрика имеет некую специализацию, создавая товары или устройства какого-либо определенного типа. И фабрика, которая выпускает, например, мебель, не может производить, например, еще и компоненты для смартфонов. По аналогии с программированием фабрика объектов может создавать только объекты определенного типа, которые используют единый интерфейс. Самыми главными преимуществами данного паттерна в С++, является упрощение создания объектов различных классов, использующих единый интерфейс. Зачастую библиотекам, которые разрабатывают программисты нужно не только уметь работать с определенными объектами, но и создавать их. Самый очевидный пример загрузка файлов различных форматов. Мы не знаем, какой файл мы будем загружать заранее, но у нас есть список возможных форматов. Пользователь указывает файл, библиотека пытается определить тип файла и вызвать соответствующий загрузчик для него. В большинстве случаев программисты использует конструкции типа switch или if, чтобы определить экземпляр какого класса им необходимо создать. И чем больше возможных вариантов появляется, тем больше разрастается эта конструкция, в последствии превращающиеся в уродливого монстра.

Что нам может предложить фабрика объектов?
Во-первых, простой метод создания объектов, который сократит switch/if до 1ой строчки.
Во-вторых, удобные методы для работы с объектами фабрики. Мы всегда точно можем узнать, зарегистрирован ли у нее определенный класс, количество зарегистрированных классов, а так же удобные методы для добавления и удаления экземпляров классов в фабрику. С помощью фабрики можно ограничивать набор возможных классов, которая она будет создавать, используя некую конфигурацию.

Читать дальше →
Total votes 51: ↑45 and ↓6+39
Comments25

Компиляция «на ходу» в эрланге

Reading time2 min
Views1.8K
В некоторых случаях бывает удобно скомпилировать определенные части программы во время работы приложения. Например, в мире явы так происходит компиляция веб сервером .jsp страниц в сервлеты. Другими возможными применениями подобной техники являются разные языки шаблонов, регулярные выражения и т.д.

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

Как это сделать
Читать дальше →
Total votes 24: ↑23 and ↓1+22
Comments19

Information

Rating
Does not participate
Location
Герцлия, Тель-Авив, Израиль
Registered
Activity