Как стать автором
Обновить
0
0

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

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

О порядке поиска пакетов и модулей для импорта в Python

Время на прочтение5 мин
Количество просмотров59K
Начать, видимо, следует с того, что речь пойдет об интерпретаторе CPython версии 2.7.x (примеры проверялись на версии 2.7.3).

На официальном сайте имеются описания инструкции import и модулей в Python:

Из них следует, что в Python имеются пакеты (package), модули (module) и имена, определенные в модулях (names). Также следует отметить, что в некоторых частях документации модули называются подмодулями (submodule), если они размещены внутри пакета.

В языке Python инструкция import позволяет импортировать пакеты, модули и имена в пространство имен, в котором инструкция import выполняется. При это существует две интересные особенности:
  1. Из синтаксиса инструкции import не всегда явно следует, что именно должно быть импортированно: пакет, модуль или имя
  2. Синтаксисом инструкции import невозможно явно указать, что путь к модулю является абсолютным путем (хотя явно указать, что путь является относительным можно, а также возможно изменение семантики инструкции, в части использования абсолютного пути по умолчанию, см. www.python.org/dev/peps/pep-0328 )

Из этих двух особенностей следуют такие неоднозначности для записи import abcd:
  1. Импортировать ПАКЕТ abcd, либо импортировать МОДУЛЬ abcd
  2. Импортировать пакет/модуль abcd из ТЕКУЩЕГО ПАКЕТА (из пакета того модуля, в котором исполняется import abcd), либо ИЗ ПАКЕТА в соответствии с перечнем каталогов, указанных в sys.path

Еще примеры неоднозначностей:
  • from abcd import defg: (импортировать модуль defg из пакета abcd, либо импортировать пакет defg из пакета abcd, либо импортировать имя defg из пакета abcd, либо импортировать имя defg из модуля abcd) X (из того же пакета, либо из пакета в соответствии с sys.path)
  • import abcd.defg: (импортировать пакет defg из пакета abcd, импортировать модуль defg из пакета abcd) X (из того же пакета, либо из пакета в соответствии с sys.path)

Для разрешения эти декларативных неоднозначностей должен существовать императивный алгоритм. Такой алгоритм в некотором виде описан в официальной документации Python.
Читать дальше →
Всего голосов 34: ↑32 и ↓2+30
Комментарии14

Оптимизация Windows для использования SSD диска: мифы и реальность

Время на прочтение6 мин
Количество просмотров853K


Когда весь интернет пестрит холиварами на тему «SSD ненадежны» и «SSD настолько быстрые, что я больше никогда не буду работать с HDD», думаю самое время внести немного ясности в то море противоречевой информации о самих SSD и о настройке Windows для работы с ними.

Кто заинтересовался, прошу под кат.

Читать дальше →
Всего голосов 129: ↑81 и ↓48+33
Комментарии293

Touch-web: Swipe

Время на прочтение7 мин
Количество просмотров64K
Этим постом мы продолжаем серию статей на тему разработки веб-интерфейсов для touch-устройств.

Смартфоны с сенсорными экранами достаточно сильно распространены и стали незаменимыми помощниками многим из нас. Потому нельзя не учитывать их особенности при разработке мобильных веб-интерфейсов.
Сенсорное управление существенно отличается от привычного управления мышкой.
Пользователь взаимодействует пальцами с самим экраном. И в зависимости от того, какие движения и сколькими пальцами производит пользователь, интерфейс реагирует по-разному: если быстро коснулся экрана и отпустил палец, то срабатывает клик; если коснулся и провел пальцем по экрану – скролл; если провел двумя пальцами – zoom; и великое множество других вариантов реакции.

Сегодня речь пойдет о swipe, в простонародье – листалке. Swipe позволяет перелистывать «страницы» привычным движением пальца. О том, как грамотно реализовать swipe, я расскажу на примере блока новостей на главной странице портала Mail.Ru.



Много подробностей под катом
Всего голосов 62: ↑55 и ↓7+48
Комментарии27

Структуры данных в картинках. HashMap

Время на прочтение6 мин
Количество просмотров1.2M
Приветствую вас, хабрачитатели!

Продолжаю попытки визуализировать структуры данных в Java. В предыдущих сериях мы уже ознакомились с ArrayList и LinkedList, сегодня же рассмотрим HashMap.



HashMap — основан на хэш-таблицах, реализует интерфейс Map (что подразумевает хранение данных в виде пар ключ/значение). Ключи и значения могут быть любых типов, в том числе и null. Данная реализация не дает гарантий относительно порядка элементов с течением времени. Разрешение коллизий осуществляется с помощью метода цепочек.

