Задача:
Создать Телеграм бота и научится работать с ним с помощью Node.js и библиотеки «Telegraf», через webhook, используя для этого виртуальный выделенный сервер (VDS) и самоподписанный SSL сертификат. Подробнее »Телеграм бот Node.js Webhook
Запись создана, как шпаргалка, чтобы в случае необходимости, использовать как точку входа, для поиска нужной информации. За основу, был взят курс: OTUS: Linux для начинающих — Отличный видеокурс рассчитанный для программистов и администраторов, которые хотят освоить ОС Linux. Курс понравился структурой, которая объясняет основы, необходимые для начинающих изучение.
Linux — семейство Unix-подобных операционных систем на базе ядра Linux, включающих тот или иной набор утилит и программ проекта GNU, и, возможно, другие компоненты. Как и ядро Linux, системы на его основе как правило создаются и распространяются в соответствии с моделью разработки свободного и открытого программного обеспечения. Linux-системы распространяются в основном бесплатно в виде различных дистрибутивов — в форме, готовой для установки и удобной для сопровождения и обновлений, — и имеющих свой набор системных и прикладных компонентов, как свободных, так, возможно, и собственнических. Linux — Википедия.
На последнем месте работы, столкнулся с необычными ожиданиями некоторых коллег и руководства. По мнению которых, если ты «эксперт», тогда по умолчанию, ты «супермен», который все знает, всегда пишет идеальный код и очень быстро решает любые задачи. Для меня, это было довольно неожиданно и явилось одной из причин ухода из компании.
Соответственно, для таких людей, необходимо дать разъяснение, что программист — это человек и не важно, какие у него сертификаты. А как известно, человеку свойственны определенные проблемы, так как, он является сложной биоинформационной системой, находящейся в различных контекстах окружающей среды.
На мой, скромный взгляд, главное в профессии программиста, иметь гибкий ум. Потому что некоторые задачи, не всегда имеют конкретные реализации, часто необходимо творчески подходить к их решению. В остальном, поможет опыт, помощь и инструменты. Конечно же, разные люди, по разному, могут решить одну и ту же задачу, с разным, затраченным, на это временем.
Так же, к выше сказанному, хочу добавить, что умение общаться с людьми, выходит на первый план. Особенно если вы работаете в команде, а часто именно так и бывает. Поэтому, каким бы вы не были интровертом, как бы вам этого не хотелось, но реальность такова, что необходимо уметь и учиться общаться с людьми.
Основная ценность — это люди, именно они достигают целей компании. Не деньги делают деньги, а люди.
Рекомендую к прочтению книгу «Высоконагруженные приложения. Программирование, масштабирование, поддержка» автор Мартин Клеппман, в книге объединены и описаны основные проблемы, нюансы и особенности, с которыми сталкиваешься при работе с высоконагруженными информационными системами.
В этой книге вы найдете ключевые принципы, алгоритмы и компромиссы, без которых не обойтись при разработке высоконагруженных систем для работы с данными. Материал рассматривается на примере внутреннего устройства популярных программных пакетов и фреймворков. В книге три основные части, посвященные, прежде всего, теоретическим аспектам работы с распределенными системами и базами данных. От читателя требуются базовые знания SQL и принципов работы баз данных.
Несколько абзацев из книги:
Чтобы сделать БД отказоустойчивой, реализации B-деревьев обычно включают дополнительную структуру данных на диске: журнал упреждающей записи (write-ahead log, WAL), также именуемый журналом повтора (redo log). Он представляет собой файл, предназначенный только для добавления, в который все модификации B-деревьев должны записываться еще до того, как применяться к самим страницам дерева. Когда база возвращается в норму после сбоя, этот журнал используется для восстановления B-дерева в согласованное состояние.
Не для всякого приложения нужны транзакции, и иногда лучше ослабить транзакционные гарантии или вообще отказаться от них (например, для повышения производительности или доступности). Некоторые из свойств функциональной безопасности достижимы и без транзакций.
Обеспечиваемые транзакциями гарантии функциональной безопасности часто описываются известной аббревиатурой ACID (atomicity, consistency, isolation, durability — атомарность, согласованность, изоляция и сохраняемость). Она был придумана в 1983 году Тео Хэрдером (Theo H.a.rder) и Андреасом Ройтером (Andreas Reuter) [7] в попытке создать четкую терминологию для механизмов обеспечения отказоустойчивости в базах данных.
Хочу поделиться с вами, вспомогательными программами, которые использую в работе и повседневной жизни, надеюсь вы найдете, что нибудь полезное для себя. Подробнее »Часто используемые программы
В работе программиста 1С, данный функционал требуется крайне редко, хотя благодаря нему можно решать довольно сложные задачи с динамическими и не постоянными печатными формами. При реализации данной задачи, работа по созданию шаблонов Word и расстановке закладок в шаблоне Word возлагается на пользователей 1C.
В данном примере будет показано, как используя механизмы 1С и документа Word в качестве шаблона, можно создать печатную форму для вывода данных, пользователям программы 1С.
Создадим шаблон на основе документа Word для 1С. Сначала необходимо включить показ закладок для более удобной работы с документом: Использование шаблонов Word в 1С Использование шаблонов Word в 1С
Далее необходимо в файл шаблона для 1С, добавить текст и пару закладок. Закладка добавляется через меню «Вставка» — «Закладка». Нужно выделить текст закладки, скопировать его, открыть меню «Вставка — Закладка», вставить скопированный текст закладки и нажать «Добавить»: Установка закладки, шаблон Word для 1С
Когда файл шаблона Word готов, создаем новую внешнею обработку в 1С, добавляем форму и в модуле формы вставляем следующий код:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ЗаполнитьШаблонВорд();
КонецПроцедуры
&НаКлиенте
Функция ЗаполнитьШаблонВорд()
//Попытка создать COM объект
Попытка
ОбъектВорд = Новый COMОбъект("Word.Application");
Исключение
Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат Неопределено;
КонецПопытки;
//Путь к шаблону
ОбъектВорд.Documents.Add("C:\Users\Константин\Desktop\Шаблон.docx");
ШаблонВорд = ОбъектВорд.ActiveDocument;
//Получаем все закладки из шаблона
Для каждого ЗакладкаВорд Из ШаблонВорд.Bookmarks Цикл
Сообщить(ЗакладкаВорд.Name);
КонецЦикла;
//Заменяем закладку1 на текст
ШаблонВорд.Bookmarks("Закладка1").Select();
ШаблонВорд.Application.Selection.TypeText("Текст для закладки №1.");
//Заменяем закладку2 на текст
ШаблонВорд.Bookmarks("Закладка2").Select();
ШаблонВорд.Application.Selection.TypeText("Текст для закладки №2.");
//Заменяем закладку3 на текущую дату
ШаблонВорд.Bookmarks("Закладка3").Select();
ШаблонВорд.Application.Selection.TypeText(ТекущаяДата());
ОбъектВорд.Application.Visible = Истина;
ОбъектВорд.Activate();
//Закрытие документа
//ОбъектВорд.Application.Quit();
КонецФункции
В результат запуска внешней обработки 1С по формированию печатной формы на основе шаблона в виде файла Word, мы получим следующий результат: Результат использования шаблонов Word в 1С
Информацию по методам COM объекта Word, а так же дополнительные данные можно узнать из MSDN.
Дополнение к заметке Использование шаблонов Word в 1С
Выражаю благодарность, всем тем, кто комментирует запись, благодаря вам, материал дополняется новыми данными и будет полезен более широкому кругу посетителей.
1. А как поменять размер шрифта во вставляемом тексте?
Достаточно изменить размер шрифта закладки, в шаблоне. А вот, если необходимо динамически менять размерность, тогда:
// Вставка изображения
ШаблонВорд.Bookmarks("Закладка3").Select();
ШаблонВорд.Application.Selection.InlineShapes.AddPicture("C:\Users\Константин\Desktop\logo_1c.png");
3. При выполнении кода: ОбъектВорд.Documents.Add(«C:/Шаблон.docx») (туда я поместил Ваш документ) получаю ошибку : «Ошибка при вызове метода контекста (Add)» в чем может быть причина?
Может попробовать изменить путь на: «C:\Шаблон.docx».
4. Подскажите пожалуйста еще почему при сохранении макета типа active document в файл word кодом:
Я получаю вместо нормального документа вот такой http://prntscr.com/eshgjk
Предполагаю, что метод Записать(< ИмяФайла>, < ТипФайлаТаблицы>) по умолчанию, записывает файл в формате MXL. Попробуйте вторым параметром установить значение: ТипФайлаТабличногоДокумента.DOCX, более подробно описано в «Синтакс-помощнике».
5. У меня в документе есть ссылки на файлы которые расположены на сетевом диске. Как в шаблоне сделать гиперссылку на эти файлы?
Интересный вопрос, если попробовать сделать запись макроса и посмотреть результат, то в Visual Basic добавление гиперссылки будет выглядеть следующим образом:
Sub Макрос1()
'
' Макрос1 Макрос
'
'
Selection.MoveLeft Unit:=wdCharacter, Count:=15, Extend:=wdExtend
ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
"C:\Users\Константин\Desktop\Тест.txt", SubAddress:="", ScreenTip:="", _
TextToDisplay:="ТестоваяСсылка"
End Sub
Функция ЗаполнитьШаблонВорд()
//Попытка создать COM объект
Попытка
ОбъектВорд = Новый COMОбъект("Word.Application");
Исключение
Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат Неопределено;
КонецПопытки;
//Путь к шаблону
ОбъектВорд.Documents.Add("C:\Users\k.blagin\Desktop\Шаблон.docx");
ШаблонВорд = ОбъектВорд.ActiveDocument;
//Получаем все ссылки из шаблона
Для каждого ЗакладкаВорд Из ШаблонВорд.Hyperlinks Цикл
Сообщить(ЗакладкаВорд.Name);
КонецЦикла;
//Меняем адрес уже существующей ссылки
ШаблонВорд.Hyperlinks("Logs.zip").Address = "C:\Users\k.blagin\Desktop\Memory.zip";
//Заменяем закладку на ссылку
ОбъектЗакладка = ШаблонВорд.Bookmarks("Закладка3");
ШаблонВорд.Hyperlinks.Add(ОбъектЗакладка.Range, "C:\Users\k.blagin\Desktop\Шаблон.docx", "", "Шаблон.docx", "C:\Users\k.blagin\Desktop\Шаблон.docx");
ОбъектВорд.Application.Visible = Истина;
ОбъектВорд.Activate();
//Закрытие документа
//ОбъектВорд.Application.Quit();
КонецФункции
Небольшая подсказка для начинающих программистов 1С. Если вы создали внешнюю обработку для заполнения табличной части документа на основе управляемых форм и теперь хотите обновить отображение данных документа, можете воспользоваться следующим способом:
&НаКлиенте
Процедура Заполнить(Команда)
//Код по изменению и сохранению данных документа в базе данных
//...
ФормаВладелец = ЭтаФорма.ВладелецФормы;
ФормаВладелец.Прочитать();
КонецПроцедуры
Данный код выполняется в форме обработке по заполнению табличной части.
Пока есть время и возможность, изучаю игровой движок Unreal, разработка игр в котором ведется при помощи программного комплекса под названием UDK (Unreal Developer’s Kit), для более подробного изучения решил создать небольшую сцену с фонтаном. Фонтан будет представлять из себя ангела с кувшином, из которого будет литься вода. Примерный набросок фигуры можно видеть на рисунке, в данный момент объект готов частично:
Набросок и первичная модель ангела
В ходе моделирования были внесены изменения в положение фигуры, то как она держит кувшин и форму крыльев. Вокруг фигуры ангела буду скамейки, кусты, позади деревья и дабы не создавать лишние объекты, горизонт будет закрыть каменной оградой, предполагаемую схему можно увидеть ниже на рисунке: План сцены
Изначально, базовые низкополигональные модели были созданы в Blender и Makehuman, одежда была создана при помощи симуляции. Далее было решение делать скульптинг в Blender, но как выяснилось на опыте, он не может стабильно работать с большим количеством полигонов, при превышении порога в 1,5 миллиона, он просто завершался. На помощь пришел ZBrush, который с успехом справляется и с более большим количеством полигонов.
Обновление (30.05.2013): Модель ангела для фонтана, тестовый рендер в ZBrush.
Обновление (05.06.2013): Сделано основание фонтана, добавлены детали, такие как трещины, сколы, царапины. Так же добавлены текстуры и материалы. Дальнейший шаг, ретопология высоко-полигональной модели(около 3 миллионов полигонов), в программе TopoGun.
Angel: hi-poly model
Angel: hi-poly model
Angel: hi-poly model
Обновление (20.06.2013): Наконец то сделана, низко полигональная модель, которая будет использоваться в игровом движке, в итоге получилось 11 тысяч полигонов. Как было сказано выше, ретопологию хотел сделать в программе TopoGun, но в ней есть одна особенность, которая мне очень мешала, объект ретопологии просвечивал и были видны полигоны на обратной стороне, что сильно сбивало с толку, может эту функцию можно было отключить, к сожалению, так и не нашел как это сделать. Зато в TopoGun, очень удобно генерировать карты нормалей и текстуры, что как раз будет сделано именно в ней. Ретопология же производилась в программе Blender , при помощи модификатора Shrinkwrap, дополнения Bsurfaces и включенной опции Snap.
Angel: low-poly model
Angel: low-poly model
Angel: low-poly model
Обновление (21.06.2013): Сегодня были созданы карты нормалей и текстуры объектов, с помощью программы TopoGun. Так же, создан тестовый рендер в программе Marmoset Toolbag.
Lowpoly render in Marmoset Toolbag
Lowpoly render in Marmoset Toolbag
Lowpoly render in Marmoset Toolbag
Обновление (01.07.2013): Тестовый рендер модели в UDK, смотрится вроде бы не плохо.
Test render in UDK
Test render in UDK
Test render in UDK
Test render in UDK
Test render in UDK
Обновление (03.07.2013): Вот и готова простая сцена в UDK, к сожалению реализовать все задуманное не получилось, так как, мой компьютер просто не способен на большее, как играть в сапера, чуть не туда нажал и все, конец.
Видео (смотрите в HD):
Небольшой набросок персонажа Robo, потрепанный с искренними глазами робот. На лице повязка, скрывающая удаленный голосовой модуль. На голове старый цилиндр, помятый и местами порванный. Штаны старые, в заплатках и местами не аккуратно штопанные, на теле множество масленых потеков, царапин, заплаток, при движении местами появляются искры. На одной ноге старый, рваный ботинок, другая частично повреждена. Шея и руки удлиненные, телескопические и гибкие. Ремень представляет из себя простую веревку(бечевку) или сплетенные провода.
Зарисовка персонажа: Character: Robo — sketch
Первый этап моделирования:
Добавлено немного деталей:
Смоделированы еще детали персонажа, следующий этап скульптинг:
08.04.2013 Скульптинг в ZBrush, небольшая детализация: Robo sculpt zbrush