Если нельзя, но очень хочется, то нужно обязательно и ничего в мире не стоит того, чтобы делать из этого проблему!


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

вторник, 31 декабря 2013 г.

Волшебный пендель

Общались с Другом недавно. Тема разговора - как начать делать свое дело. Оставлю, чё оговорили, тут...

1) Сядь и напиши список того, куда ты хочешь попасть, где ты сейчас и кто тебе в этом поможет. Напиши в стиле mind map.

 2) Сразу же решить все целиком не получится. Разбей большую задачу на серию мелких. Пусть у тебя на бумаге будет всего лишь 1% всего того, что предстоит сделать – этим и займись – задачи новые будут появляться по ходу делания. Никто и никогда не знает сразу, как получит то, что он хочет.

 3) Обсуди мечту с кем-то. Мечтай до тех пор, пока не увидишь/прочувствуешь мечту. Ты поймешь, когда это случилось – тебе тут же захочется бросить мечтания и начать действовать – сделать что-то из списка, незамедлительно.

4) Завтра = никогда. Сделай какой-то первый шаг уже сейчас, сегодня днем, сегодня вечером, но не «завтра утром», «с понедельника», «с 1 числа», «нового года»… Завтра = никогда!

5) Выбери дерзкую мечту. Мечту мечтать можно, она может быть любой по сложности. Не важно как туда попасть – дорога откроется идущему. Главное, что там можно побывать в своих мечтах. Мечтай в 10х-100х раз больше того, что сейчас у тебя есть (к чему ты по твоему готов). Хоть это и мечты – мозг не отличает их от того, что с тобой было в прошлом. Для него твои фантазии и то, что реально было – это одно и тоже. Это было. И дальше он будет действовать исходя из того, что это уже 1 раз было. Мечтание – это репетиции событий в будущем.

6) 10-15% на прогресса и тебя уже будет затягивать в пылесос твоего проекта. 0-15% - будет отталкивать от него. Готовься каждый день делать что-нибудь через не могу/не хочу/нафиг надо. Чуть позже придет привычка, мечта будет притягивать сильнее, а друзья будут спрашивать «ну что как там?» - это все будет везти к целям.

7) Говори с людьми вокруг о том, что ты делаешь – все должны знать твою новую роль. Так они смогут помочь тебе. Их друзья смогут помочь тебе. Друзья их друзей. Сарафанное радио работает. Не сразу, но со временем.

8) Деньги и время, которые ты вкладываешь в проект свой – забудь, что ты должен отбить. Ты покупаешь знания того, что не надо было делать/покупать и новые возможности сделать еще больше ошибок. Успех – это 99.9% ошибки и нерабочие алгоритмы, и только несколько успешных прибыльных схем. Зная только успешные схемы ты не станешь успешным – ошибки в мелочах, которых ты не совершил, будут мешать. Твоя задача – как можно больше разных ошибок! В это ты вкладываешь деньги и время. Их не отбить. Пока

9) «Я понимаю, что это сейчас не возможно! Но как мне это сделать?» Как можно больше вопросов оставляй без ответа. Вопросы без ответа – это хорошо. Ответ будет найден позже – через день, неделю, месяц, год…. Ты не можешь всего знать. Войди в роль вечного студента – учись каждый день. Задавай себе неудобные вопросы, вопросы на которые у тебя нет ответа. И оставляй так. На время.

10) «У меня этого нет…. Пока нет» Вставляй слово «пока» везде, где ущемляешь свой потенциал. «Пока» говорит о том, что завтра вероятно у тебя это появится. После этого легче задать вопрос «а как у меня это появится?». Все что ты говоришь сейчас – это команды мозгу действовать или бездействовать. «У меня получится» / «у меня не получится» - в любом случае ты окажешься прав. Лучше уж сказать «у меня пока это не получается». Чувствуешь разницу?

11) Меняй круг общения. Ищи тех, кто уже преуспел. Будь рядом с ними. Подглядывай за тем, как они делают свой успех возможным. Слушай тех, кто поддерживает твои начинания. А критиков слушай только для того, чтобы узнать «почему у них не получилось». Вероятно, с этим предстоит столкнуться и тебе.

12) Большая часть потенциально успешных проектов загибается на стадии идеи. Просто Автор перегорел. Чтобы этого не случилось с тобой – оставляй материальные наработки, которые не позволят тебе остановиться завтра. Для проггеров, например - пост в блог, исходный код на гитхабе, выступление на конференции.

13) Нет конкуренции. Даже если твою идею украли – это открывает новые возможности. Какие? Ищи ответы на вопрос, как это может быть одновременно полезно и мне и моему «конкуренту»? Любой ответ на этот вопрос делает из конкурента – компаньона. Это win-win решение. Спрашивай себя КАК это возможно?

