- После ознакомления с адовой смесью используемых координатных систем в рамках описания одной полилинии, нижеследующее даже интереса не вызывает. Но, хоть и не вызывает, а я зафиксирую. Чтоб знали.
-
- Как в AutoCAD формируется дуга? Вот цитата из соответствующей доки:
-
- An arc is always drawn counterclockwise from the start point to the endpoint
-
- Против часовой стрелки.
- Забыли, правда, уточнить, что это справедливо только в пользовательской системе координат (UCS). В мировой это может быть и по часовой. А координаты точек, напомню, доступны только в мировой системе (WCS). Следовательно, прежде чем работать с дугой, все координаты надо перевести в UCS. Как и при работе с bulge.
- UPD. был неправ. Правда тут.
-
- Интересная фраза встретилась намедни, американизЪм:
-
- sell down the river
-
- означает — предательство, вызывающее большие траблы у преданного. Говорят, корни фразы в работорговле на Мисисипи (ниже по реке).
-
Tools
Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.
2011-05-31
counterclockwise
Posted by Valentin at 02:39 0 comments
2011-05-28
И это всё о нём
- А вот кому еще багофичу от Autodesk (из AutoCAD)?
- Речь опять пойдет про bulge и экспорт координат из DWG. Напомню, знак (+ или -) булжа зависит от направления дуги: против часовой стрелки и по часовой, соответственно. Еще напомню, что через ActiveX API координаты доступны только в мировой КС (WCS), хотя для полилиний это неверно, как мы убедились :) Координаты узлов полилиний выдаются в обьектной КС (OCS).
-
- А теперь вопрос: как вы думаете, для какой координатной системы будет выдан знак булжа? Абсолютная величина булжа, слава Аллаху, не зависит от КС.
-
- Правильный ответ — знак булжа выдается для пользовательской КС (UCS)!
- UPD. Нет, правильный ответ здесь. (OCS)
-
- Лично у меня на этом месте поднимается волна протеста, где-то внутре. Ну как так можно — все координаты в WCS, но некоторые в OCS. А кривизна дуг в UCS?! А в чертежах, которые мне достались, такая уебищная UCS, что направление дуги меняется. И я, наивный, думаю что знак у булжа тоже поменяется — и наступаю на очередные грабли.
-
- В итоге, чтобы обработать булжи, приходится координаты полилиний приводить из OCS к UCS, аппроксимировать дуги и результат приводить обратно к WCS. Что, бляха-муха, осложняется отсутствием матрицы преобразования UCS -> WCS. Есть только обратная.
-
- Повбывавбы.
-
Posted by Valentin at 22:04 0 comments
2011-05-27
We can't send mail more than 500 miles
- Не знаю как вы, а я раньше не слыхал историю про электропочту, которая не ходит дальше, чем за 500 миль. Совершенно прекрасный анекдот, в старом значении этого слова.
-
- Оригинал истории про 500 миль ibiblio.org/harris/500milemail
- Оно же по русски rauf.livejournal.com/23552
-
- И более всего в этой истории меня потрясло качество каналов связи. Стабильность показателей такова, что за определенное время письмо улетает на определенное расстояние. Время события между 1994 и 1997 годом! Да у нас в те времена по модему-на-POTS не каждый мог в Интернет выйти!
-
- Даже сейчас, когда магистраль оптоволоконная (FTTB), я не могу похвастаться такой стабильностью каналов. Если бы эта истония произошла с нами, почта улетала бы все время на разные расстояния и было бы очень затруднительно сообразить — почему.
-
- Вышел я на эту замечательную историю отсюда:
- habrahabr.ru/blogs/webdev/117053
- где рассказывается о как бы чуде. По моему это чудо называется — отсутствие проверок, в конечном счете — детерминированности. Каких только чудес не насмотришься после срыва стека у некачественной программы, огромные коллекции вирусни наглядно демонстрируют спектр.
- Это не чудо, это лажа. Поэтому программы и отлаживают — избавляют от лажи :)
-
-
- Кстати, про чудеса - пытаясь опубликовать этот пост, я не смог залогинится в админку блога через браузер Chrome. Блогоплощадка - Гугель, браузер - Гугель. В почту логинюсь, в блог - не пущаить. За час до того хром обновился. Вчера пускал.
- Файерфокс прекрасно запустил меня в блог и дал опубликовать этот пост.
- Чудо?
Posted by Valentin at 01:35 0 comments
2011-05-26
keepass
- Помнится, некоторое время тому, я пробовал в деле KeePass2. На работе под виндой он прекрасно себя зарекомендовал, а вот дома под Дебианчиком стал глючить неподецки. Поэтому для дома я взял KeePassX. Не без гемора, но файлы друг друга они понимают.
- И вот, намедни, торкнуло меня попытаться еще разок запустить KeePass2 под Mono в Линуксе. Полез на сайт за свежей версией, а там в «последних новостях» эдакое:
- Introducing Debian/Ubuntu package
- Опаньки. И точно, сварганили deb-пакет. Поставил я его на свой squeeze
- gdebi keepass2_2.15+dfsg-2_all.deb
- и хранилка неожиданно показала, что время не стоит на месте. Резюмирую — КиПасс2 под Линуксом работает. Подглючивает местами, но уже не смертельно. Для операций «открыть-взять пароль» вполне годидзе.
-
- Прогресс не остановить!
-
- keepassx.org
- keepass.info
- sourceforge.net/projects/keepass/forums/forum/329220/topic/4503818
- packages.debian.org/sid/all/keepass2/download
-
Posted by Valentin at 01:53 2 comments
2011-05-25
Тонкости архитектуры
- Оно конечно, у всех свои резоны делать так а не иначе. Но некоторые резоны бывают сильно неочевидны.
-
- Вот возьмем простую функцию GetUCSMatrix() реализованную в ActiveX AutoCAD (дада, я все еще мудохаюсь с автокадом, вроде дело идет к победе через измор). В доках видно, что это метод интерфейса IAcadUCS, который берется из Document.ActiveUCS. Ну а документ — это интерфейс чертежа. Итого имеем:
- acad.ActiveDocument.ActiveUCS.GetUCSMatrix()
- Прекрасно. Применяем на практике — облом.
-
- Дебаг показывает, что обьекта ActiveUCS в чертеже нет. Как же так, ведь видно невооруженным глазом, что ось Х повернута вверх, чего быть не может в мировой СК (а может быть только в UCS)? Да и вызов диалога управления пользовательскими СК показывает, что в чертеже вполне конкретная UCS, и она активна. Что получается, пользовательская СК есть, но через программный интерфейс она недоступна.
-
- Бред? Бред. Дальше — больше. Чтение доступных источников приводит заключению (подтвержденному тестовым примером кода), что если UCS не имеет имени (Unnamed не в счет!), то ее как бы и нет, хотя она работает. А если имя есть, то и ActiveUCS есть.
-
- Вот и скажите мне, какой логикой руководствовался тот архитектор, который такое придумал? Почему при наличии активной UCS я не могу ее получить через API? Почему критерием доступности сделано наличие необязательного имени а не наличие обязательного влияния на координаты? Я не постигаю.
-
- Возникает логичный вопрос — а делать то чего? Источники показывают, что если ПСК есть но без имени, то ее параметры надо брать из системных переменных, например так:
m = (self.doc.GetVariable('UCSNAME'), \ self.doc.GetVariable('UCSXDIR'), self.doc.GetVariable('UCSYDIR'), \ (0.0, 0.0, 0.0), self.doc.GetVariable('UCSORG')) |
m = ucs.GetUCSMatrix() m = (self.doc.GetVariable('UCSNAME'), m[0], m[1], m[2], m[3]) |
- Особо отмечу — похожий, ибо нормальная матрица представляет собой четыре массива по четыре числа, в то время как из системных переменных можно получить только три массива по три числа. Где брать четвертый вектор — ну совершенно непонятно. Игнорировать.
-
- Отдельный цимес в том, что не имея доступа к UCS через API, ее невозможно поименовать, чтобы снять проблему безымянности. Только ручкаме, через GUI.
- Хотя, может я не все варианты еще проверил?
-
- На этом фоне совершенно теряется фокус с переменными типа VARIANT. Выглядит этот фокус так:
p = array.array('d', [point[0], point[1], point[2]]) norm = array.array('d', [norm[0], norm[1], norm[2]]) res = self.u.TranslateCoordinates(p, csFrom, csTo, disp, norm) |
- p и norm это «точки» в терминологии API. Просто VARIANT массивы из трех чисел.
- Фокус, видимо, связан с реализацией конструктора класса VARIANT в Python. В кишки я не залезал. Во всяком случае, так как написано — работает, иначе - нет.
-
- Да, чуть не забыл. Как использовать матрицу. Поскольку координаты примитивов я сохраняю в мировой СК (WCS) а чертежники трудились в UCS, надо иметь возможность выдать координаты, выдранные из чертежа, опять в UCS. Матрица дает пересчет координат:
(a1,a2,a3) (b1,b2,b3), (c1,c2,c3), (d1,d2,d3) x = x*a1 + y*b1 + z*c1 + d1 y = x*a2 + y*b2 + z*c2 + d2 z = x*a3 + y*b3 + z*c3 + d3 |
- exchange.autodesk.com/autocadarchitecture
-
- Должно быть так, я еще не проверял.
Posted by Valentin at 02:06 0 comments
2011-05-24
OCS2WCS
- Похоже, я нашел обьяснение странным выбросам координат. Тех, которые отрицательные, хотя должны бы быть положительными.
- Дело в том, что в некоторых случаях (видимо, когда примитивы в AutoCAD создаются процедурно AutoLISP-ом), несмотря на заявки о выдаче координат в WCS, координаты выдаются в OCS (ECS).
-
- OCS
- Object coordinate system—point values returned by entget are expressed in this coordinate system, relative to the object itself. These points are usually converted into the WCS, current UCS, or current DCS, according to the intended use of the object. Conversely, points must be translated into an OCS before they are written to the database by means of the entmod or entmake functions. This is also known as the entity coordinate system.
-
- exchange.autodesk.com/autocadarchitecture
-
- И правильный вызов функции trans таки выдает правильные координаты.
- Остается только научить мой автомат делать это по ходу пакетной обработки.
-
- Пока разбирался, нарисовалось несколько полезных сниппетов на AutoLISP. Допустим, хандлер примитива = 7598. Тогда:
-
- зумнуть на обьект и подсветить его
(setq h (handent "7598") o (command "zoom" "o" h "") o (redraw h 3)) |
- вывести список атрибутов (кстати, видно гадские отрицательные координаты в примере)
(entget (handent "7598")) ((-1 . |
- конвертнуть координаты в WCS
(trans '(-3195.939915040071400 1786.635070675984300) (handent "7598") 0) (3195.94 1786.64 0.0) |
- выдать дамп обьекта используя ActiveX API (VisualLisp)
(vl-load-com) (setq h (handent "7598") o (command "zoom" "o" h "") o (redraw h 3)) (setq o (vlax-ename->vla-object h)) (vlax-dump-object o T) |
- заготовка конвертора для моего автомата
(setq doc (vla-get-activedocument (vlax-get-acad-object))) (setq u (vla-get-utility doc)) (setq h (handent "7598") o (command "zoom" "o" h "") o (redraw h 3)) (setq o (vlax-ename->vla-object h)) (setq norm (vlax-get-property o "normal") (setq nc (vla-translatecoordinates u (vlax-3d-point '(-3195.94 1786.64)) 2 0 0 norm)) (vlax-safearray->list (vlax-variant-value nc)) |
Posted by Valentin at 04:16 0 comments
2011-05-23
CSS3 media queries
- Парк смартфонов ширится, компьютеры карманного формата захватывают мир. Нам, разработчикам, нельзя игнорировать этот факт. Надо готовить варианты макетов как под большие дисплеи, так и под маленькие. А выбор варианта можно возложить на CSS.
-
- Разрешение экрана в наши дни колеблется от 320px (iPhone) до 2560px (большие мониторы) или даже выше. Пользователи больше не просматривают сайты только на настольных компьютерах. Теперь пользователи используют мобильные телефоны, небольшие ноутбуки, планшетные устройства, ...
- Дизайн должен быть адаптивным. Структура должна автоматически изменяться с учетом всех разрешений дисплеев. Эта статья покажет вам как создавать кросс-браузерный адаптивный дизайн при помощи HTML5 и CSS3 media queries.
-
- habrahabr.ru/blogs/webdev/119127
-
- В мемориз.
-
Posted by Valentin at 03:29 0 comments
Labels: citation, CSS, web-develop
2011-05-21
WCS2UCS
- Любопытно, сколько я еще буду мудохаться с этим Автокадом? Сижу и с задумчивым видом потираю очередную шишку от очередных грабелек.
-
- В Автокаде работать приходится, в основном, с двумя системами координат — WCS и UCS. Что переводится как Мировая Координатная Система и Пользовательская Координатная Система. Да почему нет, удобно же. А вот что неудобно:
-
- WCS
- World coordinate system: The reference coordinate system. All other coordinate systems are defined relative to the WCS, which never changes. Values measured relative to the WCS are stable across changes to other coordinate systems. All points passed in and out of ActiveX methods and properties are expressed in the WCS unless otherwise specified.
-
- UCS
- User coordinate system (UCS): The working coordinate system. The user specifies a UCS to make drawing tasks easier. All points passed to AutoCAD commands, including those returned from AutoLISP routines and external functions, are points in the current UCS (unless the user precedes them with an * at the Command prompt). If you want your application to send coordinates in the WCS, OCS, or DCS to AutoCAD commands, you must first convert them to the UCS by calling the TranslateCoordinates method.
-
- exchange.autodesk.com/autocadarchitecture
-
- То есть, при работе через COM-интерфейсы мы получаем мировые координаты. А при работе с Автолиспом мы должны указывать пользовательские координаты. Очень удобно, да. Пыщь-пыщь в очЪко того урода, кто это придумал.
- Прикольно выглядит упоминание «unless otherwise specified». Я пока не нашел способа заспецифаить этот азервайс. В документации глухо на эту тему. Зато подробно расписано. как в командной строке через звездочку указать мировые вместо пользовательских. Правда в Автолиспе это не работает :(
-
- Ладно, это можно пережить, благо в Автолиспе есть функция trans, переводящая координаты туда-сюда. И ее подобие вроде как доступно через COM-интерфейс. С пивом пойдет. Можно еще матрицу (getUCSmatrix) преобразований вынуть из UCS, для особо привередливых.
-
- Шишку я получил не этим. Шишка выросла после того, как я убедился, что вынутые через COM-интерфейс координаты невозможно перевести в UCS через прекрасную функцию trans. Да вообще никак. Мешает знак «-» (минус). Во всем массиве точек чертежа есть около 10% точек, Х-координата которых определяется как отрицательная, хотя этого не может быть, потому как не может быть никогда. Весь чертеж лежит в положительном квадранте коордсистемы. Можно к этому добавить еще то, что в пользовательской системе координат оси Х и У поменялись местами. Так веселее.
-
- И вот теперь я думаю, как автомат может грамотно определить где «-» по делу, а где «-» по ошибке.
- Потирая шишку на лбу.
-
- И сколько я еще буду мудохаться с Автокадом?
-
- Немного полезных сцылок:
- dailyautocad.com/2009/01/understanding-coordinate-input-in
- cadalyst.com/cad/autocad/import-3d-points-excel-autolisp-solutions
- dailyautocad.com/2009/11/starting-drawing-in-autocad-1-model
- swe-eng.com/AutoLisp
- upfrontezine.com/tailor
-
Posted by Valentin at 02:34 0 comments
2011-05-20
Cloud
- Облака это модно. Как нанотехнологии, приблизительно. Что характерно, рядовому пользователю абсолютно по барабану, что на той стороне провода — облако или мейнфрейм седой. Но технологии на месте не стоят, и чтобы поддерживать их разработку нужен PR.
-
- Попиарю и я. ОпенСтек — открытая (open source) программная платформа для построения облачных решений на рядовом железе:
-
- What OpenStack is: OpenStack is a collection of open source technologies delivering a massively scalable cloud operating system. OpenStack is currently developing two interrelated projects: OpenStack Compute and OpenStack Object Storage. OpenStack Compute is software to provision and manage large groups of virtual private servers, and OpenStack Object Storage is software for creating redundant, scalable object storage using clusters of commodity servers to store terabytes or even petabytes of data.
-
- openstack.org
-
- Разворачивание, поддержка и управление вычислительных узлов; масштабируемое кластерное хранилище. И, конечно, виртуализация, куда ж без нее. Я так понял, атом облака — виртмашина.
-
- Есть свободная стойка с железом? Разверните ОпенСтек и почувствуйте себя Урфином Джюсом.
-
Posted by Valentin at 02:08 0 comments
Labels: hiload
2011-05-19
Bulge
- Вот теперь правильно. Результаты совпадают с тем, что показывает AutoCAD. Что характерно, несмотря на то, что в описании функции написано:
- Angle Returns an angle between two points in radians. To use that angle in AutoCAD you have to convert it back to decimal degrees. eg: (setq a (angle pnt1 pnt2)) sets the angle between pnt1 and pnt2 to the variable a.
- На самом деле, возвращается угол между линией, образуемой двумя точками и осью абсцисс. Вот так и живем. Только метод тыка и выручает.
Posted by Valentin at 04:30 0 comments
2011-05-17
panty hamster get a spin on its wheel?
- А параметры дуги (через bulge) выдаются неправильные. Ой. Весь в отладке.
-
- Вчера смотрел серию 19 третьего сезона Доктора Хауса. Один момент меня срубил. На корню. Уж не знаю, под настроение попало или еще что, но достаточно тупая шутка Хауса вызвала во мне гомерический хохот. Я даже не поленился и вырезал кусок, положил на ютуб:
- http://youtu.be/-76VM5yQN4M
-
- Хаус интересуется у Кадди, почему у нее утомленный вид и где она провела вчерашний вечер. Кадди отмазывается, на что Хаус выдает реплику в стиле пародии. Смысл реплики — что-то вроде «домоседка пошла в загул?» а буквальный перевод типа - «хомяк в труселях закрутился в колесе?».
- И вот рожа Хауса, пародийное звучание фразы, сама фраза, контекст в котором она сказана, реакция Кадди (актриса пытается не заржать, по моему) — все это вместе меня и срубило. Сильная штука.
-
- en.wikipedia.org/wiki/Hugh_Laurie
- ru.wikipedia.org/wiki/Лори, Хью
-
- Officer of the Order of the British Empire (OBE)
- Оказывается, Хью был пожалован Офицером!
- Как вырезать кусок из фильмы:
- avidemux.sourceforge.net/screenshots
- howtogeek.com/howto/42107/how-to-quickly-cut-a-clip-from-a-video-file-with-avidemux
- Оказывается, Avidemux — прекрасен. Кроссплатформенный и даже работает.
-
Posted by Valentin at 20:10 2 comments
Labels: humor
Bulge
- Ура, я почти закончил! На свободу с чистой совестью!
- Не так это и сложно, спустя 20 лет вспомнить тригонометрию.
-
- Есть в чертежах (DWG) AutoCAD такой примитив как polyline, иногда LWPolyline. Ничего особенного, набор точек, соединенных отрезками. Подвох в том, что у любого отрезка (определяемого двумя соседними точками) может быть ненулевым такой параметр как bulge. Эту хрень придумали
чтоб мне было чем занятьсячтобы можно было в полилинию встраивать не только прямые отрезки, но и дуги (arc). - Вот как описывает bulge один почтипоэт:
-
- Bulges are something that women have (mostly to please the opposite sex it seems) and something that guys try to get by placing socks in strategic places. At least until they get older. Which is the time they tend to develop bulges in not so strategic places. In other words: bulges are all about curvature.
- ...
- In AutoCAD's online help reference, it says about bulges for polylines:
- The bulge is the tangent of 1/4 of the included angle for the arc between the selected vertex and the next vertex in the polyline's vertex list. A negative bulge value indicates that the arc goes clockwise from the selected vertex to the next vertex. A bulge of 0 indicates a straight segment, and a bulge of 1 is a semicircle.
- afralisp.net/archive/lisp/Bulges
- Предупреждаю, если полезете по сцылке, рекомендую отключить в браузере использование стилей. В моем ФФ4 видно белый текст на белом фоне, если со стилями.
-
- А мне надо эти полилинии с булжами преобразовать в обычные полилинии, где кроме прямых отрезков нет ничего. Соответственно, дуги надо аппроксимировать отрезками. Правда, сначала надо превратить две точки и число (bulge) в геометрическую фигуру — дугу. Но оказалось не слишком все тяжко. Полдня поисков, полдня воспоминаний школьного курса тригонометрии и полдня передирания формул из ёкселя в Python.
-
- Черновой вариант превращения сегмента полилинии с булжем в обычную полилинию готов.
UPDНе готов, ибо начиная с центра дуги, считает неправильно. Когда будет правильно - обновлю пост. А пока так.- UPD2
- Вот теперь правильно. Проверено отладкой на сегментах в разных квадрантах и с разным направлением.
#!/usr/bin/env python # -*- coding: utf-8 -*- # (c) Valik mailto:vasnake@gmail.com import sys, os, math def autoLispAngle(x1,y1, x2,y2): return math.atan2(y2-y1, x2-x1) def polar(x1,y1, phi, dist): x = x1 + dist * math.cos(phi) y = y1 + dist * math.sin(phi) return (x,y) def sign(n): if n < 0.0: return -1.0 return 1.0 def testBulge(x1, y1, x2, y2, bulge, sublen=0.01): ''' AutoCAD polyline arc segment approximation. Bulge to arc to line segments (facets) http://www.cadtutor.net/forum/showthread.php?51511-Points-along-a-lwpoly-arc& att\FacetBulge_rev1.zip\FacetBulge\BulgeCalc_Rev1.xls - formulas with errors, which eliminate with: http://www.afralisp.net/archive/lisp/Bulges1.htm ''' print 'calcBulge: p1 [%s], p2 [%s], bulge [%s], sublen [%s]' % ((x1,y1), (x2,y2), bulge, sublen) res = {} # midpoint (F9, G9) # arc midpoint [(12.41925, 13.5352)]; // 16.73, 11.77 mx1 = (x1 + x2) / 2.0 my1 = (y1 + y2) / 2.0 s1 = 'chord midpoint [%s]' % ((mx1, my1),) res['chordmidpoint'] = (mx1, my1) # angle (K13) # angle/2 (K14) angle = math.atan(bulge) * 4.0 angleDeg = angle * (180.0 / math.pi) s2 = 'arc angle [%0.5f] rad, [%0.5f] deg' % (angle, angleDeg) res['angleRad'] = angle res['angleDeg'] = angleDeg # dist (F5) dist = math.sqrt((x2-x1)**2 + (y2-y1)**2) s3 = 'chord len [%0.5f]' % dist res['chordLen'] = dist # sagitta length (http://en.wikipedia.org/wiki/Sagitta_%28geometry%29) sagitta = dist/2.0 * bulge # radius (K15) # r = ((dist/2.0)**2+sagitta**2)/2.0*sagitta radius = (dist/2.0) / math.sin( abs(angle/2.0) ) if radius == 0.0: radius = 0.000000000000001 s4 = 'radius [%0.5f]' % radius res['radius'] = radius # arc length (F14) l = 2*pi*r alen = abs(radius * angle) s5 = 'arc length [%0.5f]' % alen res['arcLen'] = alen # center (F19, G19) t = ''' wrong algo: k5 = ( (math.sqrt(radius**2 - (dist / 2.0)**2))*2 ) / dist cx = mx1 + (((y1-y2)/2.0) * k5 * sign(bulge)) cy = my1 + (((x2-x1)/2.0) * k5 * sign(bulge)) s6 = 'arc center [%s]' % ((cx, cy),) res['center'] = (cx, cy) good algo: (setq bulge 2.5613 p1 (list 11.7326 11.8487) p2 (list 13.1059 15.2217) r 2.68744 theta (* 4.0 (atan (abs bulge))) gamma (/ (- pi theta) 2.0) phi (+ (angle p1 p2) gamma) p (polar p1 phi r) ) ''' theta = 4.0 * math.atan(abs(bulge)) gamma = (math.pi - theta) / 2.0 phi = autoLispAngle(x1,y1, x2,y2) + gamma * sign(bulge) cx,cy = polar(x1,y1, phi, radius) s6 = 'arc center [%s]' % ((cx, cy),) # 14.2498, 12.7899 res['center'] = (cx, cy) # start, end angle (G21, G22) startAngle = math.acos((x1 - cx) / radius) if not sign(y1 - cy) > 0: startAngle = (2.0 * math.pi) - startAngle endAngle = startAngle + angle s7 = 'start, end arc angles [%s]' % ((startAngle, endAngle),) res['seAngles'] = (startAngle, endAngle) # subangle (F27), numsub (# of Divisions K26) if sublen <= 0.0: sublen = alen / 10.0 numsub = round(alen/sublen, 0) if numsub < 2: numsub = 2.0 subangle = angle / numsub s8 = 'numsub, subangle [%s]' % ((numsub, subangle),) # length of subarc L27 realSublen = abs(2 * (math.sin(subangle/2.0) * radius) ) s9 = 'real sublen [%0.5f]' % realSublen # sub points currangle = startAngle + (subangle/2.0) + (math.pi/2.0 * sign(bulge)) sx = x1 sy = y1 listPoints = [(x1,y1)] for cnt in range(int(numsub-1)): if not cnt == 0: currangle = currangle + subangle sx = sx + (realSublen * math.cos(currangle)) sy = sy + (realSublen * math.sin(currangle)) listPoints.append((sx, sy)) listPoints.append((x2, y2)) res['points'] = listPoints print 'doBulge done [%s; %s; %s; %s; %s; %s; %s; %s; %s; subpoints %s]' % (s1,s2,s3,s4,s5,s6,s7,s8,s9,listPoints) return res #def testBulge(self, x1, y1, x2, y2, bulge, sublen=10): def main(): testBulge(13.0, 9.0, 21.68, 33.65, -0.45, 7) #~ testBulge(11.7326, 11.8487, 13.1059, 15.2217, 2.5613, 1) #~ testBulge(5.9228, 12.0274, 8.1062, 22.8887, 2.2893, 3) #~ testBulge(24.2884, 10.3276, 27.3493, 14.9170, -4.5373, 3) #~ testBulge(-34.8952, -21.6100, -32.7117, -10.7486, 2.2893, 5) #~ testBulge(-16.5296, -23.3098, -13.4687, -18.7203, -4.5373, 5) #~ testBulge(10.7004, -22.2329, 12.8839, -11.3716, 2.2893, 2) #~ testBulge(29.0660, -23.9327, 32.1270, -19.3433, -4.5373, 2) #~ testBulge(-34.2720, 12.0274, -32.0886, 22.8887, 2.2893, 2) #~ testBulge(-15.9064, 10.3276, -12.8455, 14.9170, -4.5373, 2) #~ testBulge(8.0555, 5.0696, -6.8401, -6.4998, -0.3324, 2) #~ testBulge(-3.6195, 4.3654, 6.0425, -6.4998, 2.1734, 2) #~ testBulge(6.0425, -6.4998, -3.6195, 4.3654, -2.1734, 2) #~ testBulge(1.0, 0.0, 0.0, 1.0, 1, 0.5) #~ testBulge(0, 1, -1, 0, 1, 0.5) #~ testBulge(1.0, 0.0, 0.99, -0.044, 44.53, 0.3) #~ testBulge(0.0, 0.0, 0.0, 0.0, 45, 0.3) import time, traceback print time.strftime('%Y-%m-%d %H:%M:%S') if __name__ == "__main__": try: main() except Exception, e: if type(e).__name__ == 'COMError': print 'COM Error, msg [%s]' % e else: print 'Error, program failed:' traceback.print_exc(file=sys.stderr) print time.strftime('%Y-%m-%d %H:%M:%S')
- Надо будет подчистить, убрать накопление ошибки при аппроксимации большим количеством сегментов, обобщить, чтобы и просто дуги с окружностями (circle) можно было в полилинии превращать. Ну и отладить эту байду. Еще полдня — день.
-
- Спасибо Autodesk-у за то, что у меня есть работа, причем достаточно интересная.
- Это была реклама Autodesk и его софтины AutoCAD :)
-
Posted by Valentin at 01:17 0 comments
2011-05-15
Подьем экономики, говорите?
- Сейчас я расскажу вам, почему у нас пиратят софт и почему экономика в жопе. Ведь правда, деньги — кровь экономики, ее топливо.
-
- Пытался сегодня купить игру для кинекта, на маркете Микрософта. Сразу предупрежу, все завязки на офлайн я отсекал, ибо не комильфо (пойти в магаз и купить коробку — это прошлый век, да и дороже выходит, не говоря уж о том, что медленнее).
- Итак, в Microsoft сервисе игрушка оплачивается пойнтами, пойнты покупаются за деньги (при условии наличия учетки). Говорят, что пойнты можно купить через PayPal, но не в России. Для моей учетки на live.xbox доступен только один способ оплаты — через привязку и регистрацию кредитки. ОК, достаю проверенную в боях кредитку и регистрирую ее в сервисе (долго сомневался, стоит ли, ибо жлобы хотят знать слишком много — адрес, телефон, ФИО и это помимо всех кодов с кредитки). Нажимаю «зарегистрировать» - бам, «обратитесь в банк, ваша кредитка проверку не проходит». Но при этом на счете блокируется 30 рублей. Ладно, удаляю регистрацию, ввожу заново с гарантированно правильными сведениями о адресе (срисовал с договора с банком), жму «зарегистрировать» - бам, «введите правильный номер кредитки». Типа, номер кредитки они внесли в черный список на прошлой попытке. Всё, приплыли. Другой кредитки у меня нет, да и не стал бы я ее поганить об этих чмырей.
-
- Я видел, как устроены нормальные сервисы по обмену денег на товар — операции совершаются быстро и удобно, без щекотки параноидальных отростков запросами, не относящимися к номеру и CVV кредитки.
-
- Ладно, думаю, наверняка помимо Microsoft пойнты продают более ушлые ребята. Пошел, погуглил, нашел. Есть такие, за недорого предлагают карточки оплаты в виде то ли сканов, то ли просто картинок — неважно. Важно, что ты им деньги, они тебе код для активации пойнтов. Заказываю покупку, смотрю способы оплаты. Из подходящих мне есть вебмани и с кредитки.
-
- Для начала решил оплатить с вебмани. Для этого надо было пополнить кошелек, маловато там сейчас лежит. Тудыть-сюдыть — кошелек я пополнить не могу. Ни через банковский перевод, ни через кредитку. Причина — вебмани считает меня «нерезидентом». Я думаю, это потому как я им паспорт не принес, в подтверждение того, что кошелек мой а не Бинладена. ББ не спит. Что любопытно — вроде как через терминалы оплаты можно наличкой влегкую пополнить кошелек. Хоть Бинладена, хоть кого, паспорт не спросят.
Нахуй вебмани. -
- Осталась оплата с кредитки. ОК, я согласен, жму на вариант с кредиткой. И попадаю, блин, не верю своим глазам! Это нечто! На сервис Chronopay, с которого недавно увели данные кучи кредиток. Мало того, был у меня опыт оплаты через Хронопей - отрицательный. Не понравилась ему моя кредитка. Всем нравится, а Микрософту и Хронопею — не нравится.
Нахуй Хронопей. -
- Что я имею в остатке. Потрачено более часу времени, причем зря. Microsoft-у напрямую я деньги вручить не могу, не берет. Через посредника тоже не могу, ББ не позволяет. Итого в остатке я сэкономил около тысячи рублей. Потрачу их на более приятные вещи. А игрушка для кинекта подождет, я еще первые две не закончил.
-
- Вот так экономика и живет, на подсосе. Страшно представить, сколько транзакций (денежных) НЕ совершается. Из за совершенно глупых глупостей.
-
- Приложение:
- xbox.com/ru-RU/kinect
- salegame.ru/showthread 4388
- shop.kln.ru/index
- webmex.ru/goods
- exler.ru/blog/item/9019
-
Posted by Valentin at 02:10 0 comments
2011-05-14
Облако упало
- Я гляжу, нынче модно стало ронять блогоплощадки. То ЖЖ колбасило, теперь Блоггер плющит. Ху'з некст?
-
Posted by Valentin at 00:13 1 comments
Labels: бурчалки
.NET CMS
- Orchard CMS с точки зрения разработчика
- habrahabr.ru/blogs/webdev/117373
- habrahabr.ru/blogs/webdev/118957
- автор демонстрирует процесс разработки модуля под новинку сезона - CMS от Microsoft. .NET и все такое в комплекте.
-
- Наступает сезон. После прошлогодней жары наверное все, кто может себе позволить, поставили себе кондей. Кондей — этапять. Но есть минус — бактерии плодятся в кондейных потрохах, откуда неприятный запах и, не дай Бог — легионеллёз. Хочу попробовать вот эдакого киллера бактерий:
- autone.ru/product/10915
- lm-shop.ru/ article_id=155 catalogue_id=450
- Очиститель кондиционера (аэрозоль) LIQUI MOLY Klima-Anlagen-Reiniger.
- Всем удачной пятницы 13.
Posted by Valentin at 00:09 0 comments
Labels: бытовуха
Topobase всё
- Ой.
- Одинадцатый год не дошел и до середины, а линейка Autodesk Topobase 2011 уже снимается с продажи. На замену Автодеск выводит линейку 2012, заодно похоронив бренд «Topobase».
-
- В звене веб-серверном сливаются две линейки.
-
- Результат слияния программных продуктов
- Autodesk MapGuide® Enterprise
- +
- Autodesk® Topobase® Web
- будет называться
- Autodesk® Infrastructure Map Server 2012.
-
- В звене десктопном тоже сливаются
в экстазедве линейки. -
- Результат слияния программных продуктов
- AutoCAD® Map 3D
- +
- Autodesk® Topobase® Client
- будет называться
- AutoCAD® Map 3D Enterprise 2012.
-
- Не перепутайте
- AutoCAD® Map 3D Enterprise 2012
- с
- AutoCAD® Map 3D 2012.
- Во втором нет поддержки сервера (Оракл) и возможна только автономная работа.
-
- Как всегда, при переходе на новую версию были устранены некоторые недоработки и добавлены новые ошибки. Очередной круг игры по мотивам «сапера» - найди заботливо разложенные грабли.
-
И немного о хорошем. Сотворил я по надобности полезняшку.
google.com/site/vasnake
Posted by Valentin at 00:05 0 comments
2011-05-11
FHS
- Благодаря проскочившей новости, я смог утащить в копилку еще одну полезняшку.
- Полезняшка:
The following directories, or symbolic links to directories, are required in /. Directory Description bin Essential command binaries boot Static files of the boot loader dev Device files etc Host-specific system configuration lib Essential shared libraries and kernel modules media Mount point for removeable media mnt Mount point for mounting a filesystem temporarily opt Add-on application software packages sbin Essential system binaries srv Data for services provided by this system tmp Temporary files usr Secondary hierarchy var Variable data Each directory listed above is specified in detail in separate subsections below. /usr and /var each have a complete section in this document due to the complexity of those directories. |
- refspecs.linuxfoundation.org/FHS_2.3
-
- Однако любопытно — каталог /home не является обязательным. А обязательных - 13 штук.
- Вот что мне очень нравится, так это сохранение и приумножение правильных решений. Без попсы и метаний из крайности в крайность. Как 30 лет назад назвали каталог с конфигами /etc так он и сейчас называется. Не то что в выньдосе, где чуть ли не с каждой версией немалая часть основ пересматривается и меняется.
-
- Новость:
-
- Организация Linux Foundation объявила о начале работы по формированию третьей версии стандарта FHS (Filesystem Hierarchy Standard), определяющего набор и место размещения в файловой системе стандартных утилит, системных файлов и директорий...
- Прошлая версия стандарта (FHS 2.3) была выпущена в 2004 году, в новой версии планируется отразить современные реалии. Финальную версию стандарта FHS 3.0 планируется выпустить в июле.
-
- citforum.ru/news/26192
-
Posted by Valentin at 03:40 0 comments
Labels: cheatsheet, linux
2011-05-09
Стакан полный наполовину
- Прочел намедни про «множество решений»:
-
- удачливый человек в отличие от неудачника, живет во множестве решений, а неудачник - во множестве проблем, при этом они могут жить в одной квартире.
- Множеством решений я называю такой взгляд на жизнь и ежеминутно складывающиеся ситуации, когда человек настроен на постоянную ловлю того самого ветра в спину, и ищет этот "ветер" в любом сочетании факторов, пытаясь извлечь что-то полезное и нужное из, казалось бы, полной, беспросветной безнадеги
- ...
- вторая составляющая удачливого человека: умение находить главное, чувствовать это главное и концентрировать все имеющиеся силы, как мало бы их ни было, на главном
-
- amironov.com/blogs/node/64
-
- И могу только подтвердить. Всё так. Те, у кого стакан наполовину пустой, удачливыми быть не могут по определению. Остается разве добавить, что не стоит смешивать удачливость и успешность. Чтобы удачливость привела к успешности, надо иметь хорошие мозги, позволяющие выбрать не просто главное а правильное главное. Надо иметь хорошее упорство, позволяющее не сойти с дистанции; надо иметь смелость принимать решения (и просто смелость). Ну и такая штука как харизма тоже не помешает.
- Чуть не забыл — надо же еще знать чего ты хочешь, без этого точно нельзя ничего добиться.
-
Posted by Valentin at 01:40 0 comments
Labels: Wisdom
2011-05-08
Landsat imagery
- changematters.esri.com/compare
- Дэйв Боуман пишет про веб-приложение, построенное на Landsat-овских снимках. Сами же снимки доступны через бесплатные онлайн сервисы Esri. Что любопытно (помимо космоснимков халявных), приложение писали на JavaScript, в бэкенде ASP.NET MVC, и сделали вариант представления под планшеты (догадайтесь какие :)
- И все бы прекрасно было, но мерзкая поддержка JavaScript в мелкомягком браузере вынудила написать версию на Flex. От оно как.
-
- Приложение занятное, особенно если посмотреть «туры», проводящие по серии картинок с пояснениями к показываемому. В целом, реклама Esri удалась.
-
Posted by Valentin at 03:07 0 comments
Labels: GIS
2011-05-07
Надо подождать
- Как все загадочно. Запустил сегодня обновление системы (Debian testing) на ноуте
# aptitude update; aptitude full-upgrade
- А в ответ - «0 пакетов для обновления». Загадка, как же так, неделю не обновлял, система «testing», должна быть куча обновлений. Непорядок. Проверяю через apt-get
# apt-get updateИ в ответ получаю эдакое:
W: Failed to fetch bzip2:/var/lib/apt/lists/partial/ftp.debian.org_debian_dists_testing_main_binary-i386_Packages Hash Sum mismatch E: Some index files failed to download. They have been ignored, or old ones used instead. |
- Погуглил, рецепты разные посчупал — без результата. Но решение нашлось — записывайте: надо подождать.
-
- Фишка в том, что пока идет заливка новых пакетов на сервер, откуда берутся обновления, пакетная система в негодном состоянии. Через час-другой можно будет без проблем обновиться. Но не в данный момент. Во всяком случае я понял именно так. И удивился, что не предусмотрено простого флажка - «погодь, сервер завершит транзакцию».
-
- Если я понял неправильно — ткните пальцем во внятное разьяснение.
-
Posted by Valentin at 03:27 0 comments
2011-05-06
Абсолютно свободен
- Платой за полную свободу Дебианчика стал вынос в отдельный репозиторий (non-free) целой кучи драйверов. На трех своих железках я периодически вижу сообщения типа
- W: Possible missing firmware /lib/firmware/foobar for module bazz
- Вот пример:
update-initramfs: Generating /boot/initrd.img-2.6.32-5-686 W: Possible missing firmware /lib/firmware/e100/d102e_ucode.bin for module e100 W: Possible missing firmware /lib/firmware/e100/d101s_ucode.bin for module e100 W: Possible missing firmware /lib/firmware/e100/d101m_ucode.bin for module e100 |
- Не то, чтобы мне это мешало, но как-то нехорошо. Некрасиво. А кому-то и мешает наверняка.
-
- И сегодня я созрел разрулить эту проблему. Оказалось проще пареной свеклы:
aptitude install apt-file apt-file update apt-file search /lib/firmware/e100 aptitude install firmware-linux-nonfree |
- Только, чтоб сработало, надо в sources.list добавить репозиторий non-free (у меня уже было). Имя пакета для установки (firmware-linux-nonfree) берется из поиска по файлам (предпоследняя строка).
-
- Для другой машины получилось так:
aptitude install apt-file apt-file update apt-file search /lib/firmware/rtl_nic aptitude install firmware-realtek |
- Более подробно можно прочесть тут:
- linux.koolsolutions.com/2009/05/11/tip-debian-linux-kernel-firmware-issues-ethernet-drivers-missing
-
Posted by Valentin at 03:36 0 comments
2011-05-05
Systemtap
- Вещь, однозначно. Ставим (# aptitude install systemtap); пишем скрипт (или берем готовый), в скрипте вешаем обработчики на события (событий богато!), в обработчиках собираем сведения (печатаем и/или анализируем); команда stap создает ядреный модуль, цепляет его к ядру, модуль ловит события и собирает (выводит) данные. По завершении модуль выгружается.
-
- Systemtap is a tool that allows developers and administrators to write and reuse simple scripts to deeply examine the activities of a live Linux system. Data may be extracted, filtered, and summarized quickly and safely, to enable diagnoses of complex performance or functional problems.
- ...
- The essential idea behind a systemtap script is to name events, and to give them handlers. Whenever a specified event occurs, the Linux kernel runs the handler as if it were a quick subroutine, then resumes. There are several kind of events, such as entering or exiting a function, a timer expiring, or the entire systemtap session starting or stopping. A handler is a series of script language statements that specify the work to be done whenever the event occurs. This work normally includes extracting data from the event context, storing them into internal variables, or printing results.
- sourceware.org/systemtap/tutorial/Introduction
- sourceware.org/systemtap/documentation
-
- Один из примеров:
- sourceware.org/systemtap/examples/io/iostats.stp
Posted by Valentin at 03:27 0 comments
2011-05-04
НожЫки
- Вот тут (впечатлительным лучше не глядеть)
- spas-combat.ru/forum/ 4848
- убедительно продемонстрировано, насколько некоторые ножи могут быть неэффективны (а некоторые наоборот). Ухватистость, форма лезвия, заточка, вес — все играет роль. Особенно заточка и форморазмеры лезвия (что и неудивительно какбе). А вот что удивительно, так это насколько неопасными могут быть складные ножи, приобретаемые для «самообороны». А с другой стороны, если удачно приложить высокоэффективным ножиком (типа «Кондрат») — будет труп. Оно нам надо?
-
- Не будем тешить себя иллюзиями — для эффективной самозащиты через ножик мало иметь толковый ножик (прорезающий помимо одежки и мяско), надо тренировать (регулярно) нанесение нелетальных порезов. А иначе и заморачиваться не стоит.
-
Posted by Valentin at 02:36 2 comments
Labels: weapon
2011-05-03
Водичка тютю
- Начинается летний сезон, пора, когда в столице одного из крупнейших государств (про замкадье и говорить нечего) планово отключают горячую воду. Надолго. В этом году, по приказу мэра, всего на 10 дней.
- Вот тут можно узнать, когда у вас не будет воды. У меня в конце июля.
- Кстати, мне одному претит эдакая форма представления информации? Мне было бы удобнее получить банальную справку, пригодную для печати (с определенным URL), а не эту красивую игрульку, пригодную только для распальцовки по типу «а у меня прикольнее флешка на сайте!».
-
- oaomoek.ru
- rian.ru/moscow/20110317/354787163
- rian.ru/moscow/20101025/289082432
- rian.ru/infografika/20110317/354795039
-
- Вот я одного не понял, как это так получается, что вода у МОЭК, а расписание у РИА Новости? Почему флешка с новостного сайта? И где тогда база с расписанием? Не постигаю.
-
Posted by Valentin at 03:29 0 comments
Labels: бытовуха
2011-05-02
Symfony (web framework on PHP)
- А вот кому чек-лист подготовки сайта к выводу в люди? Подразумевается, что сайт построен на Symfony. Но чек-лист будет полезен любому сайтостроителю, ибо проходит по достаточно общим местам любого сайта.
- symfony-check.org
-
- Симфони — это фреймворк, не CMS. Ближе к RoR чем может показаться.
-
- Symfony is a web application framework for PHP projects.
-
- It aims to speed up the creation and maintenance of web applications, and to replace the repetitive coding tasks by power, control and pleasure.
-
- The very small number of prerequisites make symfony easy to install on any configuration; you just need Unix or Windows with a web server and PHP installed. It is compatible with almost every database system. In addition, it has a very small overhead, so the benefits of the framework don't come at the cost of an increase of hosting costs.
-
- Using symfony is so natural and easy for people used to PHP and the design patterns of Internet applications that the learning curve is reduced to less than a day. The clean design and code readability will keep your delays short. Developers can apply agile development principles (such as DRY, KISS or the XP philosophy) and focus on applicative logic without losing time to write endless XML configuration files.
-
- symfony-project.org/about
-
- Поют красиво.
-
Posted by Valentin at 02:46 0 comments
Labels: frameworks, PHP
2011-05-01
Дзен в стрельбе из лука
- Букаф много, но текст заслуживает прочтения. Одолев текст я стал несколько лучше понимать такую непонимаемую штуку как дзен. Зацените небольшую вырезку:
-
- Однажды, когда я выстрелил, мастер торжественно сказал: «„Оно" здесь! Поклонитесь!» Взглянув на мишень (к сожалению, я не смог от этого отказаться), я увидел, что стрела лишь зацепила ее. «Это был правильный выстрел, — констатировал мастер, — именно так все и должно начинаться. Но на сегодня достаточно, иначе при следующем выстреле вы будете прикладывать слишком много усилий и испортите хорошее начало». Постепенно у меня стало получаться подряд несколько выстрелов, попадающих в мишень, хотя и неудач тоже было много. Но если я хоть каким-то образом выказывал недовольство, мастер становился необычайно резким. «Что с вами?! — восклицал он. — Вы не должны расстраиваться из-за плохих выстрелов, и это вы уже давно знаете. Добавьте к этому еще и умение не радоваться хорошим выстрелам. Вы должны быть свободны и от радости, и от печали. Должны научиться пребывать в состоянии легкости и душевного равновесия и радоваться так, как будто хорошо выстрелил кто-то другой, а не вы. И неустанно упражняйтесь — вы даже представить себе не можете, насколько это важно».
-
- В эти недели и месяцы я прошел самую суровую в своей жизни школу, и даже если мне не всегда было легко подчиняться, постепенно я начал осознавать, как много мне это дало. Я полностью избавился от стремления отмечать колебания моего настроения и думать о своем «я». «Теперь вы понимаете, — спросил однажды мастер после особенно хорошего выстрела, — что значит „стреляет оно", „попадает оно"?» — «Боюсь, — ответил я, — что теперь я уже вообще ничего не понимаю, я запутался в самых элементарных вещах. Это я натягиваю лук или лук втягивает меня в максимальное напряжение? Я пронзаю мишень или сам являюсь мишенью? „Оно" с точки зрения тела духовно, а с точки зрения духа телесно, наличествует и то и другое или ни то ни другое? Всё: лук, стрела и мое „я" — сплелось настолько, что я уже больше не в состоянии отделить одно от другого. Исчезла и сама потребность их разделять. Потому что, как только я беру в руки лук и стреляю, все становится таким ясным и до смешного простым...» — «Именно сейчас, — прервал меня мастер, — тетива прошла через вас».
-
- ki-moscow.narod.ru/litra/zen/zen_in_der_kunst
-
- Рекомендую.
-
Posted by Valentin at 03:18 2 comments
Labels: citation
Архив блога
-
▼
2011
(293)
-
▼
мая
(26)
- counterclockwise
- И это всё о нём
- We can't send mail more than 500 miles
- keepass
- Тонкости архитектуры
- OCS2WCS
- CSS3 media queries
- WCS2UCS
- Cloud
- Bulge
- panty hamster get a spin on its wheel?
- Bulge
- Подьем экономики, говорите?
- Облако упало
- .NET CMS
- Topobase всё
- FHS
- Стакан полный наполовину
- Landsat imagery
- Надо подождать
- Абсолютно свободен
- Systemtap
- НожЫки
- Водичка тютю
- Symfony (web framework on PHP)
- Дзен в стрельбе из лука
-
▼
мая
(26)