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

Python. Developer/QA Automation.

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

Пользовательские атрибуты в Python

Время на прочтение11 мин
Количество просмотров186K
Вы когда нибудь задумывались о том, что происходит, когда вы ставите точку в python? Что скрывает за собой символ str(“\u002E”)? Какие тайны он хранит? Если без мистики, вы знаете как происходит поиск и установка значений пользовательских атрибутов в python? Хотели бы узнать? Тогда… добро пожаловать!
Читать дальше →
Всего голосов 101: ↑96 и ↓5+91
Комментарии20

Как выбирать главные задачи

Время на прочтение3 мин
Количество просмотров3.7K
Как часто можно наблюдать ситуацию, когда списки дел сделаны менее чем на 10%. Потому что мы все пытаемся впихнуть в один день, неделю и т.д.

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


Особенно хорошо видно, как меняет это прозрение жизнь людей, на некоторых бизнесменах и дауншифтерах. Люди вдруг начинают ценить простые вещи, много путешествовать, и это, на первый взгляд, кажется странным. На самом деле, иллюзия важности — хороший механизм. Он выгоден тем, кто владеет массами, потому что позволяет легко управлять делами народа, создавая ложно-важные задачи. Впрочем, пост не про ZOG это.

На самом деле, осознать иллюзорность важности дел в нашем мире — это только первый шаг. Самое трудное — делать правильный выбор.

Читать дальше →
Всего голосов 55: ↑36 и ↓19+17
Комментарии12

viewdoc — удобный доступ к любой документации

Время на прочтение2 мин
Количество просмотров2.3K
Для просмотра разной внешней документации (man/perldoc/pydoc/etc.) в Vim есть множество плагинов и рецептов. Проблема в том, что одни не настраиваются на открытие окон с документацией удобным мне способом, другие не расширяются для поддержки новых источников документации, третьи глючат и написаны слишком криво чтобы их можно было относительно просто пофиксить и выслать патч автору. На днях меня эта ситуация окончательно достала, и я написал плагин viewdoc, решающий все эти проблемы.

Он прост внутри и удобен в использовании, предоставляет единый пользовательский интерфейс для работы с любой документацией (включая встренный :help), умеет определять требуемую документацию по контексту, гибко настраивается, и очень просто расширяется (внешними плагинами или прямо в ~/.vimrc) для добавления новых источников документации. Основной недостаток — тестировался только в linux, может работать в других *nix, точно не будет работать в винде.
Читать дальше →
Всего голосов 17: ↑16 и ↓1+15
Комментарии16

Проблемы инкапсуляции

Время на прочтение3 мин
Количество просмотров3.1K
Недавно мне попалась на глаза интересная статья о проблемах в концепции инкапсуляции — почитайте, если есть время.
Для тех, у кого времени нет, я быстренько перескажу суть: инкапсуляция не выполняет одной из своих основных задач (дать «черный ящик» с описанными входами и выходами) по целому ряду причин:
  1. Программисты не доверяют чужим «черным ящикам».
  2. В чужих «чёрных ящиках» случаются ошибки, которые приходится фиксить, влезая в их внутренности (и ломая этим всю затею).
  3. Входы и выходы не всегда описаны понятно. Иногда бывает проще создать свой велосипед, чем разбираться в том, как поехать на чужом.

Всё это презренная реальность, которую теоретики программирования игнорируют. И как же с этим жить?
Читать дальше →
Всего голосов 55: ↑36 и ↓19+17
Комментарии36

Hibernate cache

Время на прочтение6 мин
Количество просмотров182K
Довольно часто в java приложениях с целью снижения нагрузки на БД используют кеш. Не много людей реально понимают как работает кеш под капотом, добавить просто аннотацию не всегда достаточно, нужно понимать как работает система. Поэтому этой статье я попытаюсь раскрыть тему про то, как работает кеш популярного ORM фреймворка. Итак, для начала немного теории.

Прежде всего Hibernate cache — это 3 уровня кеширования:
  • Кеш первого уровня (First-level cache);
  • Кеш второго уровня (Second-level cache);
  • Кеш запросов (Query cache);

Кеш первого уровня

Кеш первого уровня всегда привязан к объекту сессии. Hibernate всегда по умолчанию использует этот кеш и его нельзя отключить. Давайте сразу рассмотрим следующий код:
SharedDoc persistedDoc = (SharedDoc) session.load(SharedDoc.class, docId);
System.out.println(persistedDoc.getName());
user1.setDoc(persistedDoc);

