Блоггинг и электронная коммерция без сервер-сайд

За 7 лет я написал более сотни постов. Все посты выводятся на главной с разбиением по страницам, по 5 постов. Всего 32 страницы. Угадайте сколько человек добиралось до десятой ? Ни одного. Это значит, что две трети того, что я написал, можно найти только в гугле или яндексе. Позиции у блога в индексе не очень высокие. Значит примерно половина блога просто не существует.

Старые посты

Чтобы до старых постов можно было хоть как-то добраться придумали категории и теги. Один клик по тегу и подборка постов на эту тему под рукой, даже если посты написаны давным-давно.

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

Гораздо проще оказалось с категориями. В отличие от тегов, категория у поста одна, поэтому легко делать выборки и показывать другие посты из категории (виджет справа).

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

Рекомендации

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

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

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

Шаринг

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

Поиск и прием платежей

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

Автоматизировать бекенд магазиа можно с помощью zapier. Он умеет парсить сообщения электронной почты от яндекс-денег и реагировать на них.

Заключение

За две недели в свободное время я поднял блог со всей полезной функциональностью на Jekyll и GitHub. Работает он быстрее, чем blogger, и я могу полнностью контролировать разметку.

Если интересно как устроен блог - можно посмотреть исходники на github.



Встреча сообщества по SharePoint и Office 365

7 апреля 2016 года состоится встреча сообщества по SharePoint и Office 365. Будем обсуждать SharePoint 2016, который недавно стал RTM. На встрече расскажем про новые фичи, особенности миграции и апгрейда, project server и DSC. Встреча пройдет в Microsoft Technology Center на Лесной. Начало встречи в 18:30.

Доклады

Что нового в SharePoint 2016
Станислав Выщепан
В докладе я расскажу что нового появилось в SharePoint 2016 и как это полвияет на архитектуру решений. Посмотрим вживую на некоторые возможности их применение. Разберем фичи и баги новой версии.

Апгрейд и миграция на SharePoint 2016
Борис Журкин
В докладе я расскажу о своем опыте апгрейда c SharePoint 2013 до SharePoint 2016, и о миграции на Project Server 2016 с 2013. Посмотрим, какие баги и проблемы удалось обнаружить в процессе и как их обойти.

Project Server 2016
Дмитрий Волковский
Project Server – незаменимый инструмент в деле управления проектами. Он помогает планировать ресурсы, считать бюджет, управлять портфелем. Теперь Project Server стал частью SharePoint. В моём докладе мы посмотрим какой путь прошёл PS за эти 3 года, какие тенденции развития и какая выгода от Project Server.

SharePoint Desired State Configuration
Виталий Жуков
DSC (Desired State Configuration) - новая возможность PowerShell 4.0, которая позволяет задавать конфигурацию, отслеживать изменения и исправлять её, приводя к изначально заданной. В докладе разберем применение PowerShell Desired State Configuration для развертывания и управления фермой SharePoint.

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



Новый блог на Jekyll и GitHub Pages

Семь лет назад я выбрал blogger как платформу для блога, потому что он поддерживал Windows Live Writer и был бесплатным. Сейчас Live Writer уже не поддерживается, стал модным “отзывчивый” дизайн и язык разметки markdown. Пришло время что-то менять.

Блог должен быть быстрым

Когда пользовался blogger меня изрядно бесило, что страницы открываются по 4-5 секунд на компьютере. На планшете можно было скроллить страницу только секунд через 10 после открытия. Хотелось, чтобы блог открывался менее чем за секунду и ничего не мешало сразу его проскроллить. Нужен был движок в котором я смогу контролировать разметку.

Блог должен быть бесплатным

Я, как и любой человек, люблю халяву. Ставить свою CMS и платить за хостинг мне не хотелось, но все бесплатные платформы - крайне медленные. Отличный вариант - GitHub Pages. По сути это бесплатный хостинг, но без бекенда. Вместо бекенда можно использовать статический генератор сайтов - Jekyll.

Jekyll и GitHub Pages

Для программистов это известная последовательность действий. Надо закидывать файлы в репозиторий на github и они автоматически превращаются в посты блога. Jekyll сам собирает список постов и rss-ленту по шаблонам.

Посты можно писать в html, markdown и textile. Этот пост, например, написан в markdown. Для публикации фрагментов кода можно использовать github-flavored markdown, например так:

window.myappName$ = window.myappName$ 
                    || jQuery.noConflict(true);
                    
(function($) {
    if (!_spBodyOnLoadCalled) {
        _spBodyOnLoadFunctions.push(pageLoad);
    } else {
        pageLoad();
    }

    function pageLoad() {
        $('#pageTitle span').text('Hello from jQuery');
    }

    RegisterModuleInit(
            _spPageContextInfo.webServerRelativeUrl 
                + '/appname/script.js', 
            pageLoad);
})(window.myappName$);

