Приветствую, читатель. Недавно на youtube, я посмотрел видео в котором высказывалось мнение, что ИИ скоро заменит программистов и программирование в целом может исчезнуть. Аргументы из видео меня совершенно не убедили и мне захотелось написать статью с разбором аргументов с которыми я не согласен.
Пользователь
Сервис для оперативной оценки стоимости своих навыков на рынке труда
Уважаемые читатели, хочу представить Вашему вниманию свой небольшой проект https://sugar-beet.herokuapp.com/, который является воплощением идеи описанной в своей предыдущей статье Сколько ты стоишь? Метод анализа вакансий с HR-агрегаторов. Стадию развитию его можно определить как MVP. Однако, к сожалению, Heroku отказывается от бесплатного тарифа 28 ноября 2022 года, что печально. Собственно выкладываю текущую версию на всеобщее обозрение, через 2 месяца она всё равно "превратится в тыкву". Приветствую всех заинтересовавшихся.
Go для самых маленьких. Разрабатываем для Arduino и других микроконтроллеров
Язык Go благодаря своей простоте, возможности компиляции в выполняемый образ и встроенной поддержке многозадачности стал, в некотором смысле, "серебряной пулей" для создания высокопроизводительных инструментов и, совместно с Rust, сформировал современный технологический ландшафт для DevOps. Но в действительности, благодаря поддержке набора инструментов LLVM, стало возможным использовать Go и для встраиваемых систем, например при создании мобильных приложений для Android/iOS (например, проекты android-go или gomobile) или микроконтроллеров. В этой статье мы поговорим о возможностях проекта TinyGo, его преимуществах по сравнению с C++ для Arduino и других микроконтроллеров, рассмотрим несколько примеров по работе с оборудованием (на примере реализации драйвера шины SPI для светодиодной ленты WS2812).
Как работает yield
Вот исходный вопрос:
Как используется ключевое слово 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/
Обзор испанской социальной сети Tuenti.com
Прошлое и будущее
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 страниц!
Интерфейс
Не знаю почему, но в хороших социальных сетях зачастую в дизайне используют оттенки синего цвета. Туэнти не стал исключением, и, на сегодняшний день, его интерфейс представляет собой что-то среднее между «Вконтактом» и «Фейсбуком».
Существует главная страница, страница профиля, стена, сообщения, видео, публичные страницы, приложения и места.
Примечательно также то, что Туэнти работает в одностраничном режиме, то есть, после захода на сайт появляется линия загрузки, которая прогружает все ваши странички, что делает последующее их открытие быстрым и эффективным. Данная система загрузки очень похожа на лоудинг Гугл-почты и каждый раз радует результатами.
Впрочем, обо всём по-порядку.
Cuckoo – собственная автоматизированная лаборатория анализа вредоносных файлов
Месяц назад портал на моей новой работе был взломан. Руководство задалось вопросом «Как?». В ходе недолгих поисков и анализу подключений к серверам, был найден ПК сотрудника, с которого устанавливалось подключение примерно в то самое время. Сотрудник ничего о взломе не знал, но в ходе беседы вспомнил один случай, ему незадолго до взлома пришёл документ от «сотрудника фирмы», который не открылся. Файл был в формате exe, с этого и началась вся история.
PHP класс для удобной и безопасной работы с MySQL
А точнее, поскольку ключевой функционал уже использовался в рамках рабочего фремворка, я занялся выделением его в самостоятельный класс. Пользуясь случаем, хочу поблагодарить участников PHPClub-а за помощь в исправлении нескольких критических ошибок и полезные замечания. Ниже я постараюсь описать основные особенности, но сначала небольшой
В двух словах, класс строится вокруг набора функций-хелперов, позволяющих выполнять большинство операций с БД в одну строку, обеспечивая при этом (в отличие от стандартных API) полную защиту от SQL инъекций, реализованную с помощью расширенного набора плейсхолдеров, защищающих любые типы данных, которые могут попадать запрос.
В основу класса положены три базовых принципа:
- 100% защита от SQL инъекций
- При этом защита очень удобная в применении, делающая код короче, а не длиннее
- Универсальность, портабельность и простота освоения
Остановлюсь чуть подробнее на каждом из пунктов.
Защита от SQL-инъекций в PHP и MySQL
Статья получилась довольно длинной — в ней собраны результаты исследований за несколько лет — но самую важную информацию я постараюсь компактно изложить в самом начале, а более подробные рассуждения и иллюстрации, а так же различные курьёзы и любопытные факты привести в конце. Также я постараюсь окончательно развеять множественные заблуждения и суеверия, связанные с темой защиты от инъекций.
Я не буду пытаться изображать полиглота и писать рекомендации для всех БД и языков разом. Достаточное количество опыта у меня есть только в веб-разработке, на связке PHP/MySQL. Поэтому все практические примеры и рекомендации будут даваться для этих технологий. Тем не менее, изложенные ниже теоретические принципы применимы, разумеется, для любых других языков и СУБД.
Сразу отвечу на стандартное замечание про ORM, Active record и прочие query builders: во-первых, все эти прекрасные инструменты рождаются не по мановению волшебной палочки из пены морской, а пишутся программистами, используя всё тот же грешный SQL. Во-вторых, будем реалистами: перечисленные технологии — хорошо, но на практике сырой SQL постоянно встречается нам в работе — будь то legacy code или развесистый JOIN, который транслировать в ORM — себе дороже. Так что не будем прятать голову в песок и делать вид, что проблемы нет.
Хоть я и постарался подробно осветить все нюансы, но, вполне возможно, некоторые из моих выводов могут показаться неочевидными. Я вполне допускаю, что мой контекст и контексты читателей могут различаться. И вещи, которые кажутся мне сами собой разумеющимися, не являются таковыми для некоторых читателей. В этом случае буду рад вопросам и уточнениям, которые помогут мне исправить статью, сделав её более понятной и информативной.
Ещё только начав интересоваться темой защиты от инъекций, я всегда хотел сформулировать набор правил, который был бы одновременно исчерпывающим и компактным. Со временем мне это удалось:
Правила, соблюдение которых гарантирует нас от инъекций
- данные подставляем в запрос только через плейсхолдеры
- идентификаторы и ключевые слова подставляем только из белого списка, прописанного в нашем коде.
Всего два пункта.
Разумеется, практическая реализация этих правил нуждается в более подробном освещении.
Но у этого списка есть большое достоинство — он точный и исчерпывающий. В отличие от укоренившихся в массовом сознании правил «прогонять пользовательский ввод через mysql_real_escape_string» или «всегда использовать подготовленные выражения», мой набор правил не является катастрофическим заблуждением (как первое) или неполным (как второе).
Но вперёд, читатель — перейдём уже к подробному разбору.
Несколько интересных приемов и особенностей работы с MySQL
Спасибо Путину за это как баш
СпасибоПутинуЗаЭто
Правильным решением было сначала написать сборщик твитов, и, запустив его в фоновую работу, прикручивать голосовалку, модераторскую и прочие прелести нового микробаша. Решение было верным потому что метод search API твиттера возвращает максимум 1500 последних твитов. Это число в середине дня набиралось примерно за 20 минут.
10 практичных WordPress шорткодов
Пещерные технологии будущего
Давайте попробуем. Для этого нам необходимо понять по каким принципам идет развитие: внимательно рассмотреть те пещерные технологии, что мы использовали пару лет назад и то, как они превращались в “технологии будущего”, что мы используем сегодня.
Microsoft, как и Apple, отказалась от поддержки технологии Flash в новом браузере Metro IE10, приведя сходную аргументацию
Пояснения причин, по которым Microsoft остановилась на таком решении, данные Дином Хачамовичем, руководителем группы разработки Internet Explorer, способны вызвать ощущение дежавю. Больше года назад Стив Джобс, тогда еще генеральный директор Apple, почти теми же словам объяснял решение отказаться от поддержки Flash в iPhone и iPad.
Учебный пример разработки PHP-класса с использованием TDD
Целью поста является закрепление собственных знаний, полученных в результате прочтения некоторых книг, статей, а также возможность получить комментарии от опытных TDD-практиков, с указанием на грубые ошибки в процессе разработки или в тестах.
Вторичная аутентификация аккаунта на сайте
Когда на сайте имеются учетные записи пользователей, применяется аутентификация или идентификация пользователя.
Но с некоторых пор стали применять и вторичную аутентификацию – пароли крадут, они могут теряться, часто забываются. Да и ошибочные действия пользователей или банальная невнимательность может к этому привести.
Вторичная аутентификация поможет идентифицировать и вернуть доступ к данным.
Используются различные процедуры вторичной аутентификации:
• пересылка пользователю по e-mail ключа доступа;
• отправка SMS с кодом доступом;
• ответ на определенный контрольный вопрос;
• ввод старого пароля;
• подтверждение личности от третьего лица (третьих лиц).
Если взлом сайта, системы будет направлен на систему вторичной аутентификации (а не на обход более сложной системы доступа по паролю), то аккаунт может стать менее защищенным.
Например, в 2008 году в США хакер взломал аккаунт Сары Пэйлин (кандидата в президенты США) только лишь отгадав ответ на секретный вопрос к ее аккаунту: «Где Вы познакомились со своим будущим супругом?» (т.е. хакер имитировал известный вирус Морриса).
Всё серьёзно
Осторожно, трафик — внутри 50 фотографий.
Создание графиков с JavaScript
Благодаря этим возможностям, статистические графики могут быть нарисованы прямо в браузере. Типы графиков могут быть различными. В прошлом, чтобы изобразить график, использовались различные подходы. Если внешний вид графика позволял, использовался стандартный HTML и CSS. Однако, подходы для более сложных графиков использовали различные технологии встроенных в браузеры HTML, CSS и JavaScript. Популярным было использование Flash, или графики вычерчивались на сервере, с последующей передачей их изображения клиенту. Эти подходы требовали много времени для поддержки, нарушали консистенцию приложений, вынуждали клиента устанавливать дополнительное ПО и дополнительно нагружали сервера.
Обзор свежих материалов, август 2011
Ставим объекты на поток, паттерн фабрика объектов
Что представляет из себя этот паттерн?
Исходя из названия легко догадаться, что это некая, определенная, фабрика (или завод), который создает объекты. Еще раз выражу слово определенная. Как и в реальной жизни фабрика имеет некую специализацию, создавая товары или устройства какого-либо определенного типа. И фабрика, которая выпускает, например, мебель, не может производить, например, еще и компоненты для смартфонов. По аналогии с программированием фабрика объектов может создавать только объекты определенного типа, которые используют единый интерфейс. Самыми главными преимуществами данного паттерна в С++, является упрощение создания объектов различных классов, использующих единый интерфейс. Зачастую библиотекам, которые разрабатывают программисты нужно не только уметь работать с определенными объектами, но и создавать их. Самый очевидный пример загрузка файлов различных форматов. Мы не знаем, какой файл мы будем загружать заранее, но у нас есть список возможных форматов. Пользователь указывает файл, библиотека пытается определить тип файла и вызвать соответствующий загрузчик для него. В большинстве случаев программисты использует конструкции типа switch или if, чтобы определить экземпляр какого класса им необходимо создать. И чем больше возможных вариантов появляется, тем больше разрастается эта конструкция, в последствии превращающиеся в уродливого монстра.
Что нам может предложить фабрика объектов?
Во-первых, простой метод создания объектов, который сократит switch/if до 1ой строчки.
Во-вторых, удобные методы для работы с объектами фабрики. Мы всегда точно можем узнать, зарегистрирован ли у нее определенный класс, количество зарегистрированных классов, а так же удобные методы для добавления и удаления экземпляров классов в фабрику. С помощью фабрики можно ограничивать набор возможных классов, которая она будет создавать, используя некую конфигурацию.
Компиляция «на ходу» в эрланге
В эрланге транслятор встроен в библиотеку времени исполнения, и позволяет полностью управлять всеми стадиями трансляции.
Как это сделать
Information
- Rating
- Does not participate
- Location
- Герцлия, Тель-Авив, Израиль
- Registered
- Activity