Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2013-05-31

Tornado + Socket.IO

Было дело, я опробовал комбо Node.JS + Socket.IO на своей любимой задаче — аплоад файлов гигабайтных размеров. Как выяснилось, технология вполне рабочая. Но я не очень люблю Javascript. Во всяком случае, Python я люблю гораздо больше, поэтому я не стал делать полноценный аплоадер файлов на JS.

А недавно мне на глаза попалась подборка материалов про Tornado, где первым пунктом идет ссылка

TornadIO2 = Tornado + Socket.IO / Хабрахабр - http://habrahabr.ru/post/133350/


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

Upload task / Tornado + Socket.IO = Vuploader.http

Только руки не скоро до этой задачки дойдут, жаль.

original post http://vasnake.blogspot.com/2013/05/tornado-socketio.html

2013-05-30

Python datetime to JSON

Продолжая работу над Mapfeatureserver, столкнулся с типом данных «timestamp». Если точнее, то в Postgres это «timestamp without time zone». Библиотека Psycopg2 считывает такие данные в тип Python «datetime.datetime». И все сложилось бы иначе, если бы simplejson.dumps умел переваривать такое. Но он не умеет.

Пришлось копать глубже (как и с Decimal), и вот, что выяснилось.

Есть такой тип данных в ArcGIS REST API, называется «esriFieldTypeDate». Для даты-времени «2013-05-29 19:16:00» значение такого поля выводится как «1369854960000». Похоже на Unix timestamp но есть лишние нули. Как оказалось, данные типа esriFieldTypeDate выводятся в миллисекундах (milliseconds) с начала компьютерных времен. Следовательно, для simplejson.dumps мне надо написать хук, который получит datetime.datetime и преобразует его в миллисекунды от epoch – суть timestamp, причем полученное число должно быть целым.

Пришлось немного поэкспериментировать, в итоге получилось так:
EPOCH = datetime.datetime.utcfromtimestamp(0)

def unix_time_millisec(dt):
    delta = dt - EPOCH
    return delta.total_seconds() * 1000.0

def jsonify(obj):
    if isinstance(obj, decimal.Decimal):
        return float(obj)
    elif isinstance(obj, datetime.datetime):
        return long(unix_time_millisec(obj))
    raise TypeError(repr(obj) + " is not JSON serializable")

text = simplejson.dumps(data, ensure_ascii=False, sort_keys=True, indent=2, default=jsonify, use_decimal=False)

Использованные материалы

Кстати, почему-то плохо гуглится развернутое описание ArcGIS REST API, поэтому вот эта ссылка обладает повышенной ценностью


original post http://vasnake.blogspot.com/2013/05/python-datetime-to-json.html

2013-05-29

Git credential.helper cache and MS Windows

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

git config --global credential.helper cache
git config --global credential.helper 'cache —timeout=3600'


Но, как водится, есть «но». В MS Windows это не работает без дополнительных телодвижений. Тут нам придется сделать еще такое:

* Download the git-credential-winstore.exe application
* Run it! If you have GIT in your PATH, it should just work. If you don't, run 'git-credential-winstore -i C:\Path\To\Git.exe'.


Я понадеялся, что git-credential-winstore сам найдет мой git.exe и запустил инсталлятор без ключей. В итоге пришлось искать куда оно поставилось и переносить в правильную папку:
c:\d\Git\bin\git-credential-winstore.exe

После чего отконфигурял хелпер
git config --global credential.helper winstore
И всё заверте

original post http://vasnake.blogspot.com/2013/05/git-credentialhelper-cache-and-ms.html

2013-05-28

Operational transformation

Некоторое время тому, была тут заметка про Meteor.js. Я тогда читал про этот проект и попалась мне на глаза такая информация

David Greenspan
David wrote Etherpad, unwittingly reinventing Operational Transformation, an obscure theory of data synchronization, in the process. He then sold Etherpad to Google and worked on Google Wave and Google App Engine