Разметка генерируется на сервере и больше не нужны javascript-библтотеки для подсветки.

В итоге удалось добиться, что страница полностью отображается и работает менее, чем за секунду. Даже на мобильном телефоне.

Дизайн блога

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

Остановился на теме Clean Blog, которую нашел одной из первых. Для нее есть готовый Jekyll шаблон. Над темой пришлось пошаманить - добавить вторую колонку, сделать русские шрифты, переделать less в scss стили.

Только картинку в шапке из шаблона оставил без изменений.

Недостатки

GitHub Pages не поддерживает плагины для Jekyll, кроме небольшого набора. Из-за этого, например, нельзя сделать даты на русском яызке. Надо будет шаманить в JavaScript, это негативно скажется на скорости загрузки страницы.

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

Заключение

Если вам интересно как делать сайты без бекенда, то посмотрите курс на Pluralsight “Web Applications Without a Server”. Меня во многом вдохновил этот курс.



Итоги 2015 года

Предыстория

В середине 2014 года я бросил работать по найму и начал развивать свой бизнес по консалтингу и разработке программ. До конца 2014 года я работал один. Иногда аутсорсил небольшие проекты знакомым, где риск был минимален.
За полгода мне удалось заработать больше, чем работая “на дядю”. Но для этого пришлось много вкалывать. Пришло понимание, что такая деятельность плохо масштабируется и я начал искать людей.

 

Все хотят бизнес, но никто не хочет рисковать

Год назад я написал пост, в котором написал что ищу партнеров, которые смогли бы развивать бизнес вместе со мной.  Искал людей, которые будут разделять мои ценности (об этом ниже) и захотят развиваться как бизнесмены.
За неделю собрал 500 просмотров в блоге и еще неизвестно сколько через RSS и получил только 3 (три) отклика. Это удивило больше всего. На хабре и форумах постоянно все пишут, что не хотят работать “на дядю”, хотят свое дело и т.д.
На практике оказалось, что готовых рискнуть гораздо меньше. Никто не хочет покидать зону комфорта.

 

Ценности

Ниже список того, чего я придерживаюсь сам и требую от всех партнеров и сотрудников.

Win-Win

ИТ-шники не всегда разделяют эту позицию. Для них есть “мы” и “они” и если “они” выиграют, то “мы” проиграем. Из-за этого нет доверия между ИТ-шниками и клиентами.
Я всегда говорю: “Не бывает так, кто клиент хочет странного. Бывает так что ты чего-то не понимаешь”. Казалось бы просто – разбирайся в проблеме, управляй рисками заказчика, и доверие к тебе возрастет. А это означает, что ты будешь долго работать с клиентом и заработаешь достаточно денег, да еще тебя рекомендовать начнут.
Но не все так могут.

Профессионализм

Профессионалу платят деньги за решение проблем. Не за то, что он задет кучу ненужных вопросов, не за то, что он начинает перекладывать проблему на клиента, не за то, что “я работала, но не шмогла”.
В моей команде все люди разбираются. “Разбираются” это не состояние, а процесс. Даже если область совершенно новая, то находишь литературу, видео-уроки, задаешь вопросы, ковыряешь исходники. Делаешь что угодно, но проблему решаешь.
Обратная сторона профессионализма – ответственность за то, что ты делаешь. Если накосячил – исправь. Даже если ты не понял клиента – это твой косяк.

Хороший клиент – довольный клиент

Клиент может получить пользу от твоей работы, но не получить удовлетворения. Такое бывает чаще, чем кажется. ИТ-шники работают с компьютерами, а компьютеры эмоций не испытывают. Многие начинают с клиентами общаться как с компьютерами.
У меня так нельзя. С клиентом надо говорить на языке клиента, не спорить, не проявлять высокомерие, не считать тупее себя. Если клиент нервничает – позвони, выясни что не устраивает. Не можешь устранить причину – найди обходной вариант, который устроит всех.

 

Развитие бизнеса

Я нашел трех человек, которые начали работать со мной. Далее они нашли нескольких человек и мы смогли “прожевать” несколько крупных проектов. Команда составляет 7 человек, все работают part time. Двое из них - ключевые партнеры, которые находят проекты, продают проекты и управляют ими.
Проекты стали меньше, но их количество выросло. Стало сложнее продавать консалтинг и обучение.
Выручка за год составила 6,5 миллионов рублей, причем в декабре был рекорд – чуть более 2 млн. Бизнес вырос в 4 раза за год и это в кризис.
При этом я не потратил ни копейки на рекламу. Продаем через личные контакты, рекомендации знакомых и партнеров (компании с которыми я ранее сотрудничал).
С одной стороны это хорошо показывает силу личных связей, а с другой стороны серьезно ограничивает рост бизнеса. Но из меня никудышный маркетолог. Все мои знания о маркетинге ограничиваются курсом маркетинга МБА и парой книжек.

 