14) Задавай себе больше открытых вопросов: Сколько…? Как…? С кем….? Когда….? Где….? У кого….? Вопрос считается открытым, если подразумевает в качестве ответа больше чем банальные «да»/«нет»/«нинаю». Не ограничивай себя количеством ответов – один-два это крайне мало. «Каким еще образом можно добиться этого?» Давай мозгу задачи регулярно – только получил какой-то ответ на вопрос, пока проверяешь его на практике – пусть мозг подумает над другими вариантами. Пусть вопросы остаются без ответов. Это хорошо. Это тренирует его. Если мозг молчит в ответ на вопрос – он не отморозился, он продолжает думать. Получение ответа нельзя запланировать, как говорится «самые умные идеи приходят в душе» - в момент, когда ты расслабишься и не будешь думать над проектом.

15) Как то, что ты сейчас делаешь/думаешь помогает твоему проекту? Относись критически к тому, как ты проводишь время, какие мысли думаешь, с какими людьми общаешься. Как они тебя везут к твоим целям? Стоило тратить эмоции и ругаться с вахтершей в подъезде? Стоило ли яро обсуждать как политики не правы? Это все поможет? Делай только то, что поможет стать ближе к твоим целям. Ищи комбинации и формулировки, при которых то, что ты вынужден делать – тебя везет. Если это не случилось – перестань немедленно! Займись другим!!

 16) Найди напарника. С ним вместе вы можете обсудить идеи. С ним вы можете порадоваться успеху. Ему ты можешь пообещать сделать что-либо в срок. Он может задавать тебе неудобные (но крайне необходимые) вопросы. Он может тебя по-дружески покритиковать. Он может взять на себя часть забот по проекту. То же ты сделаешь для него. Там где двое – там не страшно. Три – много. Один – мало. Два – самое оно.

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

18) То что ты делаешь должно быть полезно миру. Это да. Но важно, чтобы это было интересно тебе. То чем ты занимаешься должно тебя вдохновлять. Так больше шансов преуспеть. Если на выходных ты не хочешь думать о работе, если тебе неприятно это делать в отпуске – ты занят не тем. Домешивай в работу хобби. Превращай хобби в работу. Не разделяй их. На все уходит твое время. А оно в отличие от денег - ограничено. 

19) Для старта вовсе не обязательно иметь 100 000$ денег и офис. Все вокруг думают, что надо стартовый капитал - это их сдерживает. Не получишь ты денег до тех пор, пока не поймешь зачем именно они тебе нужны. Опиши все расходы, составь план. Представь что у тебя уже есть 100 000$, что ты с ними делаешь? Вот прям так сразу офис пойдешь арендовать? А может стоит купить мобильник с двумя симками? Обвешать район объявлениями? Не все то надо делать, что в голове сидит. Сколько тебе надо денег? На что ты их потратишь? Подсчитай и удивись, что тебе на самом деле надо не 100 000$ для старта.

20) Помни правило Парето. Большую часть той фигни, что ты делаешь можно перестать делать без вреда конечному результату. Большую - значит 60%-90%. На секундучку поверь, что это так. От чего ты бы отказался в первую очередь? Магия этого закона в том, что провернув его один раз и выкинув 80% пустых задач из своего ТУДУ, ты можешь повторить то же с оставшимися 20%. И так до бесконечности. Не веришь? Сколько домов ты построишь за 5 лет? А есть люди, управляющие проектами по застройке мегасооружений, как например этот. И ты так можешь, постоянно оптимизируя то, как делаешь свою работу. Перестань делать что-то лишнее уже сегодня.

суббота, 21 декабря 2013 г.

Codenjoy или загадка на новый год!

Что год текущий принес? Codenjoy. Это наверное самое ценное. Плюс вера в то, что смогу. Как пока не ясно, но смогу. Помог в этом фильм Indie Game. За что ему спасибо! 

Итак по очереди. Codenjoy возник на пересечении нашей с Сергеем треннинговой деятельности с желанием сделать что-то новое. Мы готовили тренинг по ТДД и проводили всевозможные ивенты. Позже появилась идея внести в тренинг игру. Был создан tetris codenjoy, провели первую встречу. Было это чуть больше года назад. Понравилось!


С тех пор tetris codenjoy проводился еще раз 8. Потом раза три snake codenjoy, который появился одной бессонной ночью т.к. был бесхозный код консольной версии змейки, который я написал в ночь после мастеркласса во Львове. Созревала мысль о бомбере, движок которого был дописан до HotCode конференции. После провели еще 7 bomberman codenjoy. Дальше допилился код трейни Алексея во время прохождения им j2se тренинга и вышел в свет minesweeper codenjoy. В него играли в Минске на Ruby и в Киеве на Agilee конференцииях. Следующая игра по заявкам играющих - battleсity. Играли пока всего 1 раз. В процессе разработки loderunner - официально еще не играли. О всех новинках тут же постим в группу на Facebook. Как говорится - следите за новостями.


