?

Log in

No account? Create an account
Project of the day
tux
maholet
Сегодня целый день делал вот такую надстройку над стандартной икеевской партой, для того, чтобы разложить паяльные принадлежности.
IMG_6039
Tags:

Many many years ago..
tux
maholet
i did it in the year of 2006 when I had some pieces of wood..
img_3215
img_3214
More picturesCollapse )

CNC moved to new place
tux
maholet
There are some photos of new place of CNC.
SAM_0090
There is the sound proof box where cnc mill lives. It's mounted on wooden platform.
SAM_0091more photosCollapse )
Tags:

Инвестиции и развитие "не туда"...
tux
maholet
Постоянно слышу от друзей про программное обеспечени и про прочий ай ти, что их не покидает "тонкое ощущение жопы", и что все айти развивается совершенно не туда в долгосрочной перспективе.

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

Поясняю, всем известно, что согласно положениям синтетической теории эволюции, полезная мутация вознивает у отдельно взятой особи, и для того, чтобы она закрепилась в геноме, она должна много кратно усилится в потомстве. То есть естественный путь закрепления некой полезной "идеи" должен быть похож на это.

Но что происходи в реальном мире. Некая говно-идея, доносится до тупых всеяднях инвесторов в красивой обертке. Далее, усиленная инвестиционными вложениями она многократно копируется и в результате, мы заплываем гавном.

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

Однако, такой вот искусственный вывод технологий, которые в свое время нашли инвестиционную поддержку как раз и приводит к неестественности процесса развития и "ощущениям глобального ПЦа"...

Camera frame
tux
maholet
Here are some photos of camera frame.
IMG_5994
more picturesCollapse )

Planetary gear box
tux
maholet
Works fine, here some photos:

IMG_5951
IMG_5952
IMG_5955
IMG_5956

Гадкий Я!
tux
maholet
В смысле, это не я гадкий, а мультик такой. Сегодня в безумном порыве за час скрутил миньона из бумаги и малярного скотча...
Дети не выпускают из рук...

IMG_5974
IMG_5975

