Осточертело все, хочется сдохнуть. Тошно и противно от всего вокруг

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

Сегодня было очень грустно, почти жить не хотелось. К ночи отпустило, странное чувство легкости, как будто цепь с груди сняли, даже дышать легче. А еще Dusk Maiden of Amnesia теперь одно из моих любимых аниме, А Юко - одна из любимых героинь. Жалко, что на анимелисте нельзя больше пяти аниме в любимые добавлять. Хотя может это и правильно, не знаю.

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

Как же уныние прибивает к земле и высасывает

Слушал опенинг из Эврики на аниме-радио и чуть не заплакал, черт возьми. Как же все хреново было тогда, но были вот такие миры, где находилось место дружбе, взаимопомощи, любви, и все это для всех, даже для инопланетян. Твою мать, бросил бы эту планету, все бы бросил и ушел в экран, туда, где краски, а не политота, квартираы, совок, бабло и прочая хрень, дайте мне мою сказку, ненавижу все =(

Я отличник :3

Сегодня, в глубине души, я почувствовал себя инженером, а не программистом. Классное было чувство, жаль недолгое.

Весь этот матан, чтение каждой формулы, писанина, чтобы лучше понимать, мелкие радости от того, что хоть что-то доходит. И все просто для того, чтобы было чем забивать время, потому что если не будет этого, то приходит это концентрированное отчаяние, одиночество и дыхание смерти. Я стал играть песни Наутилуса, они как родные, все стихи Кормильцева, они как самое близкое к моему сердцу, что только может быть в мире. Когда искусство это единственное, что понимает и принимает тебя, то это и приятно и очень грустно. Я много чего изменил и все в моих руках, я стараюсь изо всех сил, стараюсь делать хорошо то, что делаю. Твою мать, но как же одиноко и как противно от того, что хочется быть среди людей, хочется эмпатии, мерзость. Люди, с которыми хочется быть, далеко, а будь они рядом, то я бы не смог посвящать себя делам так, как сейчас, потому что убегал бы к этим социальным позывам. Обычно до такого состояния не доходит, а сегодня дошло. Хорошо, что ничего не пью, ни капли вообще, светлая голова, никакого похмелья, хотя бы с этим все хорошо. Эмпатия, не хватает именно этого, просто, чтобы кто-нибудь сказал, что я стараюсь, что черт возьми, ведь делаю немалую работу. Почему я не могу этого вытравить, почему не могу просто делать и все. Мерзкие эмоции, ненаижу.

Уже пару месяцев пытаюсь заниматься гидравликой. С учетом того, что я не знаю физику, не умею мыслить толком в пространстве, это занятие идет очень медленно. Но, что удивительно, таки идет. Сегодня я более менее наконец-то разобрался с такой замечательной вещью из сопромата, которого у меня в помине не было, как осевые моменты инерции. Чтобы не забыть все это, написал себе гайд, оставлю тут, вдруг пригодится еще.

Осевой момент инерции - общие слова


Осевой момент инерции в принципе вычисляется похоже на обычный момент инерции, определяющий меру инерции тела к вращательному движению, однако, в отличие от первого берется не квадрат расстояния точки до центра вращения, а квадрат элементарной площади умножается на квадрат расстояния до оси вращения. Поэтому осевой момент инерции измеряется в [м^4] .



На рисунке представлено тело F, в котором выделена элементарная площадь dF. Точкой С отмечен центр масс тела.
Так как смысл элементарных площадей в том, чтобы как можно точнее разбить исходное тело на множество маленьких частей, то логично предположить, что каждая маленькая часть должна как можно точнее описывать особенности исходного тела. Для каждой конкретной фигуры F вид этой элементарной площади свой и не всегда очевиден.
Для определения осевого момента нужно выбрать, относительно какой оси он будет находится, затем разбить все тело на множество элементарных площадей dF, умножить каждую на квадрат расстояния до оси, относительно которой определяется момент инерции, а затем просуммировать каждое произведение.
Математическим языком это выражается следующей формулой

Математическим языком это выражается следующей формулой





Здесь
Iz— осевой момент инерции относительно оси Z
Ix — осевой момент инерции относительно оси Y
z2,y2— расстояние площадки dF до осей Z и Y соответственно

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

1.mysopromat.ru/uchebnye_kursy/sopromat/geometric...
2.ru.wikipedia.org/wiki/Момент_инерции
3.www.dpva.info/Guide/GuideMatherials/MaterialsRe...

Осевой момент инерции прямоугольника



Прямоугольник одна из самых простых фигур и найти его момент инерции не составляет труда. В первую очередь нужно определиться, что представляют собой элементарные площади dF. Очевидно, что прямоугольник проще всего разбить на маленькие прямоугольники, параллельные одной из его сторон — это и есть элементарные площади dF. Площадь каждой из них вычисляется по формуле площади прямоугольника.
Общий ход нахождения осевого момента инерции такой (например для горизонтальной оси). Обозначим высоту прямоугольника H. Делим пополам вертикальную сторону прямоугольника, это будет нулевой уровень. Верхняя часть относительно выбранной точки будет иметь высоту H/2 , а нижняя — -H/2. Откладываем от верхней горизонтальной стороны прямоугольника параллельную ей линию, идущую вниз на величину dy -> 0 . Затем проводим линию, параллельную новой, на таком же расстоянии до нее. Продолжаем вводить новые линии до тех пор, пока не достигнем нижней горизонтальной стороны треугольника. Каждый из получившихся прямоугольников имеет одинаковую ширину, равную ширине исходного прямоугольника, а также одинаковую высоту, равную , следовательно, не составляет труда посчитать площадь каждого элементарного прямоугольника. Для нахождения осевого момента инерции теперь нужно умножить каждую площадь на расстояние от центра прямоугольника до оси, проходящей через уровень 0 (см. рисунок 1 слева), а затем все просуммировать.
На языке математике это выглядит просто


Произведение представляет собой ни что иное, как площадь элементарного прямоугольника, а — расстояние центра этого прямоугольника до уровня 0. Интегрируя ( приводя подобные слагаемые, получаем второе уравнение

Осевой момент инерции относительно горизонтальной оси находится совершенно аналогично (см. рис.1, справа)

Осевой момент инерции круга


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

В данном случае это кольцо, образованное двумя концентрическими окружностями: внешней с радиусом r + dr и внутренним с радиусом r , причем dr->0. Понятно, что выбрав изначально r = R-dr , затем взяв очень маленькое dr , рассчитав площадь кольца, затем положив r=R-2dr, (оно будет уже немного меньше R-dr) , выбрав вновь маленькое dr, рассчитав площадь второго кольца и так далее, пока , мы получим в сумме площадь всего исходного круга радиуса . Для вычисления осевого момента инерции останется только умножать каждую площадь на квадрат расстояния до оси, относительно которой вычисляется момент инерции. Для каждого нового кольца это расстояние, конечно, будет новым.

Нужно теперь вспомнить, как вычисляется площадь кольца. Для этого нужно вычислить площади кругов с радиусами r + dr и r , затем вычислить их разность — это и будет площадью кольца. По определению
sкольца = π ( (r + dr)2 - r 2)

sкольца = π ( (2rdr + 2 (dr)2)

Так как dr->0, а квадрат этой величины стремится к нулю еще быстрее, то вторым слагаемым в скобках можно пренебречь. Окончательно получаем
sкольца = 2π rdr

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


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

Более подробно можно почитать, например, здесь mysopromat.ru/uchebnye_kursy/sopromat/geometric...

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

Смысл такой. Есть много студенческих групп, в каждой есть представители мужского и женского пола, все они оцениваются единой методикой оценки здоровья по нескольким измеряемым параметрам (это входные данные). Есть 6 уровней градации здоровья каждого студента: низкий, ниже среднего, средний, выше среднего, высокий. Программа автоматически определяет этот тип по входным данным и затем сохраняет в базе данных. Задача состоит в том, чтобы можно было для произвольной группы (или нескольких групп) заказывать отчет о том, сколько процентов студентов имеют тот или иной тип здоровья, причем нужно разделать юношей и девушек, а также иметь возможность строить отчет по разным годам обучения (например 1 и 3, 3 и 4, 1,2,3,4 и т.д.)

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

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

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

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

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

Трудно быть тупым

Сегодня был тяжелый, но продуктивный, удачный день, я им весьма доволен, побольше бы таких

Твою мать как же я устал, как я черт возьми устал

Развертывание приложения QT под Windows NT с плагином MySQL


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

Первая проблема - я так и не смог ни разу собрать Qt из исходников. На официальном сайте лежали сырцы, к ним была приложена классная инструкция, но в них не хватало каких-то файлов, причем об этом узнавал я после минут сорока компиляции. Это откровенное свинство - не докладывать файлы, которые тянешь с официального сайта. После этого находил другие сырцы, в них те файлы были, но, как это ни печально, все равно не собрались они у меня ни разу. nmake падал непонятно из-за чего, в сети внятных ответов на эту проблему я не нашел, опустил руки и скачал бинарники с офсайта. Стыдно, винда плохо на меня действует видимо.

Вторя проблема - бинарная установка по умолчанию идет без плагинов. А мне был нужен плагин для работы с MySQL. Было бы все впорядке с сырцами - я бы указал перед компиляций, что мне нужно дополнительно собрать этот плагин, но что поделать. По крайней мере в бинарном установщике можно было указать, что мне нужны исходники всего Qt. В этих исходниках, конечно, были сырцы плагина MySQL. И вот, самое банальное - их же надо найти. У меня был Qt 4.8.1, сырцы плагина лежат в \QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql . Для того, чтобы их собрать, нужно скачать девелоперскую версию MySQL, т.е. в ней обязательно должны быть все инклуды и libmysql.lib. Положить всю эту папку лучше в корень диска, например, в С. Я положил ее в C:\MySQL. Далее, include директория: C:\MySQL\include, директория с либами - C:\MySQL\lib
Теперь можно собирать плагин MySQL я делал это по вот этой хорошей статье christopher.rasch-olsen.no/2009/04/14/qt-45-and...
там описывались решения проблем со сборкой при использовании MinGW, но у меня был компилятор от Microsoft, поэтому все получилось проще. Чтобы собрать плагин нужно открыть две консоли: одну консоль, которая идет от Visual Studio ( в ней будет запускаться nmake), вторую консоль, которая идет с QtCreator ( в ней будет запускаться Qmake). В каждый консоли нужно перейти в папку, где лежат сырцы плагина. В консоли, которая от Qt написать qmake "INCLUDEPATH+=C:\MySQL\include" "LIBS+=C:\MYSQL\MySQL Server\lib\opt\libmysql.lib" "CONFIG += debug release". Это подготовит make-файл плагина. После того, как все отработает, в консоли от Visual Studio надо написать nmake, это собственно начнет сборку исходников. Если все завершится успешно ( у меня обычно так и бывало, главное внимательно следить, чтобы при написании qmake пути к инклудам и либе были правильными), то в папках debug появится два нужных файл - qsqlmysqld4.dll и qsqlmysqld4.lib в папке release появятся такие же файлы, только без d на конце (первые - девелоперские, вторые для релиза). Дальше самое веселое. Из-за того, что плагин был собран руками, эти файлы никуда не перемещаются и их нужно переместить самому в нужные папки, чтобы Qt смогла их найти и слинковаться с ними при написании кода. Я так и не понял, куда точно надо положить эти файлы, поэтому кидал их везде, где только мог. В добавок к этим двум файлам нужно кидать еще два файла, которые идут от MySQL - libmysql.dll и libmysql.lib И так, я положил эти четыре файла в следующие папки: \QtSDK\Desktop\Qt\4.8.1\msvc2008\bin и \QtSDK\Desktop\Qt\4.8.1\msvc2008\lib и \QtSDK\Desktop\Qt\4.8.1\msvc2008\plugins\sqldrivers После этого для того, чтобы в программе можно было использовать эти библиотеки, в .pro файл проекта нужно добавить следующие строки CONFIG+=qt sql . После этого уже при соединении с базой указать нужный драйвер

Третья проблема - дебагер. В случае использования Visual Studio дебагер не идет по умолчанию. Странно, но даже если в ней пишешь программы и регулярно дебажишь их, нужно все равно скачать себе дебагер, например, отсюда msdn.microsoft.com/en-us/windows/hardware/gg463... (называется debugger tools for windows). Нужно запомнить папку, куда была произведена установка этого софта. После этого надо запустить QtCreator -> иструменты -> сборка и запуск -> инструментарии. Там надо найти все, что относится к MSVC, выбрать их, убедиться, что к ним не подключен дебагер (внизу окна поле отладчик). Если не подключен, то к каждому полю, относящемуся к MSVC нужно применить кнопку "Дублировать", а затем каждому появившемуся полю указать дебагер из папки, которые только что скачали (надо указывать файл cdb.exe) я это попытался показать в картинках





Но это еще не все. Нужно еще указать пути к символам. Для этого нужно не выходя из окна перейти на вкладку отладчик-> cdb и там указать произвольный путь к символам (например папку temp).



Теперь дебагер должен быть установлен. Нужно обязательно проверить это - написать простенькое приложение, поставить брейкпоинт и посмотреть, запуститься ли он. Если все хорошо, то при первом запуске он попросит указать пути к символам - можно указать ту же самую папку. К сожалению дебагер очень медленный, но лучше, чем ничего, что ни говори, но в борланде или Visual Studio намного удобнее и быстрее.


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

Четвертая проблема - развертывание. Это было самым большим ударом, потому что я привык своим неотягощенным мозгом думать, что это само собой разумющееся. В Visual Studio - слинковал статически и радуйся толстому экзешнику, который везде работает, просто галочку поставил. То же самое было в борланде. В Qt это было одной большой головной болью. Я начал с этой статьи doc.qt.digia.com/4.7/deployment-windows.html#st... . Естественно, хотелось все сделать просто и слинковать все статически, но вот незадача в том. что для этго нужно всю библиотеку Qt собрать из исходников с указанием того, что это надо сделать статически. А про мой опыт сборки исходников я уже написал. Поэтому пришлось делать с разделяемыми библиотеками. Для этого нужно в .pro файле проекта добавить строчку CONFIG += release, затем очистить в QtCreator проект, пересобрать полностью. После этого в папке release, где лежит проект, появится куча файлов с экзешником программы. Я эту папку скопировал в другое место, удалил из нее все, кроме экзешника и файла с его манифестом. В эту папку, где лежит экзешник, нужно положить библиотеки, от которых зависит программа. Это скорее всего будут библиотеки QtCore4.dll, QtGui.dll (обязательно, обязательно без d на конце, это очень важно) . Также я туда положил, на всякий случай, libmysql.dll Теперь очередь плагинов. Библиотеки нельзя просто положить рядом с экзешником. Надо cкопировать папку QtSDK\Desktop\Qt\4.8.1\msvc2008\plugins туда, где лежит экзешник. В этой папке обязательно должна быть библиотека qsqlmysql4.dll , которая была получена после сборки плагина. Обязательно надо удостовериться, что все библиотеки релизовской версии (без d на конце). Теперь наименее приятная часть. Рядом с экзешником нужно положить следующие библиотеки, специфичные для компилятора msvcp90.dll msvcr90.dll - они лежат в огромной папке C:\Windows\winsxs там среди тысяч папок надо найти ту, которая относится к используемой версии VisualStudio и обязательно это должны быть релизовские библиотеки. Чтобы не ошибиться, я поступал так. Скачал замечательную программу отсюда www.dependencywalker.com/ установил, запустил ее, открыл с ее помощью свой экзешник, нажал F9 и узнал точный путь, откуда берется библиотека. Попытался изобразить это на картинке (потом надо нажать F9 и программа покажет полный путь к библиотеке)



после этого на всякий случай я еще скопировал в папку с экзешником папки Microsoft.VC90.CRT и Microsoft.VC90.MFC они у меня лежали в C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86. Далее, чтобы уже совсем наверняка ничего не потерять, я положил в папку с экзешником Microsoft Visual C++ 2008 Redistributable Package (x86), которую взял отсюда www.microsoft.com/en-us/download/details.aspx?i.... Его надо развернуть на целевой машине в обязательном порядке. Конечно, нужно брать папки и файлы, соответствующие той версии студии, от которой зависит экзешник. Это не всегда наверное очевидно, поэтому можно с помощью любого хексового редактора, например WinHex, отккрыть бинарник экзешника и в нем сделать поиск по фразе "Visual" Там внимательно почитать что написано и найти упоминание о VisualStudio, обязательно будет указана используемая версия. Вот именно ее библиотеки и нужно будет пложить рядом с экзешником



Еще я положил на всякий случай библиотеки ieframe.dll и IEShims.dll потому что dependencyWalker показывал, что какой-то компонент зависит от них, но это был Warning, я сомневаюсь, что реально они нужны.
И вот после всех этих действий мне удалось добиться того, что у друга на машине все заработало. Заработало и у меня на чистой машине. Во вторник мне надо, чтобы это заработало на компе, куда мне надо это поставить и я надеюсь, что никогда в жизни не вернусь с этим людям.

Все эти трудности сильно подпортили впечатления от Qt, но я очень надеюсь, что когда-нибудь процесс развертывания станет у них таким же простым, как у Visual, я совсем отвык от такого красноглазия уже
Огромная благорадность вот этому человеку, без статьи которого я еще наверное долго бы бился головой о стену buffered.io/posts/resolving-side-by-side-config...

В довесок ко всему, еще одна проблема состоит в том, что по умолчанию QtCreator хранить файлы в кодировке ASCII - поэтому работать с кириллицей не стоит, пока это так. Лучше сразу перенастроить хранение файлов в кодировке UTF-8. Для этого надо зайти в Инструменты->Параметры->Текстовый Редактор->Поведение->Кодировака файлов = UTF8


Провалил проект, молодец. Радует, что моей вины объективно не больше половины. Вдвойне обидно, что по факту он провален, но его все равно надо делать, чтобы хоть что-то сдать. Ну ладно, он был на добровольных начинаниях, я был готов к тому, что ничего мне за него не перепадет, зато я научился основам Qt и провал это тоже опыт. А чувство все равно очень паршивое, уныло от этого и от много чего еще. Я бы наверное даже напился, только работы много очень и похмелье это последнее, что сейчас надо. Одиноко и грустно.

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

Недавно решал курсовую по математике первого курса ноттингемского университета, вызвало немалую печаль она у меня. Там были комплексные числа и линейная алгебра. Заданий такой сложности у меня никогда в институте не было, а курс линейки даже не включал в себя внятные слова о собственных числах и векторах. С горем пополам, каждый день по чуть-чуть, узнав много нового о линейной алгебре и вспомнив все операции над комплексными числами, я сделал это курсовую. С одной задачей даже не спал пару дней нормально, потом озарило на кухне и доделал в троллейбусе. Даже сходил к своему лектору по математике, ей понравилась задача, одобрила решение, после этого я наконец-то успокоился, потому что до этого было уже 3 решения, все на первый взгляд правильные, но все-таки неправильные. Когда все сделал, то было приятно, что кое-чему все-таки научился в институте, да и в очередной раз убедился, что математика может быть очень красивой и невыносимо формальной, если не вкладывать в нее аналогии, геометрические интерпретации и воображение

Откуда эта смертельная усталость по вечерам? Так я раньше кажется не уставал

Дома теперь нет, жалко. Когда-нибудь у меня обязательно будет время и я смогу спокойно пересмотреть Еву, Врата Штайнера, NHK, Грехи Кьешана, Эврику, Харуху, Зимнюю сонату. Когда-нибудь обязательно будет время