Home

[icon] наивный идеализм
View:Свежие записи.
View:Архив.
View:Друзья.
View:Личная информация.
View:Website (http://dervish-candela.deviantart.com/).
You're looking at the latest 4 entries.

Tags:, , ,
Subject:асинхронный гуй
Time:12:30 pm
оказался проще, чем мы думали:
import threading
import wx.lib.newevent
MakeEvent01, wx.EVENT01 = wx.lib.newevent.NewEvent()

class widget1(wx.SomeWidget):
def async_report(self, s):
    event = MakeEvent01()
    event.text = s
    wx.PostEvent(self, event)

def __init__(self, parent, **kwargs):
   wx.SomeWidget.__init__(self, parent, wx.ID_ANY, **kwargs)

def AssignJob(self,do_stuff):
   do_stuff_frozen = functools.partial(do_stuff, async_report)
   self.t = threading.Thread(target=do_stuff_frozen)
   self.Bind(wx.EVENT01, self.Event01Handler)
   self.t.start()

def Event01Handler(self, evt)
   self.Display(evt.text)

Этому добру кормим любую функцию вида DoSomeLongAndHeavyStuff(log) и радуемся жизни.
Интересно, можно ли ещё проще.
comments: 5 комментариев or Оставить комментарий в избранное рассказать другу

Tags:, , , , , ,
Subject:ВНЕЗАПНО, Хаскель атакуэ
Time:10:36 am
Вчера мы с [info]hakubo обсуждали Хаскель. Ну, обсуждали - это сильно сказано, обычно он присылает мне интересные ссылки на про языки программирования или аугментированную реальность, а я что-нибудь не слишком осмысленное пишу в эвей обратно, т.к. наши часы присутствия в онлайне сильно не совпадают.

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

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

Ради интереса полез посмотреть ,как у хаскеля с гуями (т.е. может ли он использоваться для чего-то кроме консольных программ или библиотек). И меня сразу же потрясла одна вещь - wxHaskell уже реализует почти буквально вон тот декларативный гуевый велосипед, что я придумал на досуге. Да простят мне бесстыдный и бесконечный самопиар, я так редко придумываю достойные идеи, что искренне радуюсь, когда их, оказывается, уже сделали.
hello
  = do f    <- frame    [text := "Hello!"]
       quit <- button f [text := "Quit", on command := close f]
       set f [layout := widget quit]

Вот это я называю «выразительность». Что (не)удивительно, этот код полностью понятен даже без какого бы то ни было знания Хаскеля, функциональных языков или принципов работы гуя на событийной основе.

Я по-прежнему боюсь тыкать палочкой Хаскель. Не могу представить, как лично мне его применить на практике, и хотя в теории это лечится чтением ртфм, на практике фм по нему часто запутан ещё больше, чем сам язык. Из других языков я, возможно, соберусь когда-нибудь потыкать палочкой Руби и Скалу. В Руби привлекает, по-видимому, большая гибкость и расширямость языка, полезная при создании кавайных, претенциозных и совершенно бесполезных маленьких DSL на месте. Чем хороша Скала, всем известно, хотя явовское наследие настораживает.
comments: 22 комментария or Оставить комментарий в избранное рассказать другу

Tags:, , ,
Subject:вивиескция - это элементарно, ватсон
Time:11:38 am
Пардон, интроспекция. На этом мы заканчиваем любимое нытьё о том, что нам якобы не дают нормально поковырять в живых объектах.

from wx.lib.mixins.inspection import InspectableApp
app = InspectableApp(False)
frame = TestFrame()
frame.Show(True)

import wx.py
shell = wx.py.shell.ShellFrame(frame, locals={'wx':wx, 'frame':frame})
shell.Show()
app.MainLoop()

Ха! Кому после этого нужны дебаггеры? Вместе с нашим окном запускается PyCrust.
Разобраться бы, как заставить wx выводить ошибки в стандартный поток вместо кретинического гуевого окошка, вызывающего exit() и исчезающего раньше, чем успеваешь прочитать трейсбэк.
comments: Оставить комментарий в избранное рассказать другу

Tags:, ,
Subject:редактор: Editra
Time:12:28 pm
Наконец-то, наконец-то! Настоящий код инсайт: автодополнение находит импорты, анализирует их и выдает адекватную структуру классов.
Из плюшек: нормальный дисплей-контрол, отображает шрифт очень качественно (аналогичный Комоду). Из встроенных цветовых схем дефолтная по традиции оказалась унылой «Серобуромалиновой», но Guepardo и Dessert терпимы.
Дикое количество лексеров, и, соотв. синтаксической подсветки, и возможность её нормально настроить. Подсветка и автодополнение в шелле. Очень отзывчивый и почти неуродливый интерфейс. Если убрать тулбар, то можно даже забыть, что оно GTK. Ололо, я дал маху. Это ж официальный редактор платформы wxWidgets, входящий в дистрибутив :) Но зачем они сделали такой уродливый тулбар?..
Табы закрываются по средней кнопке мыши (приятно видеть, что эта парадигма стала повсеместно распространенной ^^)
Из минусов: Суровые глюки, влоть до внезапно стирания файла при обновлении. Без бэкапа или контроля версий работать нельзя. :( UPD: Молодец разраб, глюк оперативно выпилил. Там просто опечатка была =)

Пытался перенести настройки цветовой схемы из комода в едитру (да, все уже поняли, что я больной на голову, но все же) - и не понял, как они в Комоде в конфиг-файле цвет записывают. Скажем, R:153 G:0 B:0 будет записано как «153», но вот R:0 G:153 B:0 — это уже внезапно «39168». Что это?
comments: 3 комментария or Оставить комментарий в избранное рассказать другу

Реклама

[icon] наивный идеализм
View:Свежие записи.
View:Архив.
View:Друзья.
View:Личная информация.
View:Website (http://dervish-candela.deviantart.com/).
You're looking at the latest 4 entries.