Размышления по поводу DSL
tux
maholet
Эти размышления по поводу целесообразности изобретения и использования самодельных языков,
которые всячески используются в современном программировании повсеместно. И довольно часто эти языки придумываются
с целью переопределить уже существующий язык, потому, что так было удобно программисту. И естественно, такие языки
получаются неполными, так как после выполнения поставленной задачи становятся не нужны. Код написанный подобным птичьим языком становится нечитабельным, поскольку только сам создатель языка знает полный смысл высказываний языка, но передать его полностью не может по той же причине, что проект закончен, работает, а что внутри программы никого не волнует, лишь бы все работало и ничего не менялось. Документацию писать на язык программист не собирался, поэтому подобный язык умрет внутри кода.
Теперь представим, что язык все таки дописали, написали документацию и в результате из домен спесифик языка появляется нечто - женерал попоз язык, и пытается захватить жизненное пространство в айти мире.
Так вот я решил разобраться, так ли надо порождать новые специфические языки для решения конкретных проблем, упрощают ли они жизнь или усложняют, насколько они лаконичны, какой выигрыш от их использования и чем приходится жертвовать.
Допустим, нам надо записать элементарную вещь, которая делается постоянно во всех языках программирование - операция присваивания, ну и например операция сложения.
В обычной математике это выглядит просто
A + B = C
Кажется просто, но нужно сказать, что подобное выражение в математике имеет совершенно не такое значение, чем оно имеет в большинстве языков программирования. Математический смысл заключается в равенстве обоих частей выражения, то есть по сути дела это уравнение вида "1 = 1". Я сказал слово "смысл", это как раз то, как знающий математику человек должен "интерпретировать" эту запись. Это очено важно отметить сейчас, поскольку я буду возвращаться к "смыслу" выражений, в человеческой интерпретации.
Теперь давайте представим как на подобное выражение будет смотреть человек с точки зрения программирования.
Ну, во-первых, сразу же возникает проблема, что компилятор языка посчитает, что данное выражение невалидно, поскольку символ "=" в программировании имеет несколько другой "смысл", а именно "копирование значения выражения, вычисленного с правой стороны в некоторую область, имеющее имя переменной, стоящей в левой части выражения".
То есть видим сразу кучу проблем и условностей.
Для программы было бы правильнее переписать выражение в виде
C = A + B
причем математический смысл выражения нисколько бы не изменился, а компилятор был бы почти счастлив. Почти да не совсем. Опять же, с математической точки зрения, за буквами могут стоять некоторые однородные объекты, для которых определена операция сложения, которая обозначается символом "+".
Смысл знака "+" в программировании также похож на его смысл в математике. Но с возможностью переопределения смысла операторов, например в С++, все резко меняется. Теперь вы полностью свободны глумиться над смыслом символов.
Здесь появляется огромная свобода и гибкость языков программирования, позволяющих делать такие вещи.
Не буду углубляться в примеры, большинство программистов, которые хоть раз переопреляли смысл операторов знают о чем идет речь.
Идея переопределения смысла некоторого символа, или даже просто создания нового символа, характерного для некой предметной области и лежит в основе создания DSL. Причем, хочу сразу заметить, что как бы вы не старались, для описания нового предметного языка вам придется использовать один из уже существующих, даже если вы захотите написать
<ВСТАВЬТЕ_СЮДА_ИМЯ_ВАШЕГО_НОВОГО_ЯЗЫКА> на машинных кодах с нуля.
Ведь машинный код - это тоже язык, причем полный. Даже если вы решили набросать концепт языка на обычном человеческом языке, все равно вы определяете некоторый набор операций, и вкладываете в каждый оператор определенный СМЫСЛ.
То есть, любое определение нового языка есть не более чем выбор удобного базиса, с преобразованием смысла.
Теперь, когда с преобразованием смысла все более менее понятно, давайте разберемся с лаконичностю языков. Очевидно создатель DSL языка хотел бы выразить все одной фразой. И так, чтобы все... Ну в общем понятно.
Ну и в конце концов, чтобы просто писать меньше букав.
Если вспомнить, что такое полнота базиса, не суть важно какого, то становится очевидно, что любой полный язык дожен его иметь. То есть простыми словами, в языке должны быть опреледен набор операций, так чтобы программисту их хватало для всего. Например, если забыть "придумать" унарный минус в программировании, то придется извращаться для получения отрицательных чисел. Тогда операция получения -1 будет выглядеть так:
A = 0 - 1
Выкрутились из ситуации? В общем-то да.
Теперь представим, что нам нужно выполнять 2 сложные операции, которые являются линейной или не очень комбинацией других действий (операций). Но только ДВЕ. То есть вся мощь и полнота языка нам не нужна.
Тогда, мы изобретаем (читай переопределяем) новый язык из некого уже известного, и вуаля. Имеем новый язык с 2 операторами или операциями, не суть важно, а для простоты обзовем их "A" и "B".
Мощно, правда? Изобрели некий язык с двумя ну очень мощными операторами, смысл которых спрятан глубоко внутри реализации.
Но имена "A" и "B" кажутся какими-то не очень удачными. Через недельку другую придется лезть внутрь кода, чтобы узнать истиный смысл. Поэтому изобретатели самопальных языков предпочитают давать осмысленные имена операторам,
например "Зарядить_межконтинентальную_ракету" и "Запустить_межконтинентальную_ракету_в_сторону_ненужной_страны".
Буков побольше, зато теперь юзер будет довольно улыбаться при виде таких операторов.
Теперь наш язык, очень лаконичный и убедительный, даже для врагов.
Однако, а давайте разберемся, что реально пришлось нам сделать для получения такой красоты. Для начала, нам надо было бы выбрать язык для определения нового языка, во-вторых, разработать дла нового языка грамматику (понятно, что для двух операторов много не нужно, а если их больше?). В-третих, сгенерировать лексический анализатор, ну и наконец сделать компилятор или интерпретатор.
И это из за каких-то двух операторов столько работы? Но создатель языка может возразить: "Но позвольте, теперь моим языком может пользоваться даже генерал <ВСТАВИТЬ_ИМЯ_ЛЮБИМОГО_ГЕНЕРАЛА>!"
Очевидно может, но не будет. Не генеральское это дело писать прогрммы пусть даже из 2 слов.
Здесь мы подошли к проблеме повтороного использования самописанных языков. Программирование - довольно сложное занятие, даже для людей занятых в ИТ индустрии. И конечному пользователю нужны кнопочки, а не новоявленный DSL. Это нужно понять раз и навсегда. То есть конечным пользователем появившегося языка будут сами программисты, возможно узкая секта.
Ну допустим, язык будет использоваться интенсивно, в какой-нибудь интересной области, например в робототехнике, и синтакис будет красивый, и семантика, и будут написаны горы кода на этом неполном языке...
И тут БАЦ! Появляется операция, которая не может быть описана в рамках используемого DSL.
И вот опять программисты вместо того, чтобы написать 3 строчки на своем красивом языке переколупывают лексический анализатор. И зачем?
Программирование ради програграммирования? IMHO изобретение компилятора компиляторов есть потаенное зло, ящик Пандоры,
который превратил весь прогресс в тыкву. В свое время, стандартизация и введение ГОСТов привела в конечном итоге к индустриальному росту, теперь же что мы видим в ИТ?
Кто во что горазд... За последние несколько десятков лет понапридумали столько языков, якобы удобных, что ситуация мне стала сильно напоминать аналогичную ситуацию с Вавилонской башней. Всем известно, чем это закончилось...
Или не закончилось...
В общем, результат НЕ БЫЛ ДОСТИГНУТ. БАШНЮ НЕ ДОСТРОИЛИ.
В общем, выводы, которые я сделал для себя следующие:
1) Полный язык всегда лучше неполного.
2) Для решения частной задачи не стоит создавать новый неполный язык, так как это приводит к перерасходу ресурсов (читай времени выполнения, денег, жизненных сил и т.д.), а следует лучше потратить больше времени на документацию проекта, и обучение пользователей, если все же кто-то будет править конфиги.
3) Если все же приспичило написать свой неполный язык (любители макросов на ассемблере меня поймут), то ваш птичий язык никто не должен видеть. Своих тараканов, живущих на вашем чердаке, пасите сами.
4) Если у вас амбиции зашкаливают, то потратьте остаток вашей несчастной жизни на нечто более полезное, нежели на повторение ошибок предыдущих поколений программистов. Или вы учитесь на своих ошибках?
P.S. Все вышесказанное к вам не относится и вы можете преспокойно заниматься разработкой и внедрением самопальных языков.