Еще один факт в пользу формата CodingDojo от которого, можно сказать, наследуется codenjoy - данным форматом заинтересовался один из участников codenjoy Константин, что привело к созданию им Holder Pocker Dojo.

Если копнуть историю, то формат Coding Dojo привезли на Украину. Его привозит к нам Johannes Brodwall во время его визита в Киев на конференцию XP Days. В тот день Сергею удалось покодить с Johannes в паре решая задачку Primes Factor. Кроме интересной Primes Factor мы получили на руки инструмент Coding Dojo и так же провели его в GlobalLogic. После этого появился Automated Testing Dojo для автоматизаторов-тестировщиков. И спасибо Мише Полярушу и Андрею Дзыне за поддержку, а так же Глебу Рыбалко и  Вике Мусияченко за предложение "а придумайте чего-нибудь для автоматизаторов на конфу". Придумали.


Если говорить про фидбек. Его было много. Его было необычно много. Практически 100% позитивный фидбек. Нет, конечно же были ляпы и нам на них указывали, но "позитивным" я считаю фидбек отставленный, фидбек подробный. Кто проводит конференции знает, что собрать фидбек у ребят не так то и просто. У нас с Сергеем было так же на наших тренингах/докладах - 15-20% остальные просто леньки/нечего сказать. А тут почти каждый участник писал и писал не 1-2 слова, а абзацами! Ухтышка. Мы что-то нарыли.


Ближе к концу года наши старания увидел GlobalLogic и с тех пор мы проводим ивенты в основном на площадке GlobalLogic CodeLabs. Если раньше мы ездили по разными компаниям, то сейчас физически не успеваем, а потому проще по скайпу передать экспертизу по сетапу ивента лиду юзергруппы. Что мы с удовольствием и делаем. 

Так недавно, 23 ноября в Минске на Belarus Ruby on Rails User Group при поддержке Sergey Sergyenko впервые состоялся minesweeper codenjoy. 12 человек, пока проходили доклады на main сцене, уединились на диванчиках, чтобы заставить своего сапера обходить мины, усеянные по виртуальному полю. До этого ребята проводили несколько раз tetris codenjoy. Спасибо Сергею за интерес!


Так же недавно стало известно, что ребята из другой юзергруппы играли в tetris codenjoy незадолго после игры при поддержке XP Days Urkaine. Это приятно! Значит то, что делаем - делаем не зря. Codenjoy по сарафанному радио набирает оборотов. Со своей стороны мы стараемся, чтобы новые игры появлялись регулярно, а так же можно было играть онлайн. Раньше мы как организаторы были ботлнеком, но сейчас играть можно и без участия нас. 


Если вдруг захочется провести codenjoy у себя - сделать это просто. Вот мой скайп alexander.baglay. Пиши - расскажу о технических нюансах. Если вдруг захочется помочь проекту - так же пиши. В любом случае вот то, с чего стоит начать - написать свою игрульку. А так как проект с открытым кодом и лежит на github - сделать это можно отправив нам свой pull request. 


Что еще было? А был еще конкурс IT-Kharkiv на котором было несколько этапов отбора. И совсем неожиданно codenjoy попал в финал и занял второе место. 


Что так увлекает людей?  Ответ есть - геймификация. Дети любят играть, но дети взрослеют.  И все же любой взрослый в душе остается ребенком, а потому любит играть. И будет играть, если поверит, что ему за это ничего не будет :) В связи с этим стал разрабатывать еще один проект, который был временно назван java-quest. О нем впервые я упомянул на java.io2 конференции  


Игрульку можно потестить на портале codenjoy.com. Цель ее автоматизировать java se тренинг дав при этом инструмент учащемуся, на котором он сможет отрабатывать свои навыки. Подобных подборок головоломок в сети есть множество, например http://codingbat.com, но мне как всегда есть что сказать и это "что" отличается от того, что есть на просторах сети. Потому-то и пишу свое. Идея родилась еще два года назад, когда я понял, что постоянно рассказывать студентам одно и то же по j2se тренингу - ужасная рутина. Ну а первую строчку кода написал в этом году, после того как несколько вечеров понастальгировал в старый добрый Diablo2. Я играл и думал - а что, если для убийства монстра надо будет закодить задачку? И понеслась...