persistedDoc = (SharedDoc) session.load(SharedDoc.class, docId);
System.out.println(persistedDoc.getName());
user2.setDoc(persistedDoc);

Возможно, Вы ожидаете, что будет выполнено 2 запроса в БД? Это не так. В этом примере будет выполнен 1 запрос в базу, несмотря на то, что делается 2 вызова load(), так как эти вызовы происходят в контексте одной сессии. Во время второй попытки загрузить план с тем же идентификатором будет использован кеш сессии.
Один важный момент — при использовании метода load() Hibernate не выгружает из БД данные до тех пор пока они не потребуются. Иными словами — в момент, когда осуществляется первый вызов load, мы получаем прокси объект или сами данные в случае, если данные уже были в кеше сессии. Поэтому в коде присутствует getName() чтобы 100% вытянуть данные из БД. Тут также открывается прекрасная возможность для потенциальной оптимизации. В случае прокси объекта мы можем связать два объекта не делая запрос в базу, в отличии от метода get(). При использовании методов save(), update(), saveOrUpdate(), load(), get(), list(), iterate(), scroll() всегда будет задействован кеш первого уровня. Собственно, тут нечего больше добавить.
Читать дальше →
Всего голосов 26: ↑26 и ↓0+26
Комментарии28

Grab — python библиотека для парсинга сайтов

Время на прочтение13 мин
Количество просмотров149K
Лет пять-шесть назад, когда я ещё программировал преимущественно на PHP, я начал использовать библиотеку curl для парсинга сайтов. Мне нужен был инструмент, который позволял эмулировать сессию пользователя на сайте, отсылать заголовки обычного браузера, давать удобный способ отсылки POST-запросов. Сначала я пытался использовать напрямую curl-расширение, но его интерфейс оказался очень неудобным и я написал обёртку с более простым интерфейсом. Время шло, я пересел на python и столкнулся с таким же дубовым API curl-расширения. Пришлось переписать обёртку на python.
Читать дальше →
Всего голосов 80: ↑79 и ↓1+78
Комментарии53

Сети для самых маленьких. Часть нулевая. Планирование

Время на прочтение7 мин
Количество просмотров2.1M
Это первая статья из серии «Сети для самых маленьких». Мы с товарищем thegluck долго думали с чего начать: маршрутизация, VLAN'ы, настройка оборудования.
В итоге решили начать с вещи фундаментальной и, можно сказать, самой важной: планирование. Поскольку цикл рассчитан на совсем новичков, то и пройдём весь путь от начала до конца.

Предполагается, что вы, как минимум читали о эталонной модели OSI (то же на англ.), о стеке протоколов TCP/IP (англ.), знаете о типах существующих VLAN’ов (эту статью я настоятельно рекомендую к прочтению), о наиболее популярном сейчас port-based VLAN и о IP адресах (более подробно). Мы понимаем, что для новичков «OSI» и «TCP/IP» — это страшные слова. Но не переживайте, не для того, чтобы запугать вас, мы их используем. Это то, с чем вам придётся встречаться каждый день, поэтому в течение этого цикла мы постараемся раскрыть их смысл и отношение к реальности.

Схема сети

Начнём с постановки задачи. Есть некая фирма, занимающаяся, допустим, производством лифтов, идущих только вверх, и потому называется ООО «Лифт ми ап». Расположены они в старом здании на Арбате, и сгнившие провода, воткнутые в пожжёные и прожжёные коммутаторы времён 10Base-T не ожидают подключения новых серверов по гигабитным карточкам. Итак у них катастрофическая потребность в сетевой инфраструктуре и денег куры не клюют, что даёт вам возможность безграничного выбора. Это чудесный сон любого инженера. А вы вчера выдержали собеседование и в сложной борьбе по праву получили должность сетевого администратора. И теперь вы в ней первый и единственный в своём роде. Поздравляем! Что дальше?
Читать дальше →
Всего голосов 104: ↑100 и ↓4+96
Комментарии134

Аналоговый компьютер на операционных усилителях

Время на прочтение11 мин
Количество просмотров37K
Аналоговый компьютер — аналоговая вычислительная машина (АВМ), это компьютер непрерывного действия, обрабатывающий аналоговые данные (непрерывную информацию).

