5 причин, по которым мечтатели становятся лидерами

I walked beside the evening sea and dreamed a dream that could not be; the waves that plunged along the shore said only: "Dreamer, dream no more..." by i.anton.

Удивительно, насколько мечта может изменить жизнь человека. Мир, возможно, не узнал бы, что такое персональный компьютер, если бы когда-то в голове Билла Гейтса не родилась мечта создать его. Сколько прекрасных песен мы не услышали бы, если бы Джон Леннон не мечтал стать музыкантом. Читать

10 областей вашей жизни, которые нуждаются в совершенствовании

Day 123 - Discrimination by lsgyarmati - www.spotmob.com.

Нашу жизнь поддерживают десять основных столбов. Мы сможем прожить без одного из них, или без двух. Но если у вас не хватает слишком много, или некоторые столбы слишком низкие, ваша конструкция рискует рухнуть. Как избежать этого, рассказывает статья «10 Areas Of Your Life That May Need A Boost » на сайте Dumblittleman: Читать

Советы для повышения продуктивности

tripled productivity by tozzer577.

Для того, чтобы достичь большей продуктивности, мы должны ликвидировать все, что крадет у нас время. В статье «Biggest Productivity Tip» на сайте Personalhack приводится несколько советов: Читать

Создание собственных виджетов в PyGTK с помощью cairo

Свободная библиотека Gtk, как известно, не отличается очень большим выбором виджетов. Но никто не мешает создавать свои собственные.

Gtk, как известно, построена на принципах ООП, что хорошо ложится на объектную модель Python. В данном случае это означает, что наследование виджетов естественным образом соответствует наследованию классов в Питоне. Так, создав класс-потомок gtk.VBox, мы получим виджет со всеми свойствами VBox, и сможем добавлять в него нужную функциональность.

Покажу простейший пример. Пусть мы хотим создать виджет, выглядящий как комбинация gtk.Label и gtk.Entry, т.е. поле для ввода сразу с подписью. Чтобы сделать такое непосредственно средствами gtk, нужно создать gtk.HBox, а в него поместить Label и Entry. Т.е. HBox окажется родительским виджетом для всей конструкции. Вот от него и будем наследоваться:

class LabeledEntry(gtk.HBox):

Но наш виджет довольно сильно отличается от простого HBox, поэтому нужно переопределить инициализатор:

  def __init__(self,label=None):
gtk.HBox.__init__(self) # Вызываем инициализатор родительского класса
self.label = gtk.Label(label) # Создаём текстовую метку с нужной подписью
self.entry = gtk.Entry() # И поле для ввода текста
self.pack_start(self.label, expand=False) # Добавляем label в создаваемый виджет
self.pack_start(self.entry, expand=True) # Поле для ввода - туда же

Теперь можно дописывать методы по собственному усмотрению. Например, логично было бы видеть методы set_text и get_text:

  def get_text(self):
return self.entry.get_text()

  def set_text(self,text):
self.entry.set_text(text)

При желании можно добавить, например, get_label и set_label. Пример использования нашего виджета:

...
entry = LabeledEntry("Enter some text")
...

Таким образом, наследуясь от HBox или VBox, можно создавать виджеты, состоящие из нескольких готовых. Но иногда нужны виджеты, внешне не похожие ни на один из стандартных. И вот тогда выручает то, что все виджеты gtk отрисовываются с помощью Cairo, который имеет весьма простой API.

API этот имеет много общего со многими другими рисовальными API. Прежде всего, нужно получить контекст Cairo — объект, содержащий состояние изображения. Далее для собственно рисования вызываются методы этого объекта. Наиболее часто используемые:

  • cr.move_to(x,y) — переместить графический указатель в нужную точку холста,

  • cr.line_to(x,y) — провести линию от положения указателя до данной точки (указатель сдвинется в указанную точку),

  • cr.path_close() — делает текущую линию замкнутой,

  • cr.rectangle(x,y,w,h) — рисует прямоугольник; задаются координаты левого верхнего угла и размеры,

  • cr.set_source_rgb(r,g,b) — выбрать цвет для рисования; компоненты r,g,b измеряются от 0 до 1,

  • cr.stroke() — нарисовать контур текущей линии (выбранным цветом),

  • cr.fill() — закрасить текущую линию.

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

Пусть нам, скажем, нужен виджет, который будет отображать простейшие линейные диаграммы. Должна быть возможность добавлять в него данные, а он должен соответственно перерисовывать диаграмму. Такие виджеты удобнее всего наследовать от gtk.DrawingArea:

  class Diagram(gtk.DrawingArea):