Эти все активности заставляют думать о том, как в новом году делать это еще больше, еще качественее, еще масштабнее. Если раньше codenjoy был проектом выходного дня, то теперь хочется, как я метафорически выразился на одном из докладов - купить одного java dev. Естественно деньги для этого не должны вычитаться из семейного баджета, а потому надо искать пути, как зарабатывать на этом весьма отличном от нуля интересе к проекту. Зарабатывать на более стремительное развитие проекта. Зарабатывать так, чтобы оно оставалось бесплатным для комьюнити.


Сегодня у меня есть еще 2 часа до сна. И первый шаг, который я сделаю - прикручу кнопку donate на главной страничке игры. Всегда хотел это сделать. И если тебе нравится то, что мы делаем - ты можешь помочь проекту выбрав любую сумму на этой форме

с пожеланием
Спасибо!

Эксперименты со сном



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

Когда-то давно я пробовал вставать рано утром. Ложился спатьв 21-22, чтобы гарантированно проснуться в 5 утра. Это работало, пока я себя контроллировал. Привычка за 40 дней не сформировалась и все поломалось так быстро, как только, я перестал контролировать процесс. Что еще мешало этому? Мешало то, что с друзьями вечером не погулять – 20:00 пора домой, 21:00 пора думать о сне. Мешало то, что если встать в 5 утра, то потом очень сильно захочется в обед спать и если дать себе это сделать (ну полчасика или часик), то к 22 просто не захочется спать. Не захочется в 22 не проснешься в 5. Схема ломается. Надо дисциплинить себя. Не люблю через НАДО. Сокочил. 


Вместе с тем время около 4-5 утра – оставалось самым желанным и креативным временем в сутках. Концентрация, продуктивность, креативность зашкаливает по всем показателям. Свобода эфира – нет тебе никаких писем в почте, никаких скайп сообщений, постов в соцсетях, никаких мобильников – все спят. А я творю! «Ну и что же?! – можно выключить интернет и спокойно поработать не отвлекаясь и днем». Да можно. Но днем где бы я ни был – чувствуется суета людей вокруг. Через стены. Через бетон. Через провода. Через тот самый эфир. Особенно в большом городе. А ночью необъяснимо тихо и спокойно. Спокойно внутри. Спокойно снаружи. Время как остановилось. Это сродни медитации. 
 

Далее был полифазный сон, который (вернее его неправильное использование) меня утомил и довел организм до больничного. Отчебучил по-полной. 4 часа бодрствовал. 1-2 часа сон. Для меня не было целью сократить количество часов сна, а лишь измененное сознание и сопутствующий креатив и продуктивность. И так в одних сутках помещалось по ощущениям 4 сутки. За неделю (по тем же ощущениям) проходил месяц. Просыпаясь, я знал, что есть всего лишь 4 часа на то, чтобы сделать что-то полезное. Сделать что-то одно. Все в сторону – только самое важное. И это работало! Концентрация выше некуда. 4 часа как раз тот отсек времени, чтобы довести что-то качественно до коммита. Это работало. Но ни в коем случае нельзя было прерывать ритм 4+2. Да и не получалось особо – ближе к границе 4х часов бодроствования очень хотелось спать. Это превращало меня в несоциальное нечто. Я не знал что вокруг - день или ночь. Полный рассинхрон с семьей. Но работа кипела. Через неделю-две стал ломать схему 4/2 и организм предложил мне отлежаться на больничном – долго я не сопротивлялся. Теперь знаю, что если надо сделать огромный кусок работы в минимальное время – у меня есть инструмент. 4 часа работы/2 часа сна. Но только на коротких отрезках и лучше где-то в отчуждении. Есть разные режимы полифазного сна и рекомендации. Лучше прислушиваться к тем, у кого получилось. 


Идем дальше. Были и классические совьи бодрстования. Не сплю ночью пока не спится (до 3-4- утра), а потом сплю сколько надо. Хорошо, но креатив не тот. Ночью организм физически более истощен, чем утром/днем.  Ну и потом сплю не 7-8 часов, а 10. Ну, это если не мучить себя будильником, чего вообще не рекомендую делать, поскольку будильник рубит всегда не вовремя – посреди не той фазы сна и просыпаешься побитым. Есть специальные будильники, которые следят за сном – побовал, хорошая штука. Но собственный мозг более крутое устройство. Часто бывает - перед сном говорю себе «мы проснемся вовремя, отдохнувшими и готовыми к новому дню» и просыпаюсь за 2-3-5-7 минут до звонка установленного будильника, причем не важно, сколько нужно было спать 2-4-7-8 часов – в мозгу есть некий неосознанный таймер. Так что все будильники в сторону. Договариваемся со своим мозгом перед сном. А еще лучше следить за биоритмами и просыпаться тогда, когда просыпается.