Эй, где мой последний пост с редуктором?
tux
maholet
Эти криворукие лохи из ЖЖ мало того, что не могут сделать нормальный бакап сервер для логина в ЖЖ в момент обслуживания основного сервера, так они еще и базу данных с записями бакапят не каждый день...
Я конечно понимаю, что это бесплатный сервис для меня, но некоторые люди даже платят деньги за непонятно что...
O. M. G.!
P.S. Надеюсь меня не забанят в ЖЖ за мои справеливые гневные высказывания...

Редуктор
tux
maholet
Для одного микропроекта понадобилось сделать маленький понижающий редуктор.

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

Вот пришла идея смастерить соосный редуктор, который устанавливается прямо на моторчике, имеет такой же диаметр как и моторчик.

И в общем, получилось.
Характеристики у него такие:
1) Вал моторчика 2 мм. Пришлось обточить 0.5 мм для того чтобы передавать вращение на шестеренку Z9.
2) Z9 - бронзовая, толщиной 1.1 мм, диаметр по средней высоре зубов 5 мм, высота зуба всех шестерен 1 мм.
3) Промежуточные шестеренки, три штуки, Z16. Сделал из алюминия, но наверное потом вырежу из бронзы. Диаметр по середине зуба - 8 мм.
4) Внешняя шестерся имеет 42 зуба. Диаметр по середине зуба - 21 мм. внешний диаметр большой шестерни 23.4 мм.
5) Крышка редуктора имеет внешний диаметр 24.4 мм, высота 4 мм.
Все детали пилил фрезами 1.6 мм, 0.8 мм и 0.6.

IMG_5951
IMG_5952
IMG_5954
IMG_5955
IMG_5956