Ну, почитал, ну интересно, надо бы поподробнее разобраться. Но со временем этот вопрос отошел на задний план. А тут снова:

CoVim is a Vim Plugin that adds real-time collaboration to your favorite text editor

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

Казалось бы, что тут такого? А дело в том, что всё это относится к одной и той же теме — Operational Transformation.

Между прочим, плагин написан на Python и в качестве серверной платформы использует Twisted.

С развитием сети и повышением связанности людей через сеть, удаленно, все большее значение приобретают инструменты коллективной онлайновой работы над одним файлом/проектом/материалом. Кто помнит Google Wave? А он был. Теперь его части можно найти в ГуглоДоках и в ГуглоПлюсе. И еще Фонд Апач ведет проект-наследник

Так вот, о совместной работе. Основная сложность — синхронизировать рабочий документ между несколькими одновременно работающими над ним пользователями, вот эту проблему и решают с помощью теории Operational Transformation (по русски, типа, Операционная Трансформация?).

Operational transformation (OT) is a technology for supporting a range of collaboration functionalities in advanced collaborative software systems. OT was originally invented for consistency maintenance and concurrency control in collaborative editing of plain text documents. Two decades of research has extended its capabilities and expanded its applications to include group undo, locking, conflict resolution, operation notification and compression, group-awareness, HTML/XML and tree-structured document editing, collaborative office productivity tools, application-sharing, and collaborative computer-aided media design tools (see OTFAQ). In 2009 OT has been adopted as a core technique behind the collaboration features in Google Wave and Google Docs.


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

Similarly, Joseph Gentle who is an ex Google Wave engineer and an author of the Share.JS library wrote: Unfortunately, implementing OT sucks. There's a million algorithms with different tradeoffs, mostly trapped in academic papers. The algorithms are really hard and time consuming to implement correctly. ... Wave took 2 years to write and if we rewrote it today, it would take almost as long to write a second time.



original post http://vasnake.blogspot.com/2013/05/operational-transformation.html

2013-05-27

ФФ новости

После очередного автоматического обновления Firefox, из браузера куда-то исчез flash-плагин. Оказывается, добрые люди поменяли способ установки плагинов. Теперь бесполезно размещать плагины в папке
/opt/firefox/plugins

По новым правилам, плагины надо складывать в папку
/usr/lib/mozilla/plugins/

Наверное, это называется инновация. А еще в списке задач (ALT-TAB) перестала отображаться иконка ФФ. Наверное, дело идет к переустановке браузера.



original post http://vasnake.blogspot.com/2013/05/blog-post_27.html

2013-05-24

Где иллюзии а где реальность

С какого года стали применять компьютерную графику в кино? С конца 1980-х? Тридцать лет — большой срок и теперь в кино нам показывают кадры, на которых уже невозможно отличить нарисованное от снимка с реальности:
Подлинность летающей тарелки вызывает сомнения? Всё правильно. В ней действительно без труда угадывается подделка. А когда в конце появляется второй неопознанный летающий объект, всякие сомнения в этом должны исчезнуть даже у самых легковерных зрителей.
...
Известно, что самый важный секрет фокусников — это отвлекающие манёвры. Без них никакая ловкость рук не поможет: кто-нибудь обязательно поймёт, что происходит на самом деле. Летающая тарелка — как раз такой отвлекающий манёвр, мешающий нам уловить главное.

А главное тут вот что: в этом видео нет ни одного настоящего пикселя. Нарисована не только летающая тарелка — нарисовано всё без исключения. Автомобиль. Водитель. Дорога. Окрестности, поросшие деревьями. Линия электропередачи. Блики в объективе. Небо. Всё от начала и до конца — это компьютерная графика.

Судя по комментариям на Youtube, смириться с этим фактом не так-то просто. В качестве доказательства Тсирбас добавил другое видео, в котором картинка разложена по слоям и полигонам, но неверующие остаются. Какие-то чудаки даже обвинили художника в сговоре с властями: с помощью этих трюков они якобы пытаются скрыть от народа существование настоящего НЛО.



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