Так я выследил, что если ложусь спать в 16-22 вечера, то сплю где-то 4 часа. После просыпаюсь в 20 вечер-2 утра свеженьким, отдохнувшим как раз к началу ночного креатива. Так я могу работать еще до 4-8 часов, а там второй сон еще часов на 4-5. Пока (если не напрягаться) чаще всего получается именно так. Недостатков видимых нет. Ну, разве что светлый день иногда начинается в 13:00. Конечно же, четкого режима нет (ибо не заставляю себя), иногда на час-два раньше иногда на час-два позже. Но плюс минус схема такая, чтобы вечером выспаться и если проснуться ночью – то уже не ложиться спать и бодрствовать до тех пор, пока не захочется заснуть. И да, это начнет получаться, если накануне выспаться хорошо, отдав весь долг организму. Выспаться до ломоты в суставах. Если я сплю всю ночь как убитый, значит, я где-то задолжал. Первый шаг – выкинуть нафиг будильник и дать себе выспаться до обеда следующего дня и так пока не отпустит. А отпустит, по-моему, тогда, когда среди ночи вдруг проснешься с ощущениями – а я выспался уже. 

 
Вот прямо сейчас 00:43 и я поспал 4 часа накануне до 23. Спать ложиться планирую в ~5-6 утра потому как в 10 вставать, а в 12 начинается тренинг. Чувствую себя превосходно бодрячком. Спать не хочется абсолютно. Вот написал пост в блог и собираюсь покодить. 

Но это может быть опасным для здоровья, говорят критики. 

понедельник, 9 декабря 2013 г.

Как наложить на видео субтитры

Вот только что возникла задача такая. Если она возникла раз - значит возникнет еще раз. Стоит задокументировать.

Пользоваться буду, как положено, AviSynth. Так же понадобится плагин VsFilter. Вот подробное описание того, как он работает. Для удобства возьмем Srt формат субтитров.

Плагин - это VSFilter.dll, что в архиве в папке Release Unicode. Его надо распаковать в папку C:\Program Files\AviSynth 2.5\plugins

Далее берем видеофайл, пусть source.mov и рядом с ним создаем файл subtitle.srt c содержимым
1
00:00:01,000 --> 00:00:05,000
Senator, we're making
our final approach into Coruscant.

2
00:00:05,000 --> 00:00:10,000
Very good, Lieutenant.>
Дальше создаем файл output.avs с содержимым
DirectShowSource("source.mov")
TextSub("subtitle.srt")
Далее открываем файл output.avs В любом видеоредакторе для дальнейшего перекодирования.

Вот и вся магия. Сэмпл можно скачать тут.

вторник, 12 ноября 2013 г.

Как наложить на видео слайды с помощью AviSynth

Сегодня выступал в НАУ с докладом для студентов. Был приятно удивлен встрече с Антоном. Антон так же готовил свой доклад для студентов. Его доклад полезен будет не только для студентов НАУ, а вообще. Потому я его снял на камеру и сегодня же вечерком аккуратненько смонтировал.

Монтировал необычным для себя путем. Способ мне понравился, а потому опишу его туточки. Видео, уверен, Антон выложит на youtube (будет чуть позже). А пока главный ответ на вопрос - как наложить на видяшку, серию слайдов из презентации, причем чтобы те переключались вовремя. Очень просто.

# грузим в переменную v два подряд идущих видеофайла DSC_0877.MOV и DSC_0878.MOV (они склеятся) 
v = DirectShowSource("DSC_0877.MOV")+DirectShowSource("DSC_0878.MOV") 

# ресайзим видео до размера слайдов, сразу после добавляем сверху от 
# видео бордер такой же высоты как и видео. 
# Там пока все черненько будет - мы расположим там слайды
# результат запишем в ту же переменную v 
v = v.LanczosResize(960,540).AddBorders(0, 540, 0, 0, $000000)

# загрузим первый слайд в переменную slide1 сделав из него видеоряд с частотой 23.976 (та же что и у видео) и длинной 1389 кадров
i=ImageSource("Slide1.png", fps=23.976, end=1389)

# так же для второго слайда
i = i + ImageSource("Slide2.png", fps=23.976, end=8181)

i = i + ImageSource("Slide3.png", fps=23.976, end=5863)

i = i + ImageSource("Slide4.png", fps=23.976, end=9130)

i = i + ImageSource("Slide5.png", fps=23.976, end=7726)

i = i + ImageSource("Slide6.png", fps=23.976, end=4545)

i = i + ImageSource("Slide7.png", fps=23.976, end=673)

# и в конце концов смерджим два потока
Overlay(v, i, mode="blend", opacity=1)

Вау?! И что это за заклинание такое? Это скрипт AviSynth. Не так давно я показывал, как с ее помощью открыть любой файл в VirtualDub. На самом деле тула намного более мощная.

