Обновить
0

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

Отправить сообщение

Разбор кода и построение синтаксических деревьев с PLY. Основы

Время на прочтение11 мин
Охват и читатели46K

Что такое PLY?


PLY — это аббревиатура из первых букв выражения: Python Lex-Yacc.
Фактически, это порт утилит lex и yacc на python в красивой обертке.
Работать с ply очень просто и порог входа для начала использования практически нулевой.
Написан он на чистом питоне и представляет из себя LALR(1) парсер, но кому это интересно?
Я по натуре практик (как и большинсво из вас) поэтому пошли в бой!

Что будем делать?


На сайте есть пример написания очередного калькулятора, поэтому повторяться не будем. А сделаем что-то навроде парсера очень очень узкого подмножества PHP :)
Наша задача в конце статьи построить синтаксическое дерево для такого примера:

<?php
$val = 5;
$result = substr( "foobar", 2*(7-$val) );
echo "это наш результат: $result";


Пример очень маленький и взят с потолка. Но чтобы построить дерево кода нужно много и походу мы задействуем такой механизм PLY как state.

Читать дальше →

ExConsole — экстренная консоль для Python

Время на прочтение1 мин
Охват и читатели5K
Пост обещает быть сверхкратким.

ExConsole позволяет встроить интерактивную консоль-отладчик в Python-приложение. Консоль вызывается при фатальном исключении либо по приему SIGQUIT (он же Ctrl-\).

Пример использования:

import exconsole
exconsole.register()

do_dangerous_stuff()


Пример работы с консолью:

Activating emergency console
----------------------------
Caused by:
ZeroDivisionError
integer division or modulo by zero

Stack frames:
  [  0] example.py:17

  [  1] example.py:15
              Tester().test()
  [  2] example.py:9
                  self.inner()
  [  3] example.py:6
                  self.divide(2, 0)
> [  4] example.py:3
                  return a / b
On frame 4
Source:
           def divide(self, a, b):
    >>         return a / b

Press Ctrl-D to leave console
Type "_help()"" for built-in commands

>>> print a,b
2 0
>>> _f(3)
On frame 3
Source:
           def inner(self):
    >>         self.divide(2, 0)

>>> print self
<__main__.Tester instance at 0x7f67c9a0e440>


Читать дальше →

Эксперты в математике делят счет

Время на прочтение3 мин
Охват и читатели133K
Это перевод заметки Math Experts Split the Check, в которой на простом примере разделения счета в ресторане наглядно демонстрируется, насколько разными могут быть взгляды и суждения физика, математика, инженера, экономиста и программиста.

image

Инженер: не забудьте дать на чай 18%.

Математик: это до налогов или после?

Физик: давайте предположим, что в нашей системе нет налогов.

Программист: но налог есть!
Читать дальше →

Tridiv: редактор 3D CSS

Время на прочтение1 мин
Охват и читатели23K
image

Сегодня утром увидел в Твиттере Пола Айриша ссылку на кое-что впечатляющее. Tridiv — 3D-редактор для создания моделей на CSS. Для всех, кто хоть раз боролся с CSS трансформациями, чтобы сделать даже простой 3D эффект, известно, что подобная штука сможет значительно облегчить жизнь. Для остальных — еще одна демонстрация того, на что способны HTML5/CSS3.

Приложение интерфейсом напоминает привычные 3D WYSIWYG редакторы. В режиме Превью можно настроить освещение/фон/скопировать исходный код/посмотреть, как все это выглядит на CodePen. Возможно сохранение в Local Storage. Хотя, конечно, интересный вопрос — почему выбраны трансформации, а не WebGL. Капля дегтя — работает пока только в Chrome и Safari (но код префиксо-независимый, поэтому по всей видимости в скором времени добавится поддержка остальных браузеров — в том же Firefox работает demo от автора приложения).
Читать дальше →

Python изнутри. Объекты. Хвост

Время на прочтение10 мин
Охват и читатели27K
1. Введение
2. Объекты. Голова
3. Объекты. Хвост
4. Структуры процесса

В предыдущей части мы начали изучение объектной системы Питона: поняли, что именно можно считать объектом и каким образом объекты выполняют свою работу. Продолжим рассмотрение вопроса.

Приветствую вас в третьей части нашего цикла статей о внутренностях Питона (строго рекомендую прочитать вторую часть, если вы этого ещё не сделали, иначе ничего не поймёте). В этом эпизоде мы поговорим о важном понятии, к которому всё никак не подберёмся, — об атрибутах. Если вы хоть что-нибудь писали на Питоне, то вам доводилось пользоваться ими. Атрибуты объекта — это другие, связанные с ним, объекты, доступные через оперетор . (точка), например: >>> my_object.attribute_name. Кратко опишем поведение Питона при обращении к атрибутам. Это поведение зависит от типа объекта, доступного по атрибуту (уже поняли, что это относится ко всем операциям, связанным с объектами?).

