[zn]
04 декабря 2011
15 мая 2011
книга> Время жить, время умирать
Знакомство с Ремарком я начал с книга "Время жить, время умирать". Наверное, не самый лучший выбор в качестве первого произведения. Выбрал, ее наугад, когда был на Крупе.
Книга произвела сильное негативное впечатление с первых строчек, хотелось бросить ее и не брать вновь. Первое, что оттолкнуло - повествование ведется от лица немца во время ВОВ, второе - это навязчивые подробности смертей множества людей. Хотя сейчас могу сказать, что кто сможет прочитать первые 30-50 страниц, тот сможет прочитать и книгу.
Не знаю, дело ли чисто в моем восприятии, но удивительно то, что я в подробностях запомнил яркие сцены из книги, а с ними и ее сюжет. Автор мастерски в деталях описывает окружающую обстановку военного времени в Германии, России. Поэтому советую прочитать ее, если интересен быт того времени.
В общем, могу сказать, что это отличная книга про человека, человеческие отношения в военное время.
18 марта 2011
First try with processing
int N = 10000; int W = 1000; int H = 1000; int maxR = 400; int maxRad = 5; void setup() { size(W, H); noStroke(); smooth(); background(0); for(int i=0;i<N;i++) { float r = random(maxR); float q = random(360); float rad = r*maxRad/maxR; int col = int(r*maxR/255); fill(col,col,col,100); ellipse(W/2 + cos(q)*r,H/2+sin(q)*r,rad,rad); } save("space.png"); }
13 марта 2011
Guano Apes в России
21.04.11 St. Petersburg (RU) Leader
22.04.11 Moscow (RU) Milk
24.04.11 Ekaterinburg (RU) Teleclub
26.04.11 Novosibirsk (RU) Crystal Music Hall
10 мая 2009
Шаблонные движки для Python
P.S. Посмотрев несколько из них, выбрал Jinja2.
13 января 2008
GoogleWeather
Далеко ходить не стал, решил заюзать веб-сервис от Google.
В итоге написал небольшую прогу на питоне, которая раз в 10 секунд получает текущую температуру, все просто и понятно..
from threading import Timer
from urllib2 import urlopen,quote,URLError
from xml.dom.minidom import parse
import sys
City = "Барнаул"
# Заменяем не ASCII символы на строки вида %xx, где xx - код в utf-8
qCity = quote(City)
uri = "http://www.google.co.uk/ig/api?weather=" + qCity
# Интервал опроса в секундах
interval = 10.0
timer = Timer(0.0,None)
def get_temperature():
try:
intstream = urlopen(uri)
except URLError, ex:
print "Ошибка при установке соединения."
sys.exit(0)
xmltree = parse(intstream)
# достаем текущие погодные условия
items = xmltree.getElementsByTagName("current_conditions");
cc_items = items[0].childNodes
temperature = -273
# достаем температуру
for cc_item in cc_items:
if(cc_item.nodeName=="temp_c"):
temperature = cc_item.attributes.getNamedItem("data").nodeValue
break
print temperature
def timer_proc():
global timer
get_temperature()
timer = Timer(interval,timer_proc)
timer.start()
def main():
global timer
timer = Timer(interval,timer_proc)
timer.start()
if __name__ == '__main__':
main()
Скачать код
Далее я переделал это консольное приложение в гуи под GTK. Скачать GTK-версию
Также написал то же самое на Java :) Скачать Java-версию
В итоге посмотрел реализации XML DOM-парсеров в этих языках. Увы в джаве не нашел какого-нибудь встроенного парсера, только голые интерфейсы.. Пришлось выкачивать реализацию от Apache Xerses.
В питоне есть встроенный minidom-парсер, который, имхо, замечательно подходит для такого типа задач..
PS:
У меня возникло несколько вопросов java-девелоперам:
- Есть ли, все-таки, встроенные парсеры?
- Можно ли внешнюю подключаемую библиотеку(jar) включать в итоговый исполняемый java-файл, причем не полностью, а только то, что необходимо? Ибо размер того же Xerses около 1,5 Мб.
Также привожу пример XML, выдаваемого гуглом на запрос погоды:
<?xml version="1.0"?>
<xml_api_reply version="1">
<weather module_id="0" tab_id="0">
<forecast_information>
<city data="город Барнаул, Region of Altai" />
<postal_code data="Барнаул" />
<latitude_e6 data="" />
<longitude_e6 data="" />
<forecast_date data="2008-01-02" />
<current_date_time data="2008-01-02 10:00:00 +0000" />
<unit_system data="SI" />
</forecast_information>
<current_conditions>
<condition data="Storm" />
<temp_f data="9" />
<temp_c data="-13" />
<humidity data="Humidity: 52%" />
<icon data="/images/weather/storm.gif" />
<wind_condition data="Wind: SW at 14 km/h" />
</current_conditions>
<forecast_conditions>
<day_of_week data="Today" />
<low data="-24" />
<high data="-12" />
<icon data="/images/weather/storm.gif" />
<condition data="Storm" />
</forecast_conditions>
<forecast_conditions>
<day_of_week data="Thu" />
<low data="-34" />
<high data="-16" />
<icon data="/images/weather/icy.gif" />
<condition data="Chance of Ice" />
</forecast_conditions>
<forecast_conditions>
<day_of_week data="Fri" />
<low data="-31" />
<high data="-26" />
<icon data="/images/weather/mostly_sunny.gif" />
<condition data="Mostly Sunny" />
</forecast_conditions>
<forecast_conditions>
<day_of_week data="Sat" />
<low data="-19" />
<high data="-17" />
<icon data="/images/weather/chance_of_snow.gif" />
<condition data="Chance of Snow" />
</forecast_conditions>
</weather>
</xml_api_reply>
Как видите, кроме текущих погодных условий, гугл выдает предсказания на будущее. Так что продолжение следует...
07 января 2008
Matplotlib

