Pull to refresh
0
0
Send message

PHP + Word

Reading time4 min
Views87K
image

Что делать, если нужно создавать много Word файлов одинакового вида, но разного содержания? Например заполнять бланки, квитанции.

Есть 3 варианта:
1) использовать одну из библиотек для работы с Word документами
2) сохранить документ в формате docx, открыть архиватором и внутри мы увидим "\word\document.xml" — чистый xml, с которым можно работать через str_replace (спасибо Enuriru за подсказку)
3) использовать сторонний сервис, который сделает за меня большую часть работы

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

Второй варинт хорош и прост, когда мы работаем с word документами в формате .docx, но к сожалению он не поддерживает формат .doc

В процессе проработки третьего варианта, наткнулся на интересное решение LiveDocx

Преимущества:
— файл шаблона можно создать привычным способом через Word
— представление документа в форматах doc, docx, rtf, pdf
— не нужно заморачиваться с представлением Word документа через html или XML
— простота подключения
— надежность — сервис существует давно и под него даже есть готовая библиотека от Zend
Недостатки:
— в бесплатной версии ограничение на 250 генерируемых документов в сутки
— шаблон нельзя менять (например нельзя сгенерировать таблицу с кол-вом строк, равным количеству элементов в базе)

Читать дальше →
Total votes 103: ↑86 and ↓17+69
Comments59

Оркестровка СУБД CockroachDB в Kubernetes

Reading time7 min
Views5.8K
Предисловие переводчика: Буквально через неделю после нашей публикации знакомства с CockroachDB состоялся первый финальный релиз этой распределённой и масштабируемой СУБД с открытым кодом, что ознаменовало её официальную готовность для применения в production. А значит — самое время научиться её «готовить» в реалиях микросервисов с Kubernetes.

В этой статье показано, как осуществлять оркестровку деплоя и управление небезопасным кластером CockroachDB из 3 узлов с помощью Kubernetes и его функции StatefulSet, находящейся в бета-версии.

Да, запуск stateful-приложения вроде CockroachDB на Kubernetes требует использования сложных возможностей системы, пока что поддерживаемых на уровне бета-версии. Запустить CockroachDB на Kubernetes для тестирования можно и проще, однако описанный здесь подход предназначен для разворачивания СУБД в production, когда необходимые функции в Kubernetes окончательно созреют для этого. (Прим. перев.: о проблеме stateful-приложений в Kubernetes и одном из подходов её решения мы рассказывали в материале про Kubernetes Operators.)
Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments0

Обзор GUI-интерфейсов для управления Docker-контейнерами

Reading time5 min
Views170K


Работа с Docker в консоли — привычная для многих рутина. Тем не менее, бывают случаи, когда GUI-/веб-интерфейс может оказаться полезным даже для них. В статье представлен обзор наиболее заметных на сегодняшний день решений, авторы которых попытались предложить более удобные (или подходящие для каких-то случаев) интерфейсы для знакомства с Docker или даже обслуживания больших его инсталляций. Некоторые из проектов совсем молоды, а иные — наоборот, уже отмирают…
Читать дальше →
Total votes 41: ↑40 and ↓1+39
Comments26

Junior FPGA Design Engineer: как стать?

Reading time11 min
Views144K
Всем привет!

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

Разработка под FPGA (ПЛИС) — это не просто какой-то язык. Это очень объемная область, с огромным количеством подводных камней и нюансов.

В этой статье вы найдете:
  • список тем, которые должен освоить начинающий разработчик под FPGA
  • рекомендуемую литературу по каждой из тем
  • набор тестовых вопросов и лабораторных работ
  • классические ошибки новичков (и советы по исправлению)

Добро пожаловать под кат!
Читать дальше →
Total votes 44: ↑44 and ↓0+44
Comments58

Ставим Selenium Grid на колеса Apache Mesos