Вот как выглядела папочка с исходниками


 А так выглядел avs скрипт загруженный в VirtualDub (и Антон :) )


Дальше дело техники - выставить аудио/видео кодек и сохранить как avi. Положение кадров я определял задра просматривая видеоролик в поисках характерных кликов Антоном своего презентора. Лучше, конечно, снимать как-то так, чтобы был виден хоть краюшек проектора. 


Кстати, можно было с легкостью сделать как-то так (это фича фильтра Overlay)



Еще раз повторюсь AviSynth очень мощная тулза, позволяющая кстати автоматизировать много чё. Этот вопрос более чем реализовал Стас Фомин в своем SeminarAssembler. Кстати там это все делается уже, я в целях изучения просто еще одно колесо изобрел.  

Успехов!

Спасибо Антону, Стасу, НАУ, AviSynth, VirtualDub, Nikon, Google, HP и всем тем ребятам, с помощью которых этот пост случился.

воскресенье, 10 ноября 2013 г.

TDD это не тесты писать...

TDD - это способ мышления. А тесты обычно - это в контексте разработки кодерами своих модулей. А в жизни много всего, что можно потестить. Везде где есть действие/процесс...

Если ТДД въелся в голову то будет приблизительно так как у меня только что. Пишу в письме коллеге - "... там находится то, что ты просила...", а в голове вопрос цензора "а как проверить?". Та блин! Я жеж не кодю сейчас. Тихо сиди там!!

Ладно иду еще раз перепроверять...

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

Так что не надо тебе ТДД. Меньше знаешь - крепче спишь.

среда, 6 ноября 2013 г.

Когда-нибудь человек перенесет свое сознание в сеть


Люди уже сейчас там... У каждого в руке по мобильнику. Дома по компьютеру. Виртуальные игрушки, социальные сети - там выглядишь привлекательнее, чем мы есть сейчас. А почему это важно, больше казаться, чем быть? Может в детстве недолюбили... Не научили справляться с каждодневным потоком мыслей... А кто научит? Учитель? У его все так же. У всех вокруг так же. Но хватит о себе :)

В реальном мире все же есть красивые места. Очень много красивых мест. Бяка другая - туда далеко идти. Чтобы туда пойти нужны ресурсы - время, знакомства, деньги. Вот вчера я ехал на встречу, было солнечно. Ехал я в район в котором было любопытно погулять. Ехал и думал - отмичусь и прогуляюсь часик. Но пока доехал, солнышко спряталось, тучки напряглись и все - уже не так красиво... А в мире виртуальном - всегда солнечно и ясно, туда надо лишь нырнуть, открыв ноут и запустив какой-то там exe файл...

Интересно, что будет лет через 100? Будет ли матрица? Будут ли люди, полностью погруженные в красивый сон? Будут ли в том мире проблемы? Думаю будут. Осознание наличие проблем - это свойства этого сознания. С ним что-то прийдется сделать...

вторник, 5 ноября 2013 г.

Как повешать блогспот на новый домен

Купил apofig.com решил пошаманить и сделать так, чтобы от apofig.blogspot.com не осталось и следа. То есть чтобы при клике на http://apofig.blogspot.com/blabla.html я переходил на  http://www.apofig.com/blabla.html а там был мой блог и все линки внутри него были бы на новый домен.

Сводится это к трем действиям (после покупки домена). Настроить блоггер на новый домен (делается это в настройках блога). Тут важно указать www.mydomain.com и поставить галочку.

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


Шаг второй - надо прописать эти проперти в настройках домена. Вероятно потребуетсч подождать 1-2 сутки пока обновится. А может повезет и сразу...


И шаг третий - указать прямой редирект с apofig.com на www.apofig.com. Вот и все.





суббота, 2 ноября 2013 г.

Делаем видео панораму

На простых фото панорамах (в том числе сферических) я уже сгрыз все локти.


И вот сутра собирая материал для очередной, пришла идея - а что, если смонтировать видео панораму? Но как? А ХЗ, но точно знаю одно - без сырцов никаких панорам не будет, потому снял 5 видеороликов секунд по 30.

Снимал точно так же как и для фото-панорам - кадры должны перекрываться % на 30, чтобы программа могла найти на них общие точки и смерджить. После поспешил домой, дабы поэксериментировать.

Первым делом полез в гугл и нашел там статью, в которой это самое "КАК?" расписано по самое не могу.  Суть вкратце в том, чтобы сделать видеопанораму надо разобрать ее на серию кадров (каждый кадр, как отдельная фотка), склеить первые кадры из всех видеороликов и создать на основе этого проекта темплейт, по которому прогнать все остальные кадры. После полученные панорамы конвернуть в видео с исходной частотой.  Ну что, цель видна! Вперед.