МБА

В университете я получил образование программиста и был крайне далек от бизнеса. Когда начал развивать свой бизнес мне не хватало знаний почти во всех областях.
Заработанные деньги я вложил в обучение и пошел учиться на программу МБА в ИБДА РАНХиГС.
На МБА обучают менеджеров крупных компаний, и сложно знания применить для малого бизнеса. Но я продаю крупным компаниям и стал гораздо лучше понимать процессы, которые там происходят, и где можно создать ценность.
А еще МБА учит считать деньги. Или, как моднее говорить, “управлять финансами”. Теперь я считаю варианты в Excel прежде чем принять решение.

 

Снова ищу партнера в команду

Под конец года я проанализировал бизнес и понял, что нужно инвестировать прибыль в маркетинг. Из меня маркетолог почти никакой, поэтому мне нужен партнер или даже наставник, который поможет мне привлекать новых клиентов.
Я ищу человека, который имеет опыт в интернет-маркетинге и в продвижении услуг в b2b, готов на себя взять маркетинг или помочь составить конкретный план по привлечению клиентов. Готов делиться частью выручки с каждого нового клиента, а в дальнейшем включить в состав учредителей.
Также буду рад продавцам с клиентской базой и специалистам по Microsoft Dynamics CRM с выходами на клиентов.
Если вам интересно или вы знаете людей, которым может быть интересно – пишите на stanislav.v@vnextsoft.ru.


SharePoint TypeScript теперь на github

SharePoint TypeScript - проект для описания типов TypeScript клиентской библиотеки SharePoint. Это не только JavaScript Object Model, но описания типов для Client-Side Rendering (CSR) - движка для рендеринга форм и представлений, а так всевозможных клиентских компонент.

Последние два года проект sptypescript развивался очень вяло. Я уделял ему мало времени, больше занимался бизнесом. Но на прошлой неделе мы с коллегами провели тренинг по разработке форм в SharePoint и нашли много точек роста.

Переезд на github

Проект раньше хостился на codeplex, который, к сожалению, растерял все сообщество. Даже Microsoft перевел свои разработки на github. Сообщество разработчиков на github гораздо больше. Поэтому проект переехал по адресу https://github.com/gandjustas/sptypescript

typescripttemplates.ts

Изначально это была библиотека, которая облегчает создания шаблонов для CSR. Со временем туда добавились готовые шаблоны полей, например filtered lookup, который позволяет фильтровать элементы в списке выбора lookup-поля. Библиотека обросла полезной функциональностью, которая может быть полезна при разработке собственных шаблонов.

Библиотека доступна в nuget:

PM> Install-Package typescripttemplates

Она автоматически поставит определения типов SharePoint.

Вы также можете добавить в проект определения типов отдельно, если не собираетесь кастомизировать формы и представления:

PM> Install-Package sharepoint.TypeScript.DefinitelyTyped

Поддержка современных средств веб-разработки

Набирает популярность стек современных средств разработки: Visual Studio Code (vscode), node, gulp, bower итд. В отличие от взрослой Visual Studio эти средства очень легковесные и кроссплатформенные. Я, например, периодически использую этот стек для разработки на планшете.

Если вы хотите использовать sptypescript в такой среде, то можете установить определения типов с помощью утилиты tsd:

tsd install sharepoint --save

Шаблоны для CSR можно поставить с помощью bower:

bower install typescripttemplates --save

Если вы все еще запускаете виртуальные машины с SharePoint и Visual Studio для написания клиентских скриптов, то рекомендую вам воспользоваться vscode.

Планы развития

В первую очередь мы планируем победить сложность разработки форм SharePoint, путем создания фреймворка для разработки форм на базе angularjs, не потеряв при этом функциональности SharePoint. В ближайшее время появится прототип. Подписывайтесь на обновления на github.

Вторая амбициозная цель - сделать на базе sptypescript полноценное руководство (guidance) по клиентской разработке в SharePoint. Сейчас готовятся статьи о том как быстро создавать и разворачивать клиентские приложения, как кастомизировать формы. Также в ближайшее время будут созданы генераторы в yeoman и, скорее всего, шаблоны для SideWaffle в Visual Studio.

Нам нужен ваш фидбек

Если у вас есть пожелания - пишите в https://github.com/gandjustas/sptypescript/issues. Подписывайтесь на обновления репозитария. Используйте определения и шаблоны CSR. И не стесняйтесь делать форки и отправлять pull requests.