-
Красота в Питоне: чистка строк
Есть многострочная (юникодная) строка. Скажем, номера телефонов в столбик.
Как получить список телефонов безо всякой мишуры вроде пустых строк и лидирующих/конечных пробелов ?
В Питоне это делается в 3 (три!) строки:
data = u''' 23-33-34 89644616130 79144905640 266653 ''' phones = data.splitlines() phones = map(unicode.strip, phones) phones = filter(bool, phones) print phones [u'23-33-34', u'8 964 461 61 30', u'7 9144905640', u'266653']
Вот за что я люблю этот язык.
-
Джанго: тестовый сервер или боевой?
Вот как определить, в какой среде запущена Джанга:
# settings.py import sys DEBUG = "runserver" in sys.argv
Очень удобно — при запуске тестового сервера всегда будет включен дебаг, а в бою — выключен.
-
Дрянь
Заходим на сайт Сноба. Загрузка подтормаживает. Ставим расширение для Хрома Ghostery. Видим следующее:
Заблокировано двенадцать(!) источников и почти 30(!) запросов ко всяким счетчикам, виджетам и прочей дряни. Вот полный список (ссылки укорочены многоточиями):
- http://ads.adfox.ru/165877/prepareCode?p1…
- http://ads.adfox.ru/165877/prepareCode?p1=bi…
- http://ads.adfox.ru/159305/prepareCode?p1=b…
- http://ads.adfox.ru/165877/prepareCode?p1=bisr…
- http://luxup.ru/tr/8523/&r=http%3A//www.google.com/reader/view…
- http://ad.adriver.ru/cgi-bin/erle.cgi?sid=110529&sz=reader_index&…
- http://ad.adriver.ru/cgi-bin/erle.cgi?sid=166191&target=top&bt=21..
- http://static.chartbeat.com/js/chartbeat.js
- http://s.clicktale.net/WRc3.js
- http://connect.facebook.net/ru_RU/all.js
- https://graph.facebook.com/fql?q=SELECT%20total_count%20FROM%…
- http://partner.googleadservices.com/gampad/google_service.js?v=276501
- http://www.googletagservices.com/tag/js/gpt.js
- http://www.google-analytics.com/ga.js
- http://www.google-analytics.com/__utm…
- http://www.google-analytics.com/__utm.gif?utmwv=5….
- http://www.google-analytics.com/__utm.gif?utmwv=5.3.9&…
- http://www.google-analytics.com/__utm.gif?utmwv=5.3.9&utms=4…
- http://www.google-analytics.com/__utm.gif?utmwv=5.3.9&utms=5&utm…
- http://www.google-analytics.com/__utm.gif?utmwv=5.3.9&utms=6&utmn=42…
- http://www.google-analytics.com/__utm.gif?utmwv=5.3.9&utms=7&utmn=154032…
- http://www.google-analytics.com/__utm.gif?utmwv=5.3.9&utms=8&utmn=242…
- http://www.google-analytics.com/__utm.gif?utmwv=5.3.9&utms=9&…
- http://www.google-analytics.com/__utm.gif?utmwv=5.3.9&ut…
- http://www.google-analytics.com/__utm.gif?utmwv…
- http://counter.rambler.ru/top100.jcn?2327123
- http://counter.rambler.ru/top100.scn?2327123&rn=880223809…
- http://www.tns-counter.ru/V13a…
- http://mc.yandex.ru/metrika/watch.js
Ладно, аналитику Гугла можно принять. Но зачем счетчики от Яндекса и Рамблера? А теперь подумайте о том, что каждый раз вы грузите себе на комп это говно.
Нет, установив однажды AdBlock и Ghostery, пользоваться интернетом без них уже не сможешь.
-
Колл-центр, типа
На рисунке изображена схема будущего колл-центра нашей организации:
Никогда не мог понять, зачем тратить сотни тысяч на разработку и внедрение подобных схем (плюс затраты на оборудование, поддержку, интеграцию), когда можно увеличить штат телефонистов и отвечать живым голосом.
Очевидно, что человек звонит, когда информации на сайте, листовках и т.д. уже не достаточно. И заставлять его слушать тарабарщину, давить на кнопки, ждать — нехорошо. В моей практике ни разу не было случая, когда робот-автоответчик помог в решении проблемы.
Но поскольку у нас Крупная® Организация™, то и схема колл-центра должна быть Корпоративной® и Энтерпрайзной™ — взрывающей мозг, проще говоря. А я устроил маленький саботаж — сделал так, чтобы из любого уровня этого ада можно было соединиться с оператором, нажав «ноль».
Уверен, это будет самой используемой фичей.
-
Регистрация в Микрософте
Вот такая скатерть ожидает всякого, кто желает получить регистрационный ключ для Вижуал Студии Экспресс. Несколько пустяковых вопросов:
- Если продукт бесплатный, зачем трясти с меня какие-то ключи? Вот когда куплю — тогда и буду регистрироваться.
- «Имя и фамилия» — читаем заблуждения программистов об именах.
- Зачем дата рождения? Зачем выпадающий список на 31 день? Быстрее вписать руками (я родился 31 декабря и поэтому во всех списках последний). Почему выбор года начинается с 2013? На сайте могут регистрироваться новорожденные? Если нет — зачем засорять список, если да — кому нужна эта дата?
- Зачем спрашивать пол? Если позарез нужно знать, почему бы не поставить мужской по умолчанию? Политкорректность?
- Проверка пароля на вхождение зубодробительных элементов. Очень плохой принцип. Хочу 123, значит, пусть будет 123. Все равно учетка на 1 раз.
- Адская капча в 8 символов. Нормальные люди давно поняли, что боты и китайцы ломают любые капчи, вред от них только пользователю.
- Спам-галка воткнута по умолчанию.
И все это — для того, чтобы получить несчастный ключ. Воистину, Микрософт не дружит с разработчиками.
-
Драйверы торгового оборудования
Есть такая штука — философия Unix. Это свод принципов проектирования систем и программ. Когда вы их придерживаетесь (в т.ч. при разработке под другие системы), то все работает хорошо, а когда отклоняетесь — начинаюстя фейлы.
Один из принципов состоит в том, что программа делает что-то одно, но очень хорошо. Например, отлично обрабатывает какие-то файлы. Еще один принцип — программа должна быть управляемой другими программами. Например, все данные, вводимые с клавиатуры, можно передать в параметрах командной строки.
Как следствие из этого — интерфейс программы для связи с внешним миром тоже является отдельной задачей и выносится в дополнительную абстракцию. Так, типичная *nix-программа представляет из себя библиотеку, которая просто делает что-то хорошо. Ее можно подключить в проект и пользоваться зашитыми функциями. Это один из возможных уровней абстракции. Второй — когда пишется команданая утилита. Это просто обертка, которая парсит аргумены командной строки, вызывает функцию библиотеки и выводит результат в stdout. Третий — ГУЙ для конкретной оболочки/среды. Опять обертка, которая пользуется командной утилитой/библиотекой. Четвертый — COM-сервер для Винды. Очередная обертка, сердце программы — библиотека — остается неизменным. Пятый — CGI-скрипт для веб-сервера. Аналогично вышесказанному.
И так далее. Суть этого подхода в том, что любой желающий сможет прикрутить чужой код к своей системе.
Но есть уроды-программисты, которые распространяют код в качестве COM-компонент, крутящихся только под Виндой. И плевать, что основная часть кода кроссплатформенна — нет, покупай Винду, ставь антивирус, потому что программер Вася не выучил Си/Плюсы, а сел быдлокодить в Вижуал Бейсике. И все это — в промышленных масштабах.
Я имею в виду конкретно разработчиков драйверов для торгового оборудования Атол и Штрих-М. Их драйвера — апофеоз идиотизма. Школьнику известно, что устройства, втыкаемые в COM-порт, могут работать в любой операционке, потому что взаимодействие с ними сводится к трем шагам — отправил байты в порт, подождал, прочитал ответ. Все!
Нормальный программист написал бы библиотеку, отдельно — командную утилиту, потом ГУЙ и т.д. Потом бы подтянулись 1С-ники со своими компонентами, COM-объектами и прочей чушью. И все бы это работало в любой системе.
Но нет же — качайте их драйвера с COM-объектом. И операционные системы, которые могли бы сделать процесс торговли надежней и безопасней, в пролете. Но мир не без добрых людей — находятся энтузиасты, которые пишут кроссплатформенные драйвера на том же Питоне, например. И работают они хоть на FreeBSD. Спасибо вам за это, ребята.
Короче, бородатые мужики, заложившие основы IT-систем, знали как надо делать программы. Нужно чаще впоминать их принципы. А если ваша программа работает только в Винде или тупит в ожидании нажатия кнопки — идите в жопу.
-
Привязка пользователей к телефону
Интернет-гиганты вроде Вконтакта, Одноклассников, Киви и др. давно смекнули, что привязывать учетку лучше не к емейлу, а сотовому. Это правильно. Если ваш сервис хоть немного связан с приватными данными и финансами, требуйте от пользователя сотовый, потому что ему же лучше будет — заполучить физически чужой телефон гораздо труднее, чем взломать виртуальную почту. Плюс телефон есть у всех, в т.ч. у бабушек и детей.
Специальный абзац для параноиков, уверенных в том, что светить номер — значит, нарываться на спам и лохотронщиков. Во-первых, опсосы и так сливают базы номеров тем, кто хорошо за это платит — помните лотерею на миллион от Биллайна? Во-вторых, спамить через смс дороже и сложнее, значит, отсекаются крупная часть спамеров. В-третьих, в любом нормальном телефоне можно поставить блок на нежелательные номера. В-четвертых, опсосов в последнее время шугают за спам, так что даже устное обращение в колл-центр возымеет действие.
-
1С и JSON: сериализация ссылок
Обновил функцию
json()
: http://pastebin.com/HFaEaETXТеперь ссылки справочников и документов преобразуются не в строки вида
"Счет №123 от 31.12.2012"
, а в строку-уникальный идентификатор, например,"f96fbf5f-3ade-11e1-b823-003048643e2d"
. Зачем это нужно?Затем, что разрабатывают конфигурации для 1С в основном криворукие уроды, которые не знают о том, что в каждой таблице должен быть уникальный id, по которому можно однозначно найти элемент таблицы. Это приводит к тому, что коды делают не уникальными или уникальными в пределах владельца. В итоге никакой пользы от кода нет - на кой он нужен, если не уникален? Что делать, если код известен, а владелец нет?
Специально для борьбы с уродами-разработчиками моя функция любезно вернет вам гуид ссылки, который самый что ни на есть уникальный. А текстовое представление ссылки справочника или документа можно получить в запросе функцией “представлениессылки()”.
Кстати, разработчики 1С тоже уроды, потому что гуид - это и есть ссылка и ее по идее можно получить в запросе. Почему это до сих пор не реализовано - тайна.
Комментарии из старого блога
07/10/14 Yan: Кстати, разработчики 1С тоже уроды, потому что гуид — это и есть ссылка и ее по идее можно получить в запросе. Почему это до сих пор не реализовано — тайна.
+100
07/10/14 Иван Гришаев: Согласен, частенько гуида недоставало.
-
Исходники queryfeed
Некоторое время назад я написал сервис для генерации РСС-лент из поисковых запросов в Твиттере, Фейсбуке и Гуглоплюсе. И даже осветил это событие на Хабре.
Кратенькую статистику (популярные и недавние запросы) можно посмотреть на главной.
Сегодня залил исходники (Питон, App Engine) на Гитхаб. Ничего особенного, Flask + Jinja2, но начинающим питонщикам пригодится.
-
Яндекс-Бары
В моем мозгу устоялась следующая ассоциация: всевозможные бары от Яндекса, Мейл.ру и иже с ними — чума, а программы, их распространяющие — крысы, разносчики заразы. Поэтому я веду борьбу и с заразой, вычищая бары из браузеров, и с крысами — удаляю дистрибутивы этих программ.
Я в курсе, что установку бара можно отключить, но эти галки всегда отмечены и порой даже спрятаны. Неверный клик — и все браузеры окажутся заражены. У меня, как у веб-разработчика, в системе 4 браузера. Мне проще отказаться от установки, чем напряженно проверять, куда на этот раз запрятана галка отключения бара.
Дорогой разработчик, я понимаю, что тебе нужно есть, но будь добр, придумай другой способ заработка, поскольку распространение программы с вирусом на борту не делает тебе чести.
Кто сказал, что бар — не вирус? Он проникает на компьютер обманным путем (пользователь не понимает, откуда взялся бар), устанавливает службу для самовосстановления (Мейл.ру, горите в аду), уведомляет центральный сервер обо всех ваших действиях (шпионит), занимает лишние ресурсы, не приносит никакой пользы — курсы валют есть на любом портале, виджет погоды у всех на рабочем столе, поле поиска есть во всех браузерах.
Именно поэтому новость «Яндекс» закрывает «Бар» вызывает дикий, неистовый восторг, хотя на практике оказывается, что вместо старого трояна будут выпускать новый.
Кстати, при установке в Фаерфокс бар изменяет параметры, не доступные для редактирования в интерфейсе. Исправить их можно только в about:config, а это значит, что рядовой пользователь фактически обречен жить с баром до следующей переустановки Винды.
Удаляйте Аимпы, Панто-свитчеры и прочую хрень с барами.