Сам виджет DrawingArea выглядит как белый прямоугольник. И на нём, в соответствии с названием, можно рисовать. Пока сделаем инициализацию нашего виджета:

  def __init__(self,max=10,color=(0.8,0.8,0.6)):
gtk.DrawingArea.__init__(self)
self.data = [1] # Это будут данные, отображаемые виджетом
self.max = max # Сколько максимум данных будет рисовать виджет
self.color = color # Цвет диаграммы
# Вот это, можно сказать, самое главное: привязываем рисующую процедуру к событию перерисовки виджета
self.connect('expose-event', self.on_expose)

Определяем собственно метод, который будет отрисовывать виджет:

  def on_expose(self, widget, event):

В аргументе widget передаётся сам виджет. Первое, что нам от него нужно — это размеры и положение:

    x,y, width,height,_ = widget.window.get_geometry()

Кроме того, нам понадобится контекст Cairo:

    cr = widget.window.cairo_create()

Вычислим некоторые размеры:

    xpad = 0.03*self.width           # Поля по горизонтали
ypad = 0.07*self.height # И по вертикали
w = float(self.width-2*xpad) # Ширина 'рабочей' части виджета
h = float(self.height-2*ypad) # и высота
M = max(self.data) # Максимум данных - он нужен, чтобы выставить масштаб по оси Y
n = len(self.data) # Количество данных

    cr.rectangle(0,0,self.width,self.height)   # Обозначаем прямоугольник, закрывающий весь виджет
cr.set_source_rgb(1,1,1) # Выбираем белый цвет
cr.fill() # Закрашиваем наш прямоугольник - это будет фон

    cr.move_to(xpad, ypad+h-h*float(self.data[0])/M)  # Ставим указатель в верхний левый угол будущей диаграммы
for x,y in enumerate(self.data[1:]): # Пробегаемся по всем данным
cr.line_to(xpad+w*float(x+1)/(n-1), ypad+h-h*float(y)/M) # Проводим очередной отрезок ломанной
cr.line_to(xpad+w, ypad+h) # Проводим правую границу диаграммы
cr.line_to(xpad,ypad+h) # Теперь нижнюю границу
cr.close_path() # Замыкаем ломанную - это проведёт левую границу диаграммы
cr.set_source_rgb(*self.color) # Выбираем цвет
cr.fill() # Закрашиваем ломанную

Этот метод будет вызываться каждый раз, когда нужно перерисовать виджет. Конечно, стоит иметь ввиду, что если он будет выполняться долго — перерисовка виджета будет тормозить. Так что вычислений и циклов в нём должно быть минимум. Всё, что можно, следует вычислять заранее, или кэшировать.

Ну и допишем метод для добавления данных в диаграмму:

def accept(self,n):
if len(self.data) == self.max:
del self.data[0] # Если данных слишком много - забываем самое старое значение
self.data.append(float(n)) # Добавляем число в список
self.queue_draw() # Этот вызов заставит виджет перерисоваться, т.е. лишний раз вызовет on_expose().

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

...
dg = Diagram(max=20)
...
dg.accept(10)
dg.accept(20)
...

Автор: Portnov

Как упаковать вещи, чтобы путешествовать налегке

ON THE GO 2 by magda.indigo.

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

Цифромыльницы "Canon": недокументированные возможности.

Я не фанат Кэнона, но статья зацепила и вызвала сожаление, что для Пентакса такого не придумали.

Хотите почитать книгу на своем фотоаппарате? Нет? А поиграть в реверси или сокобан? Тоже нет? Думаете, дядя шутит? На самом деле, все это возможно. Разумеется, при условии, что у вас есть цифровой компактный фотоаппарат Canon. Делается это при помощи магии. Простите, не удержался. Делается это при помощи программы CHDK.

Что такое CHDK? Процитирую Википедию: «CHDK (Canon Hacker’s Development Kit) — резидентная программа для компактных цифровых фотоаппаратов фирмы Canon, базирующихся на процессорах DIGIC II и DIGIC III, созданная сообществом энтузиастов, позволяющая значительно увеличить их функциональность и добавляющая недокументированные возможности. CHDK является резидентной программой, но по сложившейся традиции часто называется альтернативной прошивкой. При использовании CHDK сохраняется полностью базовая функциональность, способ управления и внешний вид меню настроек цифрового фотоаппарата. Дополнительные функции, добавляемые CHDK к основным, настраиваются с помощью альтернативного меню. Таким образом, осуществляется гибкое управление фотокамерой.»