original post http://vasnake.blogspot.com/2013/05/blog-post_24.html

2013-05-23

GeoJSON + MongoDB

Мало того, что теперь в MongoDB можно складывать геоданные, эти данные можно фильтровать и искать, причем при поиске используется сферическая модель Земли:

Доступен релиз ориентированной на хранение документов высокопроизводительной и высокомасштабируемой СУБД MongoDB 2.4, занимающей нишу между быстрыми и масштабируемыми системами, оперирующими данными в формате ключ/значение, и реляционными СУБД, функциональными и удобными в формировании запросов.
Поддержка GeoJSON. Новый тип индексов 2dsphere для работы с пространственными координатами с задействованием более точной сферической модели. Расширенные средства поиска по координатам, в том числе с учётом пересечения многоугольников;


Надо будет добавить в планы по Mapfeatureserver использование MongoDB в качестве бэкенда. Хорошая, годная БД.

original post http://vasnake.blogspot.com/2013/05/geojson-mongodb.html

2013-05-22

Mapfeatureserver PoC

PoC это Proof of Concept.
Вот, не прошло и года как родился таки первый релиз Mapfeatureserver. Под капотом WSGI сервис (Python, Flask) поверх геоданных в PostGIS.
В основе проекта лежит идея аналогичная идее Samba, только вместо Microsoft поедем на горбу Esri.

Короче, затея была такая: мы хотим использовать веб-карты на ArcGIS API но мы не хотим использовать (читай – покупать) ArcGIS Server. Теперь это возможно.
Берем бесплатный клиентский софт для веб-карт на базе ArcGIS API, например Картобонус; берем бесплатный и даже открытый серверный софт – Mapfeatureserver и БД PostGIS. Что получаем? Получаем полноценное и, главное, бесплатное решение для красивых, функциональных и программируемых веб-карт.

Все, кому нужна картография в веб с функциональностью ArcGIS, но у кого нет денег/желания на использование ArcGIS Server – велкам. Предлагаю Mapfeatureserver на замену серверу и Картобонус в качестве клиента.

Брать на складе
но лучше на ГитХабе

original post http://vasnake.blogspot.com/2013/05/mapfeatureserver-poc.html

2013-05-21

GeoJSON 2 EsriJSON

По ходу реализации Mapfeatureserver встречаются занятные проблемы. В частности, результаты надо выдавать в JSON, а именно гео-JSON версии Esri. Из PostGIS я забираю честный GeoJSON а клиенту отдаю EsriJSON, который, по непонятным причинам отличается от GeoJSON чисто косметически. Для точек и полилиний преобразование тривиальное, а вот с полигонами пришлось повозиться.
    if geometryType == u'esriGeometryPoint':
        geometry = {"x": shape['coordinates'][0], "y": shape['coordinates'][1]}
    elif geometryType == u'esriGeometryPolyline':
        geometry = {"paths": shape['coordinates']}
    elif geometryType == u'esriGeometryPolygon':
        if len(shape['coordinates']) == 1:
            geometry = {"rings": shape['coordinates'][0]}
        else:
            geometry = {"rings": shape['coordinates']}
            rings = []
            for ring in shape['coordinates']:
                for e in ring:
                    rings.append(e)
            geometry = {"rings": rings}
    else:
        raise ValueError("geoJson2agJson: unknown geometry type '%s'" % geometryType)
Причем основная возня была на этапе проверок. Заодно выяснилось, что при копировании данных по схеме Esri FileGDB → shp → PostGIS полигоны оказываются перекрученными. В смысле первая, она же последняя точка оказывается в другом месте полигона, да и направление обхода точек может поменяться.

Пример данных для полигонов