БСЭ дает такое определение аналоговой вычислительной машины.
Аналоговая вычислительная машина (АВМ), вычислительная машина, в которой каждому мгновенному значению переменной величины, участвующей в исходных соотношениях, ставится в соответствие мгновенное значение другой (машинной) величины, часто отличающейся от исходной физической природой и масштабным коэффициентом. Каждой элементарной математической операции над машинными величинами, как правило, соответствует некоторый физический закон, устанавливающий математические зависимости между физическими величинами на выходе и входе решающего элемента (например, законы Ома и Кирхгофа для электрических цепей, выражение для эффекта Холла, лоренцовой силы и т. д.).

Стоит отметить, что аналоговый компьютер бывает не только электрический, но и механический, гидравлический и даже пневматический.

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

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

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

Читать дальше →
Всего голосов 58: ↑54 и ↓4+50
Комментарии34

Автоматическая фоновая подсветка для телевизора

Время на прочтение4 мин
Количество просмотров28K
На Хабре, любят смотреть на телевизор, монитор, ноутбук и даже телефон с фоновой подсветкой.
Предложенный ниже вариант, отличается от уже рассмотренных тем, что подсветка включается автоматически, не требует внесения изменения в конструкцию телевизора и может работать в качестве дежурного освещения.
Из недостатков надо отметить то, что подсветка статична, требует времени на монтаж и настройку под конкретное оборудование.

Читать дальше →
Всего голосов 44: ↑41 и ↓3+38
Комментарии50

Полевые транзисторы. For dummies

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

Введение


А теперь давайте поговорим о полевых транзисторах. Что можно предположить уже по одному их названию? Во-первых, поскольку они транзисторы, то с их помощью можно как-то управлять выходным током. Во-вторых, у них предполагается наличие трех контактов. И в-третьих, в основе их работы лежит p-n переход. Что нам на это скажут официальные источники?
Полевыми транзисторами называют активные полупроводниковые приборы, обычно с тремя выводами, в которых выходным током управляют с помощью электрического поля. (electrono.ru)

Определение не только подтвердило наши предположения, но и продемонстрировало особенность полевых транзисторов — управление выходным током происходит посредством изменения приложенного электрического поля, т.е. напряжения. А вот у биполярных транзисторов, как мы помним, выходным током управляет входной ток базы.

Еще один факт о полевых транзисторах можно узнать, обратив внимание на их другое название — униполярные. Это значит, что в процессе протекания тока у них участвует только один вид носителей заряда (или электроны, или дырки).

Три контакта полевых транзисторов называются исток (источник носителей тока), затвор (управляющий электрод) и сток (электрод, куда стекают носители). Структура кажется простой и очень похожей на устройство биполярного транзистора. Но реализовать ее можно как минимум двумя способами. Поэтому различают полевые транзисторы с управляющим p-n переходом и с изолированным затвором.

Вообще, идея последних появилась еще в 20-х годах XX века, задолго до изобретения биполярных транзисторов. Но уровень технологии позволили реализовать ее лишь в 1960 году. В 50-х же был сначала теоретически описан, а затем получил воплощение полевой транзистор с управляющим p-n переходом. И, как и их биполярные «собратья», полевые транзисторы до сих пор играют в электронике огромную роль.

Перед тем, как перейти к рассказу о физике работы униполярных транзисторов, хочу напомнить ссылки, по которым можно освежить свои знания о p-n переходе: раз и два.
Читать дальше →
Всего голосов 44: ↑40 и ↓4+36
Комментарии25

Расширения Firefox для веб-разработки на все случаи жизни

Время на прочтение6 мин
Количество просмотров56K
Исторически сложилось так, что Firefox пользуется широкой популярностью среди веб-разработчиков благодаря его расширяемости через подключение всевозможных плагинов и дополнений, написанных сторонними разработчиками. Идея выделения функционала в расширения позволила решать массу всевозможных задач прямо в браузере, не прибегая к внешним инструментам.

Безусловно в этом списке вы обязательно найдёте уже знакомые расширения, однако огромный пласт полезных расширений всегда остаётся в стороне. Так что приготовьтесь установить ещё парочку расширений! :)

Встроенные инструменты разработки в Firefox


Перед началом списка было бы неправильно не упомянуть об инструментах, уже встроенных в Firefox. Здесь речь идёт о тех самых инструментах разработки в Firefox Aurora 10 и том функционале, который сегодня можно найти в любом современном браузере.