Исходный материалом будет 5 видеороликов продолжительностью около 20 секунд. Снимал на Nikon, потому формат MOV. Я точно помню, что VirtualDub Mod умеет разбивать видео на кадры и чтобы его подружить с MOV форматом я воспользовался этим советом. Итого у меня получилось как-то так


Каждый видеофайл (avs) по очереди я перегнал в серию bmp изображений и разместил их в отдельных папках. Поехали!

Открываю первый файл в VirtualDub Mod и выбираю на нем интервал, который мне больше всего нравится. Ползунком (1) выбирается положения начала, после чего кликается кнопка (2), затем выбирается конец фрагмента и нажимается кнопавка (3).


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

Во втором и следующих видео (чуть позже) я буду выбирать диапазон отталкиваясь от того, что я выбрал на первом - так как съемка велась не синхронно с 5 камер, а последовательно с 1, то надо совместить периодичность того, что меняется (у нас это волны) на всех 5 выборках. Конечно же мне не удастся найти 5 одинаковых момента, но все же можно найти приблизительно похожие колебания.


После того как я определился с диапазоном я удаляю все, что было до него и после него. Делается это так. Ctrl-X, Ctrl-A, Del, Ctrl-V.

Кстати, на картинке выше можно увидеть насколько перекрываются разные ракурсы.

После того, как в окно VirtualDub Mod перетащил первый аvs файл, выбрал меню File -> Save image sequence... (1) после в диалоге добавил к расширению файла суффикс _N (2), где N - номер видеоролика по порядку. Это надо сделать - так как формат, который кушает следующая программа - [номер кадра]_[номер камеры].[расширение]. Дальше указал папку (3) (для удобства я пока все кадры одной камеры/ракурса сохраняю в отдельную папку). Выбрал bmp (4) как формат без потерь (осторожно в результате на винте будет очень много места скушано). Поставил галку (5), что значит что я сейчас не хочу процессить эту задачу, а добавлю ее в список ожидания. Аминь! (6) Затем перетягиваю в окно программы следующий avs файл и проделываю то же самое, только теперь N=2 и результирующая папка тоже другая.


В результате появилось 5 новых папок, по одной на каждый видеоролик. В каждый папке большое число изображений формата bmp (и каждая весит около 2Gb на 15 секунд видео).


После того, как я опроцессил все видяшки, я удаляю лишнее. Например в первом ролике у меня 16 секунд видео и 390 кадров. Значит в остальных папках можно смело удалять все файлы с номером от 391 и выше.  

Следующие грабли, которые я попытаюсь исправить - это то что я снимал с рук, а не со штатива. Дело в том, что с рук камера немного ходит туда сюда, а качания камеры не синхронны - это сильно испортит результирующую картинку. Значит вывод №1 - снимать сырцы только со штатива. Если это сделать, то следующий этап можно пропустить.

А выравнивать кадры будем вот так. Понадобится нам программа PTGui в нее загружаем все 390 кадров из первой папки (путем выделения и перетаскивание файлов в окно программы). Есть один нюанс, не позволяющий нам перетаскивать сразу все файлы - их порядок нарушится внутри программы. Потому перетаскиваем вначале файлы с номерами 0-9, потом 10-99 а потом 100-999 и так далее 1000-9999 (для продолжительного видео).

При перетаскивании выскочит диалоговое окно (просто в bmp раскадровке нет информации о линзах фотоаппарата, а потому надо ему помочь) - нажимаем Normal Lens (1) дальше в самой программе жмем Align Images (2) и ждем, пока обработаются все фотки серии.


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


Может случиться глюк и кадры выравняются как-то не так. Потому после зайдем в Panorama eitor (1) и убедимся, что все кадры наложились один на другой (2).

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

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


Так же очень важно, что границу надо опускать немного ниже (5) видимой границы кадра, потому как за ней может быть другой кадр, который чуть ниже размещен (из за того же качания камеры при съемке). Проверить это можно просто прокликивая разные кадры на всем диапазоне (1-390). Если в каком-то видно что в пределах границы появилась шахматка - границу надо опустить....

Вот например у меня на 87 кадре (1) такое случилось (2) и я опустил чуть ниже шахматки желтую границу (3). Самое обидное тут то, что чем дольше снимаешь с рук - тем сильнее уползает камера.



Далее на вкладке Project Assistant (1) нажимаем Advenced (2)



После  на вкладке Create Panorama (1) выбираем размер панорамы максимлаьный (2), указываем, что хотим в результате получить все слои (3) указываем папку, в которую поместим результат (4) и создаем панораму (5).



После в папке ...\1\pan\ появится множество jpeg файлов. Теперь можно удалять исходные bmp - они нам больше не понадобятся.