GeoJSON выдает что-то типа
{u'type': u'MultiPolygon',
    u'coordinates': [
[[
    [4279602.386113361, 7520773.048816763],
    [4279572.070031156, 7520668.786903687],
    [4279455.184565822, 7520710.387695587],
    [4279602.386113361, 7520773.048816763]
]], [[
    [4208589.216875655, 7569584.6493480615],
    [4208579.177972653, 7569396.323268423],
    [4207803.281121826, 7568963.732610181],
    [4208589.216875655, 7569584.6493480615]
]], [[
    [4226201.053365226, 7697045.899310788],
    [4226164.317933269, 7697577.007928321],
   ...
    [4211359.938852671, 7621739.802166396],
    [4226201.053365226, 7697045.899310788]
]]
]}

а EsriJSON должен быть наподобие такого
«rings»: [
[
    [4279602.386113361, 7520773.048816763],
    [4279572.070031156, 7520668.786903687],
    [4279455.184565822, 7520710.387695587],
    [4279602.386113361, 7520773.048816763]
], [
    [4208589.216875655, 7569584.6493480615],
    [4208579.177972653, 7569396.323268423],
    [4207803.281121826, 7568963.732610181],
    [4208589.216875655, 7569584.6493480615]
], [
    [4226201.053365226, 7697045.899310788],
    [4226164.317933269, 7697577.007928321],
   ...
    [4211359.938852671, 7621739.802166396],
    [4226201.053365226, 7697045.899310788]
]]

Что любопытно, после того как я написал решение на Python, нашлось решение на JavaScript
exports.geoJsonToEsriGeometry = function (geoJsonGeometry) {
  var coordinates = geoJsonGeometry.coordinates;
  switch(geoJsonGeometry.type){
    case "Point":
      return { "x" : coordinates[0], "y" : coordinates[1] };
    case "MultiPoint":
      return {"points" : coordinates};
    case "LineString":
      return {"paths" : [coordinates]};
    case "MultiLineString":
      return {"paths": coordinates};
    case "Polygon":
      return {"rings" : coordinates};
    case "MultiPolygon":
      var result = [];
      for (var i = 0; i < coordinates.length; i++) {
        var polygon = coordinates[i];
        for (var j = 0; j < polygon.length; j++) {
          result.push(polygon[j]);
        }
      }
      return {"rings": result};
    default:
      return {"error": "failed to convert GeoJson : " + JSON.stringify(geoJsonGeometry)};
  }
};

Спецификации


original post http://vasnake.blogspot.com/2013/05/geojson-2-esrijson.html

2013-05-20

NUT upssched


Гугель почему-то не хочет индексировать комментарии к постам на Blogger.com.
Например, уже неделю как есть полезный коммент к посту про ИБП в Линукс
http://vasnake.blogspot.ru/2011/11/blog-post_03.html
а поиском до сих пор не находится. Поэтому выношу полезняшку в отдельный пост:

Дополнение к посту
http://vasnake.blogspot.ru/2011/11/blog-post_03.html
про использование UPS в Linux через пакет NUT

В Debian Wheezy я столкнулся с проблемой - при пропадании питания не выключается хост и syslog содержит сообщение типа
"upssched Failed to connect to parent and failed to create parent: No such file or directory"

Как выяснилось, папка
/var/run/nut/upssched, указанная в конфиге /etc/nut/upssched.conf
все время куда-то пропадает.

Решение проблемы: в конфиге upssched.conf указать папку
/var/run/nut
вместо
/var/run/nut/upssched
Тогда все работает как надо.


original post http://vasnake.blogspot.com/2013/05/nut-upssched.html

2013-05-19

Мы решили сэкономить и купили ПароходЪ