Reading time13 min
Views13K
Привет, Хабр! Меня зовут Настя, и я не люблю очереди. Поэтому я расскажу вам, на примере Альфа-Лаборатории и наших исследований, каким образом можно организовать инфраструктуру и архитектуру для прогона тестов, чтобы получать результат в разы быстрее. Например, нам удалось добиться такой цифры, как 5 минут суммарного времени прохождения тестов на приложение. Для этого нам пришлось поменять подход к запуску Selenium Grid.



Прежде чем начну рассказывать про сам selenium grid и все, что связано с ним, я хочу пояснить суть проблемы, которую мы пытались решить.

В прошлом году мы внедряли DevOps как процесс. И в один момент, автоматизируя все и вся, мы поняли, что time to market для каждого артефакта на этапе тестирования не должен превышать 30 минут. Концептуально мы хотели, чтобы некоторые релизы проходили автоверификацию, если приемочное тестирование им не нужно. Для тех артефактов, которые нужно проверять руками, 30 минут — это время, за которое тестировщик получает результаты прогона автотестов, анализирует их, а также делает приемочное тестирование. При этом автотесты должны автоматически запускаться в рамках нашего pipeline.
Читать дальше →
Total votes 35: ↑35 and ↓0+35
Comments18

Сделай шаг к ПЛИС

Reading time7 min
Views266K


Ты ждал знак? Вот он!

Много лет я не решался начать программировать ПЛИС, потому что это сложно, дорого и больно (как мне казалось). Но хорошо, когда есть друзья, которые помогают сделать первый шаг. И теперь я не понимаю одного — ПОЧЕМУ Я ЖДАЛ ТАК ДОЛГО?

Сейчас я помогу сделать первый шаг и тебе!

Я готов!
Total votes 69: ↑60 and ↓9+51
Comments90

Многоагентный умный дом

Reading time7 min
Views18K
Начну свою первую статью с небольшой предыстории. К моменту когда все началось, я уже на протяжении 7 лет участвовал в научном проекте, целью которого была разработка семантической технологии проектирования интеллектуальных систем. А началось все с прочтения одной замечетельной статьи (спасибо vovochkin) во второй половине 2015 года. Именно тогда я понял, что разрабатываемая нами технология хорошо подходит под решение задач в области интернета вещей. Это был первый фактор который привел меня к текущему проекту. Вторым фактором было то, что мне сильно нравился фильм «Железный человек» и я сильно хотел иметь своего «Джарвиса» у себя дома.



Total votes 30: ↑28 and ↓2+26
Comments20

Организация OLAP куба средствами Python

Reading time4 min
Views25K
Добрый день, уважаемые читатели.
Сегодня я расскажу вам о том, как можно построить простенькую систему анализа данных на Python. В этом мне помогут framework cubes и пакет cubesviewer.
Сubes представляет собой framework'ом для работы с многомерными данными с помощью Python. Кроме того он включает в себя OLAP HTTP-сервер для упрощенной разработки приложений отчетности и общего просмотра данных.
Сubesviewer представляет собой web-интерфейс для работы с вышеуказанным сервером.

Читать дальше →
Total votes 15: ↑14 and ↓1+13
Comments0

Нейросеть в 11 строчек на Python

Reading time8 min
Views540K

О чём статья


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

Дайте код!


X = np.array([ [0,0,1],[0,1,1],[1,0,1],[1,1,1] ])
y = np.array([[0,1,1,0]]).T
syn0 = 2*np.random.random((3,4)) - 1
syn1 = 2*np.random.random((4,1)) - 1
for j in xrange(60000):
    l1 = 1/(1+np.exp(-(np.dot(X,syn0))))
    l2 = 1/(1+np.exp(-(np.dot(l1,syn1))))
    l2_delta = (y - l2)*(l2*(1-l2))
    l1_delta = l2_delta.dot(syn1.T) * (l1 * (1-l1))
    syn1 += l1.T.dot(l2_delta)
    syn0 += X.T.dot(l1_delta)


Слишком сжато? Давайте разобьём его на более простые части.
Читать дальше →
Total votes 47: ↑44 and ↓3+41
Comments17