А почему бы и нет?
Всего голосов 81: ↑75 и ↓6+69
Комментарии42

Java собеседование. Коллекции vs null

Время на прочтение3 мин
Количество просмотров129K
Всем привет!

В топике Java собеседование. Коллекции подробно изложен вопрос работы с Set & Map в Java. Но у меня ещё есть парочка любимых вопросов из этой области:

  1. Может ли null использоваться в качестве ключа в Map?
  2. Может ли Set содержать null?

подсказка (HashMap.java)
   public V get(Object key) {  
        if (key == null)  
            return getForNullKey();  
        int hash = hash(key.hashCode());  
        for (Entry<K,V> e = table[indexFor(hash, table.length)];  
             e != null;  
             e = e.next) {  
            Object k;  
            if (e.hash == hash && ((k = e.key) == key || key.equals(k)))  
                return e.value;  
        }  
        return null;  
    }  
    /** 
     * Offloaded version of get() to look up null keys.  Null keys map 
     * to index 0.  This null case is split out into separate methods 
     * for the sake of performance in the two most commonly used 
     * operations (get and put), but incorporated with conditionals in 
     * others. 
     */  
    private V getForNullKey() {  
        for (Entry<K,V> e = table[0]; e != null; e = e.next) {  
            if (e.key == null)  
                return e.value;  
        }  
        return null;  
    }  


Предполагается, что пытливый читатель самостоятельно поразмыслит над ответами и затем сравнит их с моими. Самые нетерпеливые могут сразу проследовать под кат.
Читать дальше →
Всего голосов 62: ↑51 и ↓11+40
Комментарии47

Слабые ссылки в различных языках программирования

Время на прочтение6 мин
Количество просмотров39K
В языках с автоматическим управлением памятью сборщик мусора удаляет объекты, когда они перестают быть доступными по ссылкам. Обычно это именно то, что нужно: объект существует, пока есть возможность к нему обратиться.
Иногда такое поведение не подходит. Например, программе понадобилось хранить некоторую вспомогательную информацию об экземплярах некоторого класса, но у вас нет возможности добавить в этот класс своё поле. В этом случае можно создать отображение, в котором ключом будет объект, а значением — вспомогательная информация.
Вот тут-то и начинаются проблемы. Поскольку отображение хранит ссылки на ключи, те объекты, к которым была привязана вспомогательная информация, перестают освобождаться из памяти. Если программа в процессе своей работы создаёт много объектов, память рано или поздно заканчивается.
Читать дальше →
Всего голосов 48: ↑45 и ↓3+42
Комментарии8

Солнечная система на LibCanvas

Время на прочтение10 мин
Количество просмотров54K


Вчера был отличный топик, "История одного хабраспора", о создании «галактики» на HTML5 Canvas, который сам по себе да своими комментариями вдохновил меня на ответный код. Думал, до окончания документации, не писать новых вещей на Хабру, но, как видите, сорвался) Спасибо kibizoidus за это.

В топике вы увидите описание процесс создания звёздной системы на последней версии LibCanvas. Быстро, оптимизированно, кратко.
Читать дальше →
Всего голосов 111: ↑107 и ↓4+103
Комментарии147

Введение в TDD «на пальцах» (Rails + Rspec)

Время на прочтение4 мин
Количество просмотров45K
Лично для меня, довольно тертого разработчика, процесс внедрения TDD был непростым и местами тернистым.

Вкратце законспектирую, поскольку порог входа в тестирование действительно выше, чем просто сесть и писать код на RoR. Сделаю несколько, как написали бы пиндосы, highlights.
image

Теоретически процесс TDD должен выглядеть так:



1. Написали падающий тест, прогнали rspec, убедились что тест не проходит (красный)

2. Написали кусок кода, прогнали rspec, убедились что тест проходит (зеленый)

3. Отрефакторили, убедились что все хорошо и тесты не падают.

4. Отправили код в продакшн

Читать дальше →
Всего голосов 38: ↑28 и ↓10+18
Комментарии9

Простое написание тестов — это не TDD!

Время на прочтение4 мин
Количество просмотров61K
Эта статья представляет собой хороший теоретический материал о TDD для тех, кто об этом ещё ничего не знает.


Читать дальше →
Всего голосов 88: ↑74 и ↓14+60
Комментарии121

Подборка инструментов для фронт-энд разработки

Время на прочтение2 мин
Количество просмотров134K
Как разработчику, мне очень нравятся инструменты, которые помогают сэкономить время или упростить процесс разработки фронт-энда. В этой статье я собрал мои любимые веб-инструменты для упрощения разработки веб-интерфейсов.