Действительно, сколько можно? Носим деньги в прокат виндсерфинга и носим. Один час — 500/600/700 рублей. С каждого.
Кватит накуй, решили мы и выкупили сильно б.у. доску и почти новый парус. Весь комплект — доска с петлями и шарниром, парус + мачта + гик потянул на 45 тысяч рублей. Не самый дешевый вариант, но и оборудование не самое убитое. Хотя досочка — модель 2006 года, потрудилась в прокате. Стоимость хранения в контейнере у воды за 5 месяцев — еще 10 тысяч рублей. И теперь мы можем в любой день, сколько угодно времени катацца. Бесплатно.
Доска Starboard Start M, модель 2006 года, 205 литров, 259x90 cm. Зовут «ПароходЪ». После первой катапульты в процессе обучения хождению в петлях и трапеции, ПароходЪ станет класса авианосец. А пока так, дредноут.
Парус Severne Convert 6 метров luff 453 cm., boom 185, mast 430/21. Красивый, удобный и легкий.

Отдельно купить пришлось трапеционные кончики, защиту на шарнир и, пока нет, но надо — сумки-чехлы для перевозки. Пока не решил, взять один чехол для всего — доска, парус, гик, мачта или два чехла — один для доски, другой для паруса, гика и мачты.

original post http://vasnake.blogspot.com/2013/05/blog-post_19.html

2013-05-16

Debian Wheezy, Realtek NIC and WOL

Странное дело, сетевые карты с чипами от Realtek встречаются в каждом втором настольном компьютере, иногда даже в каждом первом. Но при этом уже который год в ОС Debian для этих сетевых карт используется какой-то урезанный драйвер.

Короче. Если у вас сетевая карта Realtek и наблюдаются странности в работе сети, типа не работает WOL, как у меня, или не получается выжать гигабитную скорость, или глючит DHCP — установите родной драйвер сетевой карты.

Как это сделать.
Определимся с железом, это раз.
lspci
    06:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06)
Видно, что NIC у меня типа RTL8111/8168B.

Найдем и скачаем правильный драйвер, это два.
Со страницы
из раздела «LINUX driver for kernel 3.x and 2.6.x and 2.4.x» пытаемся скачать пакет с драйвером. У меня это версия «8.035.00 2012/12/21».
Не все ссылки на закачку срабатывают, надо щелкать по очереди.
Скачался файл r8168-8.035.00.tar.bz2.tar.bz2 MD5: 80b8d23e463e5408dced1b1377579dae SHA1: a144e035e4e7991e946eac446c22bef0960276dc

Положим файл куда-нибудь и распакуем, это три.
tar jfxv ~/vshare/sqz2/realtek/r8168-8.035.00.tar.bz2.tar.bz2
получилась папка r8168-8.035.00 в текущем каталоге.

Скомпиляем и установим драйвер, это четыре. В процессе пропадет сетевое подключение, будьте готовы.
su -l
pushd /home/valik/rt/r8168-8.035.00
bash autorun.sh
Внимательно читаем, что пишут на экран.

Проверяем корректность установки и блокируем старый драйвер, это пять.
lsmod | grep r81
если видно r8168 то все хорошо. Если нет, значит что-то не компиляется, надо разбираться перед тем как двигаться далее.
После перезапуска машины проверяем имя модуля еще раз.
Если видно r8169 то надо блокировать неправильный драйвер
echo blacklist r8169 >> /etc/modprobe.d/blacklist-nic.conf
Перезапустить хост и проверить имя загруженного модуля еще раз.

Дополнительно, могут пригодиться команды
/etc/init.d/networking restart
ifconfig -a


Настройка WOL
На пробуждаемом хосте заклинаем
ethtool -s eth0 wol g
ethtool eth0
если этих двух строк нет в выдаче, хост пробуждаться не будет.
Supports Wake-on: pumbg
Wake-on: g

Чтобы разбудить хост, с другой машины в том же сегменте сети даем команду
wakeonlan 50:e5:49:3b:0c:be
или
etherwake 50:e5:49:3b:0c:be
MAC адрес примерный, чисто для справки.

Источники знания


original post http://vasnake.blogspot.com/2013/05/debian-wheezy-realtek-nic-and-wol.html

2013-05-15

/usr должен быть в корне

Это про Linux. Когда-то давно считалось хорошей практикой размещать папки (/ /boot /usr /var /tmp /home) в разных разделах диска. Более того, рекомендовано использовать разные файловые системы, с учетом оптимизации I/O.
Нынче все уже не так однозначно.