Let's Encrypt и nginx: настройка в Debian и Ubuntu

Reading time13 min
Views318K

image


Если вдруг вся эта история прошла мимо вас, Let's Encrypt — центр сертификации от некоммерческой организации ISRG, существующий при поддержке EFF и многих компаний, взявшей на себя миссию дать людям бесплатные SSL/TLS сертификаты для сайтов и серверов. Сертификаты от Let's Encrypt уже используются на более чем 10 миллионах доменов.


Кроме очевидной бесплатности у сертификатов от Let's Encrypt есть особое, отсутствующее у любых других коммерческих сертификационных центров, достоинство: если вы однажды получили сертификат от Let's Encrypt, то, при прочих равных, это навсегда. Не нужно раз в год-два вручную обновлять сертификаты. Не нужно вообще вспоминать что сертификаты где-то есть. Получил, настроил и забыл!


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


Организации автоматического обновления сертификатов в статье уделено пристальное внимание, с тем чтобы вы могли в полной мере оценить это принципиальное преимущество Let's Encrypt.

Читать дальше →
Total votes 48: ↑46 and ↓2+44
Comments96

Методы оптимизации нейронных сетей

Reading time17 min
Views218K

В подавляющем большинстве источников информации о нейронных сетях под «а теперь давайте обучим нашу сеть» понимается «скормим целевую функцию оптимизатору» лишь с минимальной настройкой скорости обучения. Иногда говорится, что обновлять веса сети можно не только стохастическим градиентным спуском, но безо всякого объяснения, чем же примечательны другие алгоритмы и что означают загадочные \inline \beta и \inline \gamma в их параметрах. Даже преподаватели на курсах машинного обучения зачастую не заостряют на этом внимание. Я бы хотел исправить недостаток информации в рунете о различных оптимизаторах, которые могут встретиться вам в современных пакетах машинного обучения. Надеюсь, моя статья будет полезна людям, которые хотят углубить своё понимание машинного обучения или даже изобрести что-то своё.


image


Под катом много картинок, в том числе анимированных gif.

Читать дальше →
Total votes 78: ↑78 and ↓0+78
Comments74

Elixir в биоинформатике

Reading time4 min
Views5.5K


В этой статье я расскажу о своей попытке использования библиотеки GenStage, а в частности модуля Flow, для реализации одного из алгоритмов биоинформатики. На протяжении последних двух лет я занимался разработкой комплексной системы хранения и поиска результатов метагеномного анализа (метагеномика) углеводородного сырья. Наверное, для многих это китайская грамота. Фактически такой анализ означает выявление всех типов микроорганизмов, обитающих, к примеру, в залежах нефти. Некоторые из этих микроорганизмов, преимущественно бактерии, способны разъедать стальные трубы и создавать множество других неблагоприятных эффектов.
Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments4

Генерация фиктивных данных с Mimesis: Часть I

Reading time7 min
Views37K
image

Mimesis — это библиотека для языка программирования Python, которая помогает генерировать фиктивные данные для различных целей. Библиотека написана с использованием средств, включенных в стандартную библиотеку языка Python, потому не имеет никаких сторонних зависимостей. На данный момент библиотека поддерживает 30 языковых стандартов (в числе которых и русский) и более 20 классов-провайдеров, предоставляющих разного рода данные.


Возможность генерировать фиктивные, но в то же время валидные данные бывает очень полезна при разработке приложений, которые подразумевают работу с базой данных. Ручное заполнение базы данных представляется довольно затратным по времени и трудоемким процессом, который выполняется как минимум в 3 этапа — это:


  1. Сбор необходимой информации.
  2. Постобработка собранных данных.
  3. Программирования генераторов данных.

Эта непростая задача по-настоящему усложняется в тот момент, когда требуется сгенерировать не 10-15 пользователей, а 100-150 тысяч пользователей (или иного рода данные). В этой и двух последующих статьях мы постараемся обратить ваше внимание на инструмент, который в разы упрощает процесс генерации тестовых данных, начальной загрузки базы данных и тестирования в целом.