В типе можно описать специальные методы, модифицирующие доступ к атрибутам его экземпляров. Эти методы описаны здесь (как мы уже знаем, они будут связаны с необходимыми слотами типа функцией fixup_slot_dispatchers, где создаётся тип… вы же прочитали предыдущий пост, так ведь?). Эти методы могут делать всё, что угодно; описываете ли вы свой тип на C или на Python, вы можете написать такие методы, которые сохраняют и возвращают атрибуты из какого-нибудь невероятного хранилища, если вам так угодно, вы можете передавать и получать атрибуты по радио с МКС или даже хранить их в реляционной базе данных. Но в более-менее обычных условиях эти методы просто записывают атрибут в виде пары ключ-значение (имя атрибута/значение атрибута) в каком-нибудь словаре объекта, когда атрибут устанавливается, и возвращают атрибут из этого словаря, когда он запрашивается (или выбрасывается исключение AttributeError, если в словаре нет ключа, соответствующего имени запрашиваемого атрибута). Это всё так просто и прекрасно, спасибо за внимание, на этом, пожалуй, закончим.

Стоять! Друзья мои, фекальные массы ещё только начали своё стремительное приближение к вращающемуся ветрогенератору. Пропадать, так всем пропадать. Предлагаю совместно изучить, что происходит в интерпретаторе, и задать, как мы обычно делаем, несколько раздражающих вопросов.
Стать умнее

Методы экспертных оценок

Время на прочтение6 мин
Охват и читатели276K
Зачастую необходимо выбрать среди множества альтернатив, при этом каждая обладает различными преимуществами. И как же выбрать лучшую, имея мнение десятков, а то и сотен экспертов?

Читать дальше →

Хорошая локализация: миссия невыполнима

Время на прочтение4 мин
Охват и читатели16K
Добрый день, читатель! Мы – компания All Correct Localization, занимаемся локализацией ПО с 2006 г., а игр – с 2008 г., и за это время успели попасть в двадцатку крупнейших переводческих компаний Восточной Европы. На страницах нашего блога мы будем делиться с вами опытом нашей работы. Думаем, он окажется полезным многим амбициозным разработчикам программного обеспечения и игр.
image

Хотите узнать рецепт отвратительной локализации? Чтобы прямо ни в какие ворота? Без малейшей надежды на успех? Тогда слушайте!

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

Естественно, вся редакторская группа пришла в восторг! По-настоящему креативные задания попадаются нам нечасто. Переводчица постаралась на славу. Вспомнила все: и булгаковское «Сижу, починяю примус», и «Свежее дыхание облегчает понимание», и даже бозон Хиггса.

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

Столкновение со стенкой на скорости 100 км/ч, неприятный сюрприз

Время на прочтение2 мин
Охват и читатели35K

Две одинаковые машины, каждая из которых движется со скоростью 100 км/ч, сталкиваются лоб в лоб. Равносильно ли это столкновению с бетонной стеной на скорости 200 км/ч?

Абсолютно упругий велосипедист на скорости 100 км/ч сталкивается лоб в лоб с тяжелым поездом, также двигающимся со скоростью в 100 км/ч. Отскочит ли при этом велосипедист со скоростью 300 км/ч?

Если на вопросы вы ответили "нет, да", то вы правы и ничего нового я вам не расскажу. А остальных приглашаю под кат. Никакой софистики там нет.
Читать дальше →

Запиши свой терминал

Время на прочтение1 мин
Охват и читатели16K
Теперь если Вас просят показать, как что-то выполняется в консоли, не надо копировать вывод из putty или записывать видео через snagIt. Утилита ascii.io сделает все это за Вас.
image
Читать дальше →

Научно-познавательные комиксы для детей — выпуск 2

Время на прочтение1 мин
Охват и читатели16K
Прошел уже месяц с первого нашего выпуска детских познавательных комиксов. За это время мы еще подготовили их несколько и хотим ими поделиться с вами.

Орбита захоронения спутников

image
Читать дальше →

Pipo M6 3G — планшет с отличным экраном и встроенным 3G

Время на прочтение4 мин
Охват и читатели97K
image
Сегодня у нас обзор новинки от Pipo — планшет Pipo M6 3G. 9.7 дюймовый экран с разрешением 2048х1536 и встроенным 3G модулем.
Читать дальше →

Сказ о том, как бы я продвигал сайт или не так страшно SEO как его малюют

Время на прочтение9 мин
Охват и читатели89K

Сначала предметная область


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

Ключи/запросы