При разработке интерфейса этих инструментов было перепробовано множество подходов и решений. В результате получился довольно приятный интерфейс, который любой желающий может испробовать, установив Firefox Aurora (хм, вы ещё его не поставили?)



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

Читать дальше →
Всего голосов 216: ↑197 и ↓19+178
Комментарии55

Делаем приватный монитор из старого LCD монитора

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


Вы наконец-то можете сделать кое-что со своим старым LCD монитором, который завалялся у Вас в гараже. Превратите его в шпионский монитор! Для всех вокруг он будет выглядеть просто белым экраном, но не для Вас, потому что у Вас будут специальные «волшебные» очки.

Всё что Вам нужно – это пара старых очков, нож для бумаги и растворитель для краски.

Читать дальше →
Всего голосов 1486: ↑1468 и ↓18+1450
Комментарии327

Appiny – скидки для гиков!

Время на прочтение2 мин
Количество просмотров566
imageВсем привет!
В начале Августа Хабр очень позитивно встретил идею о создании скидочного сервиса для гиков. С того момента прошло больше 3 месяцев…
После публикации у нас не только разом зарегистрировалось более 1500 человек, желающих получить скидки на различные продукты и услуги, но также к нам начали стучаться первые партнеры и инвесторы.
Мы никуда не исчезли, и все это время упорно работали над запуском Appiny, о чем постараемся рассказать под катом.
Читать дальше →
Всего голосов 54: ↑39 и ↓15+24
Комментарии31

Цена+Качество: выбор бюджетного ноутбука

Время на прочтение4 мин
Количество просмотров37K
Обычно для обзоров на Хабре я выбираю наиболее «навороченные» модели ноутбуков Lenovo. Что логично: именно в таких моделях, как ThinkPad X220 или IdeaPad U300s можно увидеть современные технологии во всей красе. По ним же можно попробовать угадать дальнейшее развитие индустрии мобильных компьютеров. Лично я делаю ставку на дисплеи IPS, гибридные дисковые системы (HDD+SSD) и использование металла не только в корпусах профессиональных моделей, но и обычных пользовательских лэптопов.

Между тем, бюджетные ноутбуки получают и у меня, и в обзорах моих коллег из компьютерных изданий, гораздо меньше внимания. Наверное, это не совсем заслуженно. Ведь сделать надежный, удобный и достаточно мощный ноутбук, который при этом обойдется в разумную сумму – подчас сложнее, чем разработать «с нуля» крутую новинку. В этом материале я попробую исправить ситуацию и расскажу о трех актуальных ноутбуках Lenovo бюджетного сегмента. В мою подборку попали ультракомпактный ноутбук ThinkPad X121e, рабочая лошадка ThinkPad Edge E420 и домашний заменитель десктопа Lenovo G570.
Читать дальше →
Всего голосов 30: ↑27 и ↓3+24
Комментарии54

Малоизвестные особенности Java. Вторая часть

Время на прочтение3 мин
Количество просмотров58K
Как и обещал, предлагаю вашему вниманию следующие пять пунктов.

Малоизвестные особенности Java. Первая часть

6. Конфликт имён.

Если импортированы несколько классов с одним и тем же именем из разных пакетов, возникает конфликт имён. В таком случае при обращении к классу следует указывать его квалифицированное имя, то есть полное имя, включая и имя пакета, например java.lang.String.

Неужели ничего нельзя с этим поделать? Оказывается можно. Следующий код скомпилируется без проблем, несмотря на то, что класс List присутствует и в пакете java.awt, и в пакете java.util:

import java.awt.*;
import java.util.*;
import java.util.List;

public class Класс {
	public static void main(String... аргументы) {
		List простоСписок = Collections.emptyList();
		System.out.println(простоСписок);
	}
}


Достаточно дополнительно импортировать необходимый класс, java.util.List в данном примере.

Тут, как вы заметили, используются кириллические идентификаторы. Да! Для кого-то это станет откровением, но Java… такая Java. Идентификатор может состоять из совершенно любых букв, помимо цифр, знаков подчёркивания и валюты США (однако последний знак ($) использовать не рекомендуется, он предназначен для системных нужд). Но оно нам надо? Разве только в целях обфускации. Только представьте себе, сколько разных идентификаторов можно сгенерировать всего-то из символов «А» английского, русского и греческого алфавитов…

Читать дальше →
Всего голосов 67: ↑61 и ↓6+55
Комментарии42

Наглядная демонстрация алгоритмов сортировки