Читать дальше →
Total votes 46: ↑45 and ↓1+44
Comments40

Об одном способе защиты исходников Python-программы

Reading time9 min
Views96K

Как всё начиналось


Однажды мне пришлось участвовать в разработке одного небольшого проекта для научных расчётов, который разрабатывался на языке программирования Python. Изначально Python был выбран как удобный и гибкий язык для экспериментов, визуализации, быстрого прототипирования и разработки алгоритмов, но в дальнейшем стал основным языком разработки проекта. Надо заметить, что проект был хоть и не большим, но довольно насыщенным технически. Для обеспечения требуемой функциональности, в проекте широко применялись алгоритмы теории графов, математическая оптимизация, линейная алгебра и статистика. Также использовались декораторы, метаклассы и инструменты интроспекции. В процессе разработки пришлось использовать сторонние математические пакеты и библиотеки, например, такие как numpy и scipy, а также многие другие.

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

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

Здесь сразу обозначилась новая проблема: как защитить исходные коды нашей Python-библиотеки? Может быть, в ином случае никто бы не стал этим заниматься, я бы уж точно, но в библиотеке были реализованы некоторые ноу-хау, и руководители проекта не хотели, чтобы данные наработки попали к конкурентам. Так как я был одним из исполнителей, мне пришлось озаботиться данной проблемой. Далее я постараюсь рассказать об основной идее, что из этого вышло, и как нам удалось скрыть Python-исходники от лишних глаз.
Читать дальше →
Total votes 82: ↑71 and ↓11+60
Comments41

Методика вычисления оптимального уровня затрат на корпоративные ИТ

Reading time14 min
Views26K

Как перестать бояться технологий и начать их эффективно применять



Луддиты в 1812 году разрушали станки. Примерно также сейчас поступают руководители компаний и технические специалисты при оптимизации расходов на ИТ.

Сколько нужно специалистов для обслуживания 268 компьютеров? 14 серверов на 450 пользователей — это много или мало? Наши админы купили такую-то программу — это правильное решение? — подобные вопросы задают мне руководители компаний, когда пытаются разобраться, оптимальны ли затраты их компании на корпоративное ИТ или нет. Лично у меня на эти вопросы нет односложных ответов. Но даже более — я считаю, что односложные ответы на подобные вопросы только навредят компании.

Все дело в том, что корпоративное ИТ — это не просто набор оборудования, программ и небритых людей в свитерах с оленями. Это еще и рабочий инструмент, от которого зависит эффективность работы компании. По этой причине говорить об оптимальности затрат на ИТ, не понимая, как эти самые затраты влияют на бизнес, мягко говоря, недальновидно.

Ниже я хочу поделиться своим подходом к оптимизации расходов на корпоративное ИТ. Для этого я постараюсь доходчиво объяснить, какую пользу бизнес получает от информационных технологий, как считать эту пользу и соотносить с затратами, и предложу один из методов вычисления оптимального уровня затрат на ИТ. Надеюсь, что моя статья поможет некоторым руководителям компаний и техническим специалистам пересмотреть свои взгляды как на корпоративное ИТ в целом, так на оптимизацию связанных с ним расходов в частности. На этом вступление заканчиваю и перехожу к сути:
Берем в руки счеты вместо бубна
Total votes 21: ↑18 and ↓3+15
Comments65

Синтаксический анализ текстов с помощью SyntaxNet

Reading time4 min
Views39K
Для одной из задач мне понадобился синтаксический анализатор русскоязычных текстов. Что это такое. Например, у нас есть предложение «Мама мыла раму». Нам нужно получить связи слов в этом предложении в виде дерева:

image

Из этого дерева понятно, что связаны слова «мама» и «мыла», а также «мыла» и «раму», а слова «мама» и «раму» напрямую не связаны.

Статья будет полезна тем, кому понадобился синтаксический анализатор, но не понятно, с чего начать.