Для построения этой поверхности необходимы:
вектор аргументов x vX, вектор аргументов t vT, двумерный массив значений функции vY (y(t,x)).
X,Y = meshgrid(vT,vX) # из двух векторов создаются два двумерных массива
Z = zeros((K, N), float) # двумерный массив из нулей
fig=figure()
ax = p3.Axes3D(fig)
# поверхность
for i in xrange(N):
     for j in xrange(K):
         Z[j,i] = u(X[j,i],Y[j,i])
ax.plot_wireframe(X,Y,Z) # построение поверхности в виде проволочной сетки
ax.set_xlabel('T')
ax.set_ylabel('X')
ax.set_zlabel('U')
show()
При этом кое-что добавилось в инклуды:
from numpy import *
from pylab import *
import math
import matplotlib.axes3d as p3
Поясню, что делает функция meshgrid:
>>> from numpy import *
>>> vX = arange(0,5)
>>> vX
array([0, 1, 2, 3, 4])
>>> vY = arange(0,3)
>>> vY
array([0, 1, 2])
>>> X,Y = meshgrid(vX,vY)
>>> X
array([[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4]])
>>> Y
array([[0, 0, 0, 0, 0],
[1, 1, 1, 1, 1],
[2, 2, 2, 2, 2]])
29 декабря 2007
Вычмат на питоне или using matplotlib
А делал я их на питоне с использованием некой библиотечки для отрисовки графиков. Правда перед тем, как выбрал именно ее, я поискал в инете похожие разработки под C#, Java, но увы ничего стоящего не нашел(что есно не говорит о том, что их нет).
В итоге я ни капельки не пожалел. Во-первых, питон очень хорошо подходит для написания математических приложений (чего только стоит нативная поддержка комплексных чисел), во-вторых он обладает красивым, понятным синтаксисом :)..
Вот например интерполяция функции многочленом Лагранжа:
При этом все, что я сделал - непосредственно посчитал значения функции, многочлена и сформировал 3 списка:
funcx - список значений аргумента
funcy - список значений функции
Lny - список значений интерп. многочлена
и два списка для отображения узлов интерполяции
ly - значения аргумента в узлах интерполяции
ly - значения функции в узлах интерполяции
и обратился к функциям модуля pylab библиотечки matplotlib, который отвечает за построение и отображение графиков
# function
plot(funcx, funcy, '-', lw=1)
#interpolation
plot(funcx, Lny, '-',lw=2)
# узлы
plot(lx,ly, 'ro', lw=2)
xlabel('X')
ylabel('Y')
title('Lab6')
grid(True)
Прошу обратить внимание на ту формочку, куда выводится график. В ней присутствует возможность приближения, перемещения графика, сохранения в PNG.. Правда есть несколько минусов, с которыми пришлось мириться - это низкая скорость работы(отрисовки и работы с графиком, т.к. графический интерфейс библиотеки написан под Tkinter) и баги, возникающие при очень сильном приближении. Но все это терпимо, а представленного функционала вполне достаточно для выполнения лабораторных работ.
Функции Pylab повторяют функции пакета MatLab и обладают достаточно удобным и интересным синтаксисом параметров. Вот например функция plot. Она строит график по двум входным спискам - списку аргументов и значений, но есть еще параметры для настройки отображения самого графика: 'ro' - красные кружочки, '-' - просто линия, '--' - штриховая линия и т.д. Очень наглядно, никаких вам констант и бинарных флагов..
Еще пример - решение задачи Коши для диф уравнения методом Рунге-Кутта и Адамса:

Код
# Итак, все что нужно молодому питонисту, чтобы сделать вычмат:
Необходимые пакеты:
NumPy
Matplotlib
Офф:
http://matplotlib.sourceforge.net/
Доки:
http://matplotlib.sourceforge.net/api.pdf
http://matplotlib.sourceforge.net/users_guide_0.91.2svn.pdf
22 декабря 2007
Yoyoing
Йо-йо - что это? Детская игрушка или нечто большее?
Недавно стал обладателем этого девайса (Yomega Fireball) и могу сказать, что йо-йо - это замечательный способ отдохнуть и отвлечься от чего бы то ни было. Очень увлекательная вещь..

Не буду вдаваться в подробности, но существует несколько стилей по игре с йо-йо, и, в зависимости от стиля, существуют разновидности самих игрушек. Разные модели йо-йо различаются формой, системой тормозов, подшипниками... По ёёингу проводятся чемпионаты по всему миру.
Хочу отметить, что йо-йо - это одна из тех вещей, которую нужно сначала попробовать, чтобы понять, что это. И не каждый согласится тратить 0,5К рублей на покупку этого сомнительного чуда(сам был среди них.. кстати, спасибо, Илья, что втянул меня в это :) ). Таким людям могу посоветовать найти знакомых ёёеров и попробовать себя в этом виде спорта, либо просто купить эту игрушку(я не пожалел).
Купить йо-йо можно в специализированных интернет-магазинах(несколько ссылок в конце поста). В магазинах своего города я ни разу не встречал их в продаже.
Имхо, йо-йо - это musthave гаджет для любого программиста, ибо заставляет периодически отвлекаться от работы, вставать и разминать конечности (замечательное лекарство от геморра и туннельного синдрома). Плюс к тому, ёё - замечательный подарок, ведь сам никто не купит себе это чудо, не попробовав.
Сейчас ёху таскаю с собой везде: в универ, на работу. Как появляется свободное время и пространство - разворачиваю лупы по коридору или комнате.
Кстати, ёёеров все больше и больше. Цепляет почти каждого, кто хоть раз попробует игрушку в деле. Так что вливайтесь ;)
Ссылки:
http://www.yoyoing.ru/
http://gyroscope.ru/
20 декабря 2007
История одного байта
Всем болеющим/переболевшим ассемблером посвящается..
http://wasm.ru/article.php?article=onebyte
Терафлоповая пустота
http://www.xakep.ru/post/41289/default.asp
Советую почитать, цепляет очень неплохо, особенно на ночь глядя.. ;)
К разговору "все вы будите писать базы данных.."