Время на прочтение1 мин
Количество просмотров34K
Трансильванский университет Sapientia представил свой новый обучающий курс по алгоритмам сортировки. Стоит отметить талант создателей и высокую наглядность пособия.



Под катом есть еще видео
Читать дальше →
Всего голосов 181: ↑160 и ↓21+139
Комментарии46

Малоизвестные особенности Java

Время на прочтение4 мин
Количество просмотров140K
Готовясь к собеседованию, я решил освежить память да и вообще поискать каверзные и малоизвестные нюансы языка Java. Выборку пяти наиболее интересных на мой взгляд моментов я вам и предлагаю.

Вот уже подоспела и вторая часть статьи.


1. Нестатические блоки инициализации.

Всем, я думаю, известно, что в Java существуют статические блоки инициализации (class initializers), код которых выполняется при первой загрузке класса.

class Foo {
	static List<Character> abc;
	static {
		abc = new LinkedList<Character>();
		for (char c = 'A'; c <= 'Z'; ++c) {
			abc.add( c );
		}
	}
}


Но существуют также и нестатические блоки инициализации (instance initializers). Они позволяют проводить инициализацию объектов вне зависимости от того, какой конструктор был вызван или, например, вести журналирование:

class Bar {
	{
		System.out.println("Bar: новый экземпляр");
	}
}


Такой метод инициализации весьма полезен для анонимных внутренних классов, которые конструкторов иметь не могут. Кроме того, вопреки ограничению синтаксиса Java, используя их, мы можем элегантно инициализировать коллекцию:

Map<String, String> map = new HashMap<String, String>() {{
	put("паук",  "арахнид");
	put("птица", "архозавр");
	put("кит",   "зверь");
}};


Очень даже мощное средство, не находите?

JFrame frame = new JFrame() {{
	add(new JPanel() {{
		add(new JLabel("Хабрахабр?") {{
			setBackground(Color.BLACK);
			setForeground(Color.WHITE);
		}});

		add(new JButton("Торт!") {{
			addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent event) {
					System.out.println("Хабрахабр - торт!");
				}
			});
		}});
	}});
}};


Остальные четыре пункта под катом.
Читать дальше →
Всего голосов 163: ↑150 и ↓13+137
Комментарии75

zsh :: настраиваем «правое» приглашение командной строки

Время на прочтение2 мин
Количество просмотров8.2K
Ковыряясь с настройками zsh, наткнулся на весьма интересное решение для приглашения командной строки, которое размещается в этом шелле справа. Обычно туда принято помещать часы, но мне весьма приглянулась идея разместить там также нотификатор заряда батареи. В зависимости от уровня заряда, нотификатор показывается зеленым, желтым или красным цветом. Автор идеи зачем-то приплел к решению python, я все переписал на родном шелле.
Выглядит это как-то вот так:
Command line prompt, zsh
Читать дальше →
Всего голосов 51: ↑48 и ↓3+45
Комментарии25

Несколько полезных сервисов

Время на прочтение2 мин
Количество просмотров126K
Хочу поделиться ссылками на несколько полезных сервисов. Некоторые из них помогут сэкономить время, другие — сделают за Вас незнакомую/нелюбимую работу. Список разбит по категориям, чтобы было легче ориентироваться.

Сервисы опросов
userreport.com (добавил Romanych)
simpoll.ru
webanketa.com (добавил mihass)

Кнопки постинга в социальные сети
Кнопка от Яндекса
addthis.com (добавил UksusoFF)
share42.com
Читать дальше →
Всего голосов 382: ↑356 и ↓26+330
Комментарии108

Cmake — собираем переносимые приложения для Mac Os X и Windows

Время на прочтение4 мин
Количество просмотров17K
image
Рано или поздно наступает тот момент, когда приложения из наших лабораторий, полных чудес, вкусных библиотек и красивых фреймворков начинают проситься в большой мир, на компьютеры простых людей, не искушённых в магии. На их компьютерах не то, что не стоят наши новомодные фреймворки и средства разработки, там даже простого компилятора днём с огнем не сыщешь. Не может наше приложение жить без библиотек, которые так редко встречаются в дикой природе, зачахнет оно без них, никогда не видать ему белого света…
Но не всё так печально.
За подробностями под хабракат
Всего голосов 32: ↑31 и ↓1+30
Комментарии15

Информация

В рейтинге
Не участвует
Откуда
Нижний Новгород, Нижегородская обл., Россия
Зарегистрирован
Активность