Чисто с практической точки зрения, лично я рекомендую оставлять папку /usr в корневом разделе. Иначе можно получить проблемы, например с VirtualBox:

udev rules want to access not mounted /usr
During boot I get the message from udev that the script
/usr/share/virtualbox/VBoxCreateUSBNode.sh
can not be found

Замечу, что тикету уже 14 месяцев и он до сих пор открыт.

Собственно, к теме. Как правильно переместить содержимое /usr в корневой раздел.
Это довольно просто, занимает не более получаса времени и требует двух reboot-ов. При условии, что в корневом разделе достаточно места.
Итак:
su -l
mkdir /usr2
cd /usr
find . -depth -print0 | sudo cpio --null --sparse -pvd /usr2
Скопировали /usr в корневой раздел.

cp /etc/fstab ./fstab.orig
nano /etc/fstab
Закомментировать подключение /usr

Ребут и выбор rescue mode при загрузке.
ls -la /usr
Должен быть пуст.

rm -rf /usr
mv /usr2 /usr
reboot

Если все сделано правильно, то все работает и появился лишний раздел на диске. Этим свободным местом можно распорядится по желанию. Я из него сделал криптованную корзину.
По мотивам

Узнал атрибуты раздела
nano /etc/fstab
    UUID=e18a87d3-d784-40d4-ae76-ec35f99a7059 /usr
blkid
    /dev/sda6: LABEL="usr" UUID="e18a87d3-d784-40d4-ae76-ec35f99a7059" TYPE="ext4"
/dev/sda6 с UUID видно каким.

mount
Нет упоминаний раздела в выдаче, значит не используется и можно смело его переформатировать.

mkdir /mnt/sda6
cryptsetup --verbose --verify-passphrase create formerusr /dev/sda6
cryptsetup --verbose status formerusr
mke2fs -t ext4 /dev/mapper/formerusr
mount /dev/mapper/formerusr /mnt/sda6
chown -R valik /mnt/sda6
Вот и всё. Был /usr, стал корзиной.

Если нужно перемонтировать:
    umount /dev/mapper/formerusr
    cryptsetup remove formerusr
    cryptsetup create formerusr /dev/sda6
    fsck -V /dev/mapper/formerusr
    mount /dev/mapper/formerusr /mnt/sda6

Вот как-то так можно поступить с отдельным разделом /usr

original post http://vasnake.blogspot.com/2013/05/usr.html

2013-05-14

Plone + Cartobonus = ESLMapDocument

Почитываю на досуге книгу «Professional Plone 4 Development» Martin Aspeli.
И так мне нравится как он вкусно расписывает достоинства Plone: и как фреймворка, и как приложения, и как платформы/сервера приложений, что захотелось как-то утилизовать все эти возможности. И тут (в комиксах в таких случаях рисуют загоревшуюся лампочку) у меня родилась идея.

На данном историческом этапе, в нашей конторе пытаются что-то сделать с «ArcGIS for SharePoint» произнося слова типа «ситуационные центры», «портал», «пользовательские документы» и подобные.

Вот я и подумал: зачем нам этот монструозный, loathsome, hideous SharePoint?

Мы возьмем за основу портала Plone, добавим в него аддон (архетип, документ), преобразовав чуть-чуть наш Cartobonus и получим «ArcGIS for Plone» с функциональностью идентичной «ArcGIS for SharePoint»: Plone + Cartobonus = ESLMapDocument.
А с учетом уже почти готового Mapfeatureserver можно говорить о портальном веб-ГИС решении уровня ArcGIS, только OpenSource.

Осталось только сделать, в рот мне ноги флаг мне в руки.

original post http://vasnake.blogspot.com/2013/05/plone-cartobonus-eslmapdocument.html

Upgrade from Squeeze to Wheezy