Ту же процедуру стоит проделать и с другими bmp из других ракурсов.  

Теперь можно заняться поклейкой кадров ракурсов в серию панорам. Подробней об этом.

Для начала в каждой папке с jpeg кадрами ракурса я сделал несложное переименовывание всех файлов в общий формат. Делается это с помощью простого bat-ничка (текстовый файл с расширением bat) с содержимым
rename *.jpg ?????_1.jpg
Это у нас будет первый ракурс. bat для второго ракурса будет
rename *.jpg ?????_2.jpg
И так далее... После выполнения bat файла все файлы переименуются как-то так и порядок их будет строго в порядке увеличения номера кадра.

 
Вслед за этим сливаем все кадры-ракурсы в одну папку.


И первую серию 00000_1 ... 00000_5 отправляем в PT Gui. Там выбираем Normal Lens (1), кликаем Ok (2) и клеим панорамку (3)


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


Дальше нам стоит отправиться на последнюю вкладку PT Gui и там настроить все как на картинке


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


Имя стоит выбрать template.pts

После этого потребуется джарник, который я написал для этих целей (есть возможность воспользоваться встроенным в PTGui батчером, но у меня были с ним проблемы и я написал свой). Конечно же для работы с ним понадобится установить java.
Команда выполняется так 'java -jar batch-builder.jar [1] [2] [3] [4] [5]', где:
[1] - Номер первого кадра панорамы (обычно 0)
[2] - Номер последнего кадра панорамы
[3] - Номер первой камеры/ракурса (обычно 1). Все последующие рассчитываются в зависимости от количества кадров в одной панораме.
[4] - (опционально) Имя файла сохраненного проекта pts (по умолчанию 'template.pts')
[5] - (опционально) Формат имен файлов кадров (по умолчанию '%image_%camera.bmp',
                    где %image = задает позицию номера кадра, а %camera - позицию номера ракурса')
[6] - (опционально) задает количество символов в части имени %image.
                    Если параметр равен 0 или не указан, то сичтается что исходные изображения будут называться
                        1_1.bmp, 2_1.bmp, 3_1.bmp ... 10_1.bmp ... 100_1.bmp
                    Если параметр равен, например 6, то ожидается работа с исходными изображениями в формате
                        000001_1.bmp, 00002_1.bmp, 000003_1.bmp ... 000010_1.bmp ... 000100_1.bmp
Итого выполняем команду
D:\pan>java -jar batch-builder.jar 0 390 1 template.pts %image_%camera.jpg 5
Процессинг кадров с номерами [0-2] от для камер начиная с номера 1,
файл шаблона - 'template.pts', формат кадров '%image_%camera.jpg', для номеров кадров включено дополнение до длинны 5.
Обработка началась!
Количество камер в темплейте - 5
Обработка прошла успешно!
В результате в исходной папке появятся так же и файлики от 0_panorama.pts до 390_panorama.pts, открыв любой из которых можно посмотреть склеенную панораму для определенного кадра.

Теперь открываем PTGui, в нем в меню Tools->Batch sticher


И дальше перетягиваем в новооткрытый диалог все тепленькие pts файлы. Тут же начнется сборка панорам.


 Через несколько минут (в зависимости от количества кадров и размера исходных изображений) все будет готово. В исходной папке появятся файлы с 0_panorama.jpg и до 390_panorama.jpg.


Теперь их можно склеить в видео используя уже знакомый нам VirtualDubMod. Для этого выбираем File->Open video file


Далее выбираем первый по порядку файл 0_panorama.jpg (1) и выделяем галочку (2) и открываем (3).


Все файлы загрузятся последовательно. Уменьшим изображение, чтобы оно помещелось на экране - правой кнопкой мыши (1) а потом выбрать (2) процент по-меньше. После запустим плеер и просмотрим результат (3).


 Если VirtualDub крешнулся как у меня - не расстраиваемся. Открываем его с начала и загружаем все рисунки. После можно просмотреть кадр за кадром пользуясь кнопками Влево/Вправо...
 
Теперь нам осталось выбрать кодек и сжать видео. Идем в Video-Compression


Выбираем какой-то подходящий кодек. 


Выбираем очень большой битрейт



Иногда бывает так, что кодек накладывает на исходное видео ограничение (например ширина и высота кадра кратна 4) - в таком случае надо кропнуть размер кадра.

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


Потом добавить NullTransform фильтр


Дальше выделить его (1) и кликнуть Cropping (2), а на нем обрезать сверху и слева на столько пикселей, чтобы результирующий размер (1) соответствовал требованиям кодека.


Дальше нам надо выйти из этих диалогов. И зайти в File-Save as...


Выбрать имя файла и сохранить видео.

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



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