Pull to refresh
18
0
Алексей Волков @AIVolkov

Веб-разработчик

Send message

TemplateEngine.Docx — OpenSource .NET шаблонизатор docx документов

Reading time7 min
Views48K


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

Хочу поделиться нашим opensource-решением для генерации docx документов, которое позволяет заполнять документы по шаблону, оформление которого можно менять в Word без переписывания кода.

Для начала — немного вводных.

Что нам было нужно от шаблонизатора


  • Шаблон создается в Word и сразу видно, на что будет похож результирующий документ, шаблон без лишнего мусора.
  • Результирующий документ после скачивания содержит все необходимые данные, не подтягивая их с внешних источников.
  • Возможность заполнять списки, таблицы, и иногда еще и таблицы с вложенными в них списками.
  • Шаблон можно доверить секретарю клиента, чтобы он мог сменить логотип, реквизиты компании, или как-либо еще подкорректировать оформление. И все это уже после сдачи проекта, не модифицируя наш код.
Читать дальше →
Total votes 31: ↑31 and ↓0+31
Comments21

Хватит решать глобальные проблемы!

Reading time2 min
Views27K
«Хотели бы вы зарабатывать больше денег?», «Сложно ли нанимать людей?», «Завалены почтой?», «Хотите улучшить свое здоровье и форму?»

Конечно же, большинство людей ответит на эти вопросы «да». Это прописные истины. Глобальные проблемы. И они не решаемы.

В очень многих стартапах путают глобальное видение (big vision) и попытки решить вселенские проблемы. Глобальное видение важно. Необходимо ставить высокие, благородные цели, направленные на то, чтобы изменить мир. Но, если вы утверждаете, что решаете глобальные проблемы, вы, скорее всего, не понимаете проблем реальных.
Читать дальше →
Total votes 36: ↑25 and ↓11+14
Comments17

Умение воспользоваться идеей: как появляются новые продукты

Reading time4 min
Views26K
Идеи — повсюду. Пользуйтесь ими. Критиковать их и высмеивать — своеобразный «вид спорта» в сети. Сама же сеть, жаждущая инноваций и новых подходов, иногда вдруг вступает в полемику с твердолобым едким комментатором, пишущим совершенно не по делу. На деле же превращение идей в конкретные продукты — нечто поразительное и волшебное, это и есть сама суть продуктовой разработки.

Продукты рождаются из одних и тех же общедоступных идей, инструментов и даже навыков. Всего лишь пара шагов отделяет обыкновенные продукты от тех, которые становятся прорывом. Чтобы создать прорывной продукт, нужно овладевать новыми парадигмами; эти парадигмы необходимо обсуждать, спорить о них, но прежде всего ими нужно воспользоваться. Требуется смелость, чтобы поставить под вопрос существующие парадигмы и выдвинуть новые.
Читать дальше →
Total votes 21: ↑17 and ↓4+13
Comments1

Почему иногда не стоит изобретать велосипед

Reading time3 min
Views30K
В продолжение темы, почему иногда нужно делать свой велосипед, хочу дополнить и расширить эти мысли причинами, по которым этого делать не стоит.



Причина 1. Вы не знаете, как такие велосипеды устроены


Посмотрите внимательно на предыдущий топик. Генри Форд — с детства изучал технику. Его сестра как-то сказала, что в детстве любую игрушку старались спрятать от него, потому что он ее тотчас разберет на винтики. Работал инженером в «Электрической компании Эдисона», был совладельцем «Детройтской автомобильной компании». Он точно знал, что это такое — автомобиль. Он точно знал технические нюансы. Он точно знал, что черная краска сохнет два дня, а любая другая — две недели! Ну не из-за прихоти же он однажды сказал, что автомобиль будет только черным.

Игорь Сысоев, прежде чем делать свой nginx, уже имел «достаточно неплохой опыт работы с Apache — и как у системного администратора, и как у программиста».

Знаете ли вы, что вам предстоит на пути создания своего велосипеда? Или просто готовы окунуться с головой, не проверив глубину водоема?

Мы как-то по просьбе своего заказчика сделали реализацию почтовой рассылки, которая делала рассылку новостей зарегистрированным пользователям. И каково было удивление нашего заказчика, когда после первой такой рассылки его заблокировали как спаммера. Пришлось копать дальше, но в итоге оказалось, что гораздо проще интегрироваться с каким-нибудь MailChimp или UniSender и не изобретать велосипеда. Там не только все продумано, но есть еще и отчеты — сколько прочитало, сколько кликало по ссылкам, сколько нажали «отписаться от рассылки» и другие очень важные моменты, которые заказчик, попросивший «сделайте нам возможность разослать новости нашим пользователям», может захотеть сделать сразу же после реализации базового функционала.

Читать дальше →
Total votes 65: ↑51 and ↓14+37
Comments30

В поисках компромиссов: как угодить разным клиентам

Reading time13 min
Views2.8K
Учесть нужды разных клиентов в пределах одного продукта — невероятно сложная задача. С ней вы сталкиваетесь при выборе функций или способов реализации практически каждого продукта. Проектирование в меняющемся мире с меняющимися критериями успеха может оказаться нелегким делом, однако есть несколько творческих подходов, способных его облегчить.

Компромисс интересов клиентов