В черный понедельник, 13 мая я обновил на рабочей станции операционную систему. Была OS Debian Squeeze, стала OS Debian Wheezy 7.0.
Обновлялся по рекомендациям из
В общем, ничего страшного и сложного, без выкрутасов.

Сделал резервные копии всякого:
tar -zcvf ./etc-backup.tgz /etc
tar -zcvf ./var.lib.dpkg-backup.tgz /var/lib/dpkg
tar -zcvf ./var.lib.aptitude-backup.tgz /var/lib/aptitude
tar -zcvf ./var.lib.apt-backup.tgz /var/lib/apt
а вдруг пригодится.

Удалил всякое:
aptitude purge virtualbox-4.2
aptitude purge openoffice.org
aptitude purge openoffice.org-core
потом установлю на новую систему.

Почистил всякое:
запустите aptitude в «интерактивном режиме» и нажмите g («Начали»)
dpkg --audit
aptitude search "~ahold"
dpkg --get-selections | grep 'hold$'
apt-get autoremove
apt-get clean
Если вы добавляли секцию proposed-updates в файл /etc/apt/sources.list, то вам нужно удалить её

Поставил стоковое ядро вместо аналогичного из бэкпортов.
Поправил источники пакетов:
nano /etc/apt/sources.list
deb http://mirror.yandex.ru/debian/ wheezy main contrib non-free
deb-src http://mirror.yandex.ru/debian/ wheezy main contrib non-free

И обновился:
apt-get update
apt-get upgrade
apt-get dist-upgrade
рекомендовано использовать apt-get вместо aptitude, что странно — обычно наоборот.

Что интересно, рекомендовано использовать утилиту script, запустив ее перед началом колдовства:
script -t 2>~/upgrade-wheezy01.time -a ~/upgrade-wheezy01.script
я не знал, но она позволяет записать в файл сеанс работы в консоли — ввод/вывод. При необходимости можно использовать полученный файл как журнал и даже как «магнитофон» – повторно «проиграть» записанный сеанс.

По ходу апгрейда скачалось чуть больше гигабайта пакетов, времени ушло на всё-про-всё около 4-х часов.

Проблем было ровно две: одна — не хватило в самом конце места на корневом разделе (это больное место данного хоста) — не следует выделять для рутового раздела меньше гигабайта. Кстати, нынче не следует выносить «/usr» из рутового раздела, что приводит к размеру рутового раздела не менее 6-7 гигабайт.
Помогли команды
du -shm /lib
rm -rf /lib/modules/2.6.32-5-amd64

Вторая проблема: после установки стокового ядра перед обновлением, отвалился network. Потому, что я забыл, что драйвер для NIC ставил сам, компиляя из чего-то там (realtek WOL problem). После того как я убрал стоковый драйвер из блеклиста
nano /etc/modprobe.d/blacklist.conf
сеть смогла подняться.

Есть и третье. Не проблема, но помнить следует: при установке новых версий samba, nuts, dhcp и подобных, в конфигах которых были кастомные поправки, все старые конфиги скорее всего будут похерены, поэтому следует озаботиться предварительным сохранением важных и нужных конфигов. Конечно, обновлятор спросит — сохранить старый конфиг или нет. Но с учетом масштаба изменений в новых версиях, лично я не рискнул оставлять старые конфиги, благо все ходы записаны и можно будет все правки вернуть на место.

После обновления можно записать полноценный
/etc/apt/sources.list
deb http://mirror.yandex.ru/debian/ wheezy main contrib non-free
deb-src http://mirror.yandex.ru/debian/ wheezy main contrib non-free
deb http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free
deb http://mirror.yandex.ru/debian/ wheezy-updates main contrib
deb-src http://mirror.yandex.ru/debian/ wheezy-updates main contrib
deb http://download.virtualbox.org/virtualbox/debian wheezy contrib non-free

Не такой уж он и черный, этот понедельник.

original post http://vasnake.blogspot.com/2013/05/upgrade-from-squeeze-to-wheezy.html

2013-05-07

Смешной перевод