Картинки кликабельны.

Form builder


Формы являются очень важной частью любого веб-сайта, но их верстка может занять продолжительное время. Этот очень удобный инструмент, поможет вам создать красивую веб-форму очень быстро.
image
Читать дальше →
Всего голосов 202: ↑184 и ↓18+166
Комментарии40

Java собеседование. Коллекции

Время на прочтение10 мин
Количество просмотров900K
С недавнего времени у меня появилась настойчивая мысль, что профессиональное развитие сильно замедлилось и это хочется как-то исправить. Да, читаю книги, слушаю курсы, но в то же время приходит и понимание того, что возможно пришло время сменить работу, здесь вроде как все изучено, плавно уходим в рутину. Данная мысль сподвигла меня на рассылку своего резюме в несколько компаний — лидеров рынка. После прохождения собеседования в 3 из них, я решил, как водится внести свои 5 копеек в освещение обширной темы собеседования, а именно технических вопросов по Java коллекциям, с которыми приходится сталкиваться. Да, знаю, читатель скажет: «коллекции — избитая тема, сколько можно», но часть из приведенных ниже вопросов, я задавал своим знакомым разработчикам, которые занимают именно позиции разработчиков («крепких середнячков», по меркам недалекой от Москвы глубинки, которые уверенно справляются со своей работой на практике, а вот в теории скажем так есть пробелы, потому, что работа не требует решения каких-то нетривиальных задач, да и потому что не всем это интересно — изучать как внутри работает структура данных), вызывало растерянность. Думаю, что рассмотренный материал будет не очень интересен разработчикам выше уровня Junior (я попрошу их комментировать, дополнять и критиковать изложенный здесь материал), а вот Junior`ы уверен, найдут в этой статье интересное для себя.
Читать дальше →
Всего голосов 97: ↑86 и ↓11+75
Комментарии306

Простая техника Parallax Scrolling

Время на прочтение2 мин
Количество просмотров126K
Доброго времени суток уважаемые хабраюзеры. На сегодняшний день Parallax Scrolling является неким трендом и я хочу рассказать о простой реализации данного эффекта. Техника основана на скорости изменения свойства background-position. Эффект Parallax Scrolling заключается в том, что фон движется медленнее чем содержимое

HTML разметка


Создаем два блока с атрибутами "data-type" и "data-speed":
<section id="home" data-type="background" data-speed="10" class="pages">
         <article>Простая техника Parallax Scrolling</article>
</section>
<section id="about" data-type="background" data-speed="10" class="pages">
         <article>Простая техника Parallax Scrolling</article>
</section>

Для управления значениями скорости и позиции в JavaScript, data-type используются как ключевые атрибуты при передачи необходимых параметров.

Читать дальше →
Всего голосов 44: ↑34 и ↓10+24
Комментарии39

История реверс-инжиниринга одного SMS трояна для Android

Время на прочтение20 мин
Количество просмотров63K
image
Все началось с жалоб одного моего доброго друга, по совместительству владельца устройства на Android. Он жаловался, что оператор постоянно снимает с него деньги неизвестно за что. После звонков оператору выяснилось, что средства снимали за премиум SMS, которые мой друг якобы отправлял. Я сам неоднократно нарывался в Интернетах на подозрительные сайты, которые предлагают скачать apk с игрой/программой/Live Wallpaper, при установке которого выясняется, что это всего лишь программа, которая отправляет SMS на премиум номера. Но в этом случае если нажал кнопку, то «сам дурак», потому что правила в таких программках явно говорят, что последует отправка SMS на платные номера, да и ссылки они в итоге предоставляют на реальные программы.

Так или иначе, ко мне закралось подозрение, что здесь ситуация тоже завязана на таком роде деятельности, и я взялся разобраться, куда же все-таки утекают денежки.
Читать дальше →
Всего голосов 93: ↑88 и ↓5+83
Комментарии39

Ликбез по типизации в языках программирования

Время на прочтение12 мин
Количество просмотров516K
image

Эта статья содержит необходимый минимум тех вещей, которые просто необходимо знать о типизации, чтобы не называть динамическую типизацию злом, Lisp — бестиповым языком, а C — языком со строгой типизацией.

В полной версии находится подробное описание всех видов типизации, приправленное примерами кода, ссылками на популярные языки программирования и показательными картинками.
Читать дальше →
Всего голосов 239: ↑232 и ↓7+225
Комментарии180

Пагинация для Backbone.js

Время на прочтение3 мин
Количество просмотров20K
Добрый день! Недавно писал пагинацию для Backbone.js, вот хотел бы поделиться с Вами, может кому-то пригодится.
Читать дальше →
Всего голосов 42: ↑33 и ↓9+24
Комментарии42

Код CSS «с душком»

Время на прочтение8 мин
Количество просмотров107K
Недавно Крис Койер отвечал на вопросы читателей Smashing Magazine. Один из вопросов был о том, как распознать код CSS с «душком»:
Как можно определить, что ваш CSS пованивает? Какие признаки указывают на то, что код неоптимален или что разработчик писал его спустя рукава? На что вы смотрите в первую очередь, чтобы определить, плох или хорош код?

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

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

Я хочу поделиться несколькими вещами, на которые я обращаю внимание прежде всего, чтобы составить впечатление о качестве, сопровождаемости и чистоте кода CSS.
Читать дальше →
Всего голосов 165: ↑155 и ↓10+145
Комментарии131

Декоратор cached_property

Время на прочтение3 мин
Количество просмотров27K
Как часто вы пишете такие конструкции?

class SomeClass(object):
    @property
    def param(self):
        if not hasattr(self, '_param'):
            self._param = computing()
        return self._param

    @param.setter
    def param(self, value):
        self._param = value

    @param.deleter
    def param(self):
        del self._param

Это очень удобно, значение атрибута param при таком подходе не хранится напрямую в объекте, но и не вычисляется каждый раз. Вычисление происходит при первом обращении, и это значение сохраняется в объекте под временным именем _param. Если меняются условия, от которых зависит значение param, его можно удалить, и тогда оно снова вычислится при следующем обращении. Или можно сразу присвоить актуальное значение, если таковое известно.

У этого кода есть и минусы: у объекта появляется лишний атрибут с именем _param; при каждом обращении к атрибуту вызывается метод param(), который делает проверку hasattr; получившийся код достаточно большой, особенно если таких атрибутов в классе несколько.
Читать дальше →
Всего голосов 49: ↑44 и ↓5+39
Комментарии3

Базовые стили и полезные CSS-сниппеты

Время на прочтение6 мин
Количество просмотров148K


В этой статье собраны полезные  и «правильные» стили и сниппеты, которые помогут ускорить процесс разработки сайта, а также оптимизировать верстку.
Читать дальше →
Всего голосов 163: ↑118 и ↓45+73
Комментарии54

Agile+UX: как подружить качественный пользовательский интерфейс и гибкие методологии

Время на прочтение5 мин
Количество просмотров23K


Проблема создания качественного пользовательского интерфейса (UX-интерфейса) действительно существует. Конкретно — она проявляется, когда компания-разработчик использует гибкие методологи. Собственно причина того есть совокупность двух моментов:

  • Итеративность работы программистов. В Agile разработчики предпочитают создавать проект «по частям», отдельными итерациями. И таким же образом «передавать» получающийся продукт заказчику.
  • «Целостность» работы дизайнеров. UX-дизайнеры предпочитают продумывать и разрабатывать концепцию целиком. Соответственно, по готовности цельной концепции — они передают ее в разработку. Такой подход заставляет дизайнеров выбиваться из общего ритма, что порождает проблемы с распределением рабочего времени.

Намечается два пути: оставить дизайнеров в покое или попытаться вовлечь их в Agile (притом стараясь никого не покалечить). В первом случае придется жертвовать темпом, во втором — качеством конечного продукта. Или есть третий путь?

Сначала пример с большой красной машиной


Читать дальше →
Всего голосов 23: ↑22 и ↓1+21
Комментарии4

Как ниндзя прототипы делал. Ninjamock.com — дизайнер интерфейсов

Время на прочтение7 мин
Количество просмотров16K
Здравствуйте! Мы — команда ниндзя-разработчиков проекта ninjamock.com. Ninjamock.com — это еще один онлайн-дизайнер скетчей и прототипов. Проект полностью написан на javascript и HTML5, серверная часть — на ASP.NET MVC.

За год работы над проектом мы наступили на огромное количество граблей и накопили бесценный опыт разработки больших приложений на JavaScript, которым и хотим поделиться. В этой статье мы расскажем, как прототип из одного файла index.html перерос в полноценный проект с более чем 250 классами и 60000 строк кода (не считая сторонних библиотек). Также, в общих чертах опишем нашу архитектуру и детально опишем реализацию отрисовки на клиенте.


UPD: Следите за апдейтами на нашем твиттере или странице фб

Мне интересно!
Всего голосов 45: ↑42 и ↓3+39
Комментарии32

Информация

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