Недавно я имел опыт весьма удачного общения с CEO одной развивающейся компании (>150 разработчиков). При разработке своей линейки продуктов компания регулярно сталкивается с проблемой определения баланса функциональности — той, что необходима конечным потребителям, в противовес той, что важна IT-профессионалам. Этот вопрос наиболее актуален в развивающейся компании, когда ресурсы ограничены и очень важно завоевать своих первых платежеспособных клиентов.
Читать дальше →
Total votes 7: ↑1 and ↓6-5
Comments0

Как и чему учиться у конкурентов

Reading time7 min
Views31K
«Попался. Предатель. Ржунимагу». Как-то так реагируют люди, узнав, что у меня iPhone.
(автор — человек от Майкрософт — прим.перев.)
И вот стою я перед вами, уличенный в пользовании продуктом конкурента — и признаю себя виновным.

Но, если отложить в сторону блогеров с их постами в духе «попался», на деле есть реальные причины для того, чтобы пользоваться продуктами/сервисами помимо тех, что сделаны вами (или компанией, где вы когда-то работали). Можно написать хоть тысячу твитов, но, думаю, это всё равно все знают. Подход, применяемый во многих отраслях — недооценивать или даже чураться конкуренции — подробно описан и изучен, и выводы, к которым он приводит, говорят о том, что конкуренция это хорошо.

Способность учиться у конкурентов не только необходимо развить у всей команды разработчиков продукта, но она также может быть своего рода навыком, который имеет смысл оттачивать. Давайте в деталях рассмотрим всё, что касается использования продуктов конкурентов.
Читать дальше →
Total votes 26: ↑16 and ↓10+6
Comments1

Обучение через обмен наблюдениями

Reading time4 min
Views8.3K
В продолжении перевода первой статьи Стивена Синофски о продуктовой разработке — перевод его второй статьи, про важность обмена опытом в команде, разрабатывающей продукт.

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

В этом посте я делюсь некоторыми мыслями и опытом о том, как составлять отчет о поездках в контексте разработки продуктов.

Зачем делать отчеты о поездках?


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

Отчет, это всего-то — набор слов и материалов, это далеко не список дальнейших действий, поскольку их можно сформулировать лишь, собрав данные с разных точек зрения и обдумав все последствия. На самом деле, ошибочно при разработке продукта тотчас кидаться воплощать все соображения, которые кто-то «привез» из одной из командировок или же чью-либо личную точку зрения (и не важно, кто из команды написал этот отчет). Это всего лишь рассказ, и чтобы превратить его в конкретные шаги — смену плана или изменение состава возможностей — нужна отдельная работа.

Подходы


Не существует «правильного» способа составления отчета. Чаще всего его формат, структура и детали должны определяться тем, что это за событие: выстраиваете ли вы структуру по типам технологий или поставщику, по потребителям или темам потребителей, по сессиям конференции, по техническим подсистемам или как-то еще?
Читать дальше →
Total votes 3: ↑3 and ↓0+3
Comments0

Как технологии и общественные науки помогают планировать

Reading time10 min
Views15K
Не так давно Стивен Синофски (экс-вице-президент подразделения Windows в Microsoft) начал вести свой блог, в котором он делится мыслями о продуктах, продуктовой разработке и управлении.
Мы с любезного разрешения автора решили заняться переводом его статей. Представляем вашему вниманию перевод первой статьи из этой серии.


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

Примечание: Говоря «инженер», под этим мы подразумеваем все специализированные навыки, необходимые для создания продукта, включая разработку, тестирование, дизайн и прочее. Более того, под «продажами» или «маркетингом» мы имеем в виду все специализированные умения, которые требуются для передачи продукта клиентам и его поддержки — это целый спектр навыков и обязанностей, которые крайне важны. Независимо от того, сколько существует специализаций, границы между ролями всегда нечеткие — и это хорошо.

Естественное напряжение (sic!)


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

Но кому нужно это «организованное напряжение»? Даже когда вы просто делаете, то что должно, вам и без того хватает стресса — зачем добавлять новый, от которого к тому же никак нельзя будет избавиться?

Справиться с этим непросто. Конечно, можно отправить инженеров к потребителям или же заставить «продажников» сидеть на совещаниях по архитектуре, но это смешно и никак не влияет на указанные проблемы и обстоятельства каждой из сторон. На самом деле, простого решения нет, поскольку реальность основана на опыте, культуре, а иногда и временных рамках для разных членов команды разработчиков. Чем принимать естественное напряжение как нечто неизбежное, полагаться на байки или пытаться совместить ДНК команды, можно найти более верный подход.
Читать дальше →
Total votes 11: ↑9 and ↓2+7
Comments1

Проверки на пустые перечисления

Reading time2 min
Views11K
Недавно, во время разбора кода одной программы я заметил метод, который выглядел примерно так:

public void Foo<T>(IEnumerable<T> items)
{
 if(items == null || items.Count() == 0)
 {
  // Оповестить о пустом перечислении
 }
}



Метод принимает дженерик-перечисление и проверяет, пустое ли оно. Видите ли вы тут потенциальную проблему? Я намекну, проблема в этой строчке:

items.Count() == 0


И в чем же тут проблема? Проблема в том, что эта строчка может оказаться очень неэффективной.
Читать дальше →
Total votes 128: ↑91 and ↓37+54
Comments65

Information

Rating
Does not participate
Location
Челябинск, Челябинская обл., Россия
Date of birth
Registered
Activity