Что должен знать человек, который не знает иностранных языков.

Вкратце, такому человеку не следует забывать, что переводчики — это обычные люди. Ленивые и безотвественные. Поэтому получаемый перевод чаще бывает ближе к «смешному переводу Гоблина» нежели к «правильному переводу Гоблина».

Давайте поглядим, книга

Total Recall: My Unbelievably True Life Story
Arnold Schwarzenegger (Author)

Оригинал:
I was so curious about the world that school wasn't much of a problem.
I learned the lessons, did the homework, and stayed right in the middle of the class.
Reading and writing took discipline for me - they were more of a chore than they seemed to be for some of my classmates.
On the other hand, math came easy; I never forgot a number and could do calculations in my head.

Почти дословный перевод:
Я был настолько любознателен, что без особых проблем учился в школе.
Я получал знания на уроках, делал домашние задания и был средним в классе.
Чтение и письмо требовали от меня дисциплины - в отличие от некоторых одноклассников, для меня это была скорее тяжелая рутина.
Однако, математика давалась легко; я никогда не забывал чисел и мог считать в уме.

Официальный перевод (С. М. Саксина, Эксмо, 2013):
Окружающий мир был мне так интересен, что учеба давалась без особого труда.
Я отвечал на уроках, выполнял домашние задания и по успеваемости был средним в классе.
Чтение и письмо требовали от меня собранности: с ними у меня было больше проблем, чем у большинства моих одноклассников.
С другой стороны, математика шла легко: я никогда не путал цифры и легко считал в уме.

Вроде отличия невелики? Давайте разберемся.

Товарищ переводчик нашла "без особого труда" в "wasn't much of a problem". Хотя в третьем предложении прямо говорится о тяжелом труде. Товарищ переводчик, как мы увидим далее, постоянно путает «труд» и «проблемы», что симптоматично.

В "learned the lessons" нашлось "отвечал на уроках". Интересно, по версии переводчика "отвечал" это "learn" или "lesson"?

В "they were more of a chore" товарищ нашла "с ними у меня было больше проблем". А ведь именно тут говорится о тяжелом нудном труде. Очевидно, для товарища переводчика тяжелый труд это и есть проблема.
Ну и в четвертом предложении "forgot a number" превращается в "путал цифры" вместе с превращением "could do calculations" в "легко считал". Даже комментировать не буду.

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

И это только один абзац из почти шестисот страничной книги.
Стыд и позор на издательство Эксмо и персонально на Саксину С. М.

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

original post http://vasnake.blogspot.com/2013/05/blog-post_7.html

2013-05-06

Они о нас позаботятся

В каком-то фильме, кажется «51-й штат» - Formula 51 (2001), есть эпизод, где бандит вылезает из машины и идет в пивную, говоря напарнику про эксперта химика, который с ними едет - «позаботься о нем», имея в виду — не спускай с него глаз. Напарник, не долго думая, убивает химика и пакует его в багажник, благо он им успел надоесть.

Это я к тому, что истинные отношения проявляются в преодолении трудностей.

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

Уважаемый Клиент, сообщаем, что по Вашей претензии 1303120741 принято отрицательное решение.
Уточнить решение возможно в Телефонном центре.

Типа, что упало — то пропало, было ваше — стало наше. Всё. Точка.
Те сотрудники банка, с которыми я обсуждал эту проблему и которые помогали мне составлять претензии — обычные рядовые сотрудники — они сильно удивлялись, как это так, банк деньги не вернул, случай то очень простой и очевидно, что банк взял чужое, надо вернуть. А вот так, на тех уровнях, где претензии рассматриваются, отношение к клиентам банка другое, бюрократическое. Если можно не возвращать а можно забрать — заберем.
Десять старушек — рубль.

В Альфа Банк — ни ногой. Горите в аду, жлобы жадные.

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

Дискуссия на Банки.ру


original post http://vasnake.blogspot.com/2013/05/blog-post.html

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) Klaipeda (14) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)