Это фразы, которые набираются в поиске, для достижения результата (ответа на вопрос, покупки, получения информации…)
По частотностям
НЧ – низкочастотные (величина вычисляется логарифмически относительно самого большого числа запросов по ВЧ запросу из категории), для простоты пусть будет все что ниже 300 запросов (хотя в каждой группе по разному).
СЧ – среднечастотные (величина вычисляется логарифмически относительно самого большого числа запросов по ВЧ запросу из категории), для простоты пусть это будет все что выше 300 и ниже 2000 запросов (хотя в каждой группе по разному).
ВЧ – максимальное значение количества поисков простого запроса, к примеру «Светильник».
По конкуренции
НК – низкоконкурентные запросы, по которым есть шанс двинуться в топ (мало точных вхождений поисковой фразы, мало главных страниц, низкое количество результатов в поисковой выдаче)
СК – средне конкурентные запросы, по которым есть шанс продвинуться в топ, но есть и конкуренция (весь топ занят или главными или точными вхождениями, но показатели ссылочной массы конкурентов низкие)
ВК – высококонкурентные запросы, по которым необходимо из кожи вон вылезти чтоб продвинуться (и топ весь занят, и ссылочная масса ужасающая) при средних бюджетах ВК топ недостижим, но можно долго работать, чтоб кардинально поменять выдачу (закупка сателлитов, ссылочной массы, грамотное внутренне СЕО).

Семантическое ядро


Предполагает, что будет оптимизироваться каждая страница сайта. Это значит, что страница конечно будет давать ответ на запрос пользователя, но при этом на ней должен быть материал, который включает в себя эти ответы. То есть признаки, по которым ПС сможет выдать именно эту страницу на это запрос…
Пока что это сами запросы пользователей – они же «КЛЮЧИ»
Ключевые фразы подбираются для каждой страницы персонально.
Для главной страницы берутся общие запросы (описывающие общую категорию и выделяющие общую тематику сайта).
Для страницы категории выбираются запросы более узкой тематики, выделяющие отдельную категорию в общей всего сайта.
Для страницы товара/услуги – берутся максимально конкретные запросы, отражающие ее суть и позволяющие максимально точно ее/его идентифицировать.

0 Стратегия: Тариф Беззаботный


Минимум затрат, так как трафик тупо покупается у ПС. Других вариантов нет.

1 Стратегия: На халяву


Низкоконкурентный трафик – занимается ниша, где есть спрос, но нет конкурентов – классический «кто первый встал – того и тапки».
Схема до боли проста – ищем свободные ниши, подбираем НК запросы, пишем материал (даем полезное на запрос пользователя) – попадаем в ТОП, для усиления эффекта можно закупить по парочке ссылок.
Посмотреть нормальные стратегии...

Редактор с подсветкой кода. Проблемы и решения

Время на прочтение7 мин
Охват и читатели33K
image
Большая часть аудитории Хабра регулярно пишет код. В текстовом редакторе или IDE. И сколько бы не было в нем окошек и менюшек, а сердце любого редактора — это компонент (widget), который редактирует и подсвечивает код.

Больше года назад на Хабре был цикл статей от namespace про компонент QScintilla (1, 2, 3), и моя статья с его критикой. Получилась некоторая недосказанность. Ясно, что все плохо, но не понятно, что делать.

Сейчас я написал свой велосипед компонент под названием Qutepart, и у цикла есть продолжение.
Эта статья расскажет о том, как устроена подсветка синтаксиса в моем проекте: какие проблемы возникали, и как они решались. Она про подходы, а не про специфику конкретного GUI-инструментария. Если интересно заглянуть «под капот» текстового редактора, добро пожаловать под кат.
Читать дальше →

Интерфейс JTAG? — Это очень просто

Время на прочтение6 мин
Охват и читатели295K
Многие знакомы со словом «JTAG», но знакомство это скорее всего поверхностное. В этой статье я хочу перевести Вас на новый уровень, так сказать «во френдзону». Возможно, для многих я не открою ничего нового, но надеюсь тем, кто давно хотел ознакомиться, будет интересно почитать. Итак, от винта.
image

Запустить JTAG тестирование

Python изнутри. Введение

Время на прочтение7 мин
Охват и читатели104K
Boa constrictor1. Введение
2. Объекты. Голова
3. Объекты. Хвост
4. Структуры процесса

Помимо изучения стандартной библиотеки, всегда интересно, а иногда и полезно, знать, как язык устроен изнутри. Андрей Светлов (svetlov), один из разработчиков Python, советует всем интересующимся серию статей об устройстве CPython. Представляю вам перевод первого эпизода.