Я занимался этой темой несколько месяцев назад, и на тот момент нашел не много информации по поводу того, где бы взять готовый и желательно свободный анализатор.
Читать дальше →
Total votes 29: ↑29 and ↓0+29
Comments22

Создайте свои собственные “Нейронные Картины” с помощью Глубокого Обучения

Reading time3 min
Views20K


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

Сегодня я собираюсь познакомить вас с тем как это делается. Прежде всего, убедитесь, что у вас обновленная копия Ubuntu (14.04 — та, что использовал я). Вам необходимо иметь несколько гигов свободного пространства на жестком диске и в оперативной памяти, хотя бы не менее 6 GB (больше оперативки для больших выводимых разрешений). Для запуска Ubuntu как виртуальной машины, вы можете использовать Vagrant вместе с VirtualBox.
Читать дальше →
Total votes 42: ↑38 and ↓4+34
Comments16

Получаем бесплатный SSL сертификат

Reading time4 min
Views516K
Привет, хабр!

О StartSSL я узнал от небезызвестного lissyara, в связи с чем ему очень благодарен.

Для начала расскажу, что же за зверь это. Как известно, SSL сертификаты выдаются центрами сертификации, чьи корневые сертификаты хранятся в хранилище сертификатов браузера\ОС (либо другого ПО, использующего SSL). Цена на большинство сертификатов зашкаливает, и платить приходится за каждый сертификат. Но у StartSSL весьма интересный подход — сами сертификаты у них бесплатные, вы платите только за проверку вашей личности.

Так же не может не радовать наличие русскоязычной поддержки.
Читать дальше →
Total votes 136: ↑123 and ↓13+110
Comments134

Учим Raspberry Pi принимать Telegram'мы с помощью Bot API и Python

Reading time7 min
Views49K
Давно хотел прикрутить к своей домашней Raspberry Pi удобный интерфейс «общения», который бы удовлетворял главному требованию — простота и лёгкость, с доступом из любой точки мира и с помощью любого оборудования (но в первую очередь — со смартфона).

В связи с отсутствием дома выделенного IP и наличием сурового и неподкупного NAT варианты с SSH клиентами и web-интерфейсами отпали сразу. Для небольших потребностей решение тоже должно быть простое, быстрое и, в качестве бонуса, надежное. Так что идея использования протокола одного из распространенных мессенджеров показалась мне весьма привлекательной. Под прицел попали Jabber, Telegram и WhatsApp.

Против Jabber сыграло нежелание устанавливать лишний клиент. Ну а так как Telegram — это, IMHO, тот же WhatsApp, только лучше и удобнее (и даже чуточку безопаснее), то именно на нём я и решил остановить свой выбор. К тому же появившаяся недавно в Telegram возможность создавать своих рабов ботов и взаимодействовать с ними с помощью очень простого API позволяет избавиться от необходимости регистрировать новый аккаунт, а так же дает некоторые очень полезные и удобные возможности.

На самом деле всё действительно настолько просто, что опытным человекам хватит и 30 минут, чтобы разобраться, поднять и настроить своего бота. Остальным же: Добро Пожаловать!
Читать дальше →
Total votes 21: ↑16 and ↓5+11
Comments9

Доступ к Skype API используя PHP на *nix системах

Reading time4 min
Views41K
Еще давно я хотел иметь свой автоответчик или бота для скайпа, называйте как вам угодно. В гугле я ничего найти не мог, да еще из-за того, что я пользуюсь Ubuntu, задача становилась сложнее в несколько раз. А если учесть, что я знаю только PHP, и то, не очень хорошо, моя мечта становилась нереальной.

Но недавно, просматривая официальную документацию по API скайпа, я обратил внимание на «D-BUS messaging», не знаю, почему я раньше не обращал на него внимание. Разобравшись со всем, я наконец сделал то, что давно хотел! Я получил доступ к Skype API на PHP. Об этом я и хочу рассказать в своей статье.

Читать дальше →
Total votes 113: ↑98 and ↓15+83
Comments23

Information

Rating
Does not participate
Registered
Activity