Мой друг однажды сказал мне: «Знаешь, для некоторых людей язык C — это просто набор макросов, который разворачивается в ассемблерные инструкции». Это было давно (для всезнаек: да, ещё до появления LLVM), но эти слова хорошо мне запомнились. Может быть, когда Керниган и Ритчи смотрят на C-программу, они на самом деле видят ассемблерный код? А Тим Бёрнерс-Ли? Может он сёрфит интернет по-другому, не так, как мы? И что, в конце концов, Киану Ривз видел в том жутком зелёном месиве? Нет, правда, что, чёрт побери, он там видел?! Эм… вернёмся к программам. Что видит Гвидо ван Россум, когда читает программы на Python?
Узнать ответ

Полезности для структурированной кабельной системы от AMP netconnect

Время на прочтение2 мин
Охват и читатели13K
В этот раз речь пойдет не о «интеллектуальных» системах, а о более простых вещах, которые могут в на физическом уровне смогут очень упростить обслуживание уже готовой СКС. Разберем, а также рассмотрим на фотографиях, насколько полезными, интересными могут быть системы безопасности SECURE от производителя AMP.

Думаю многие согласятся что никогда в практике не встречали таких аксессуаров. Тем более учитывая фактор отсутствия подобного даже у именитых производителей компонентов СКС. Можно в праве сказать, что это в своем роде «Ноу-хау» производителя AMP netconnect (TE connectivity). Основным назначением данной продуктовой линии является повышение сетевой безопасности и упрощение администрирования локальных сетей.

Как правило, сетевая безопасность обеспечивается с помощью программного обеспечения. AMP NETCONNECT предлагает новую линейку продуктов, обеспечивающих это решение на физическом уровне.

Данная «защита» обеспечивается введением защитных ключей соединителей. Каждому разъему соответствует свой уникальный ключ, т.е. совокупность углублений и соответствующих выступов на вилке и гнезде. Их конфигурация делает возможным сочленение только «правильных» вилок и гнезд. Это предотвращает несанкционированные подключения/отключения.

Габариты и установочные размеры защищенных гнезд такие же, как у обычных аналогов, поэтому их можно устанавливать в стандартные коммутационные и розеточные лицевые панели.

На рис. 1 представлено фото вилки-замка RJ-45. Длинна такого замочка 34 мм. Сам ключ длиннее. Скорей всего для невозможности это потерять.

Читать дальше →

Простое создание миниатюр и хранение их на Amazon S3

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

Требования:
  • Изображения хранятся на удаленных серверах. У нас есть только ссылки на эти изображения
  • Миниатюра должна формироваться любого заданного размера в момент непосредственного обращения к ней
  • Должна быть предусмотрена защита от вредителей
  • Миниатюра должна храниться на Amazon S3 и быть доступна по поддомену основного сайта. Количество бакетов на S3 и соответственно поддоменов неограничено

Читать дальше →

CreepyDOL — мобильная шпионская сеть на основе Raspberry Pi

Время на прочтение2 мин
Охват и читатели39K


Американский специалист по компьютерной безопасности Брендан О’Коннор (Brendan O'Connor) продемонстрировал на прошедшей недавно конференции по компьютерной безопасности BlackHat USA 2013 в Лас-Вегасе разработку CreepyDOL (Creepy Distributed Object Locator) — специальное ПО и устройства F-BOMB (Falling/Ballistically-launched Object that Makes Backdoors) на основе Raspberry Pi, с помощью которой можно создать сеть, перехватывающую Wi-Fi трафик. Стоимость комплектующих для одного такого девайса — около $57.
Читать дальше →

Каверзные сетевые вопросы

Время на прочтение14 мин
Охват и читатели239K
Давно была идея собрать воедино интересные вопросы, касающиеся сетей.

Объединяет их то, что все они довольно простые, но мы подчас о них не задумываемся (я во всяком случае о них не задумывался).
В общем я их собрал, подбил, нашёл ответы.
Итак, блиц опрос:

Начнём с самых низких уровней и с самых простых вопросов



В1. Почему для витой пары выбран такой странный порядок: синяя пара на 4-5, разрывая зелёную, которая на 3, 6?




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

habrahabr.ru/post/158177.


В2. В стандарте Ethernet между кадрами всегда имеется промежуток, называемый IFG (Inter Frame Gap) длиною 12 байтов. Для чего он нужен, и почему он присутствует в современных стандартах?

Читать дальше →

10 причин почему ваш проект должен использовать Dojo Toolkit

Время на прочтение15 мин
Охват и читатели43K
Dojo Toolkit это одновременно самый мощный и наименее используемый JavaScript фреймворк. В то время, как почти каждый JavaScript фреймворк или тулкит обещает сделать все на свете и даже больше, Dojo Toolkit предоставляет наиболее убедительные аргументы в доказательство своей функциональности. В этом посте будут описаны многие важные возможности Dojo Toolkit, а также будет рассказано, почему вы должны использовать его в своем следующем проекте.
Читать дальше →

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность