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


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

воскресенье, 26 октября 2014 г.

Придумки для айтишников - ITTV

Сейчас работаю в команде с одним чудным генератором идей Владом. Так вот он говорит, бери что-то рабочее с одного домена и тащи в свой. И вот вчера, после игры в Loderunner, естественно было афтерпати и мы с другим моим другом Димой общались обо всяком около-айтишном. И тут пришла идея - а что, если сделать в айти телевидение? В голове сразу зажужжало ITTV, ITTV, ITTV... До вечера успокоиться я уже не мог. Почему?

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

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


В начале стоит остановится на чем-то простом - какой-то одной педераче :) и конечно же собрать кор команду. А потом от нее плясать, смотреть что нравится народу, а что нет. Добавлять одного и исключать другого. Партнериться с другими в-душе-журналистами-айтишниками, пусть готовят материалы про то, что происходит вокруг них. Кому попиариться, кому передать знания, кому спросить фидбека, кому собрать команду. Разные передачи, разные ведущие, может быть, разные каналы, когда пойдет. 

Посмотрим...

Жаль домен занят :)

суббота, 25 октября 2014 г.

Как отключить экранную заставку Windows?

Сидим с ребятами играемся в Loderunner. На проекторе один из ноутов вещает игру. Ноут корпоративный с полиси - по таймауту каждые 15 минут включать экранную заставку - отключить никак. Мне приходится вставать и дергать мышкой каждые ~10 минут. Задолбало.Придумал себе квест - из подручных средств автоматизировать этот процесс. 

Дано: 
- ноут с вредной виндой
- бумажка
- мышка
- пластилин/жевачка/много козявок с носа


Подсказка. Мышка оптическая. Кулер ноута дует. 

Enjoy :)

пятница, 24 октября 2014 г.

Хиппи-мобиль

Хочу такой :)

четверг, 23 октября 2014 г.

Бесплатный java профайлинг

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

Подсчитать, сколько времени выполняется блок кода 
public void someMethod() {
    long time = Calendar.getInstance().getTime().getTime();
    // ... some code ...           
    System.out.println(Calendar.getInstance().getTime().getTime() - time + "ms");
}
Подсчитать сколько раз выполняется метод
public static long count = 0;

public void someMethod() {
    if (count++ % 10000 == 0) System.out.print("+");
    // ... some code ...
}
Подсчитать, кто сколько раз (в каком контексте) вызывал этот метод
public static Map<String, Integer> count = new HashMap<String, Integer>();

public void someMethod() {
    Map<Thread, StackTraceElement[]> traces = Thread.getAllStackTraces();
    for (StackTraceElement[] list : traces.values()) {
        if (list.length == 0) continue;
        boolean mine = list[0].getMethodName().equals("dumpThreads");
        if (!mine) continue;
        StringBuilder builder = new StringBuilder();
        for (StackTraceElement el : list) {
            if (el.getFileName().equals("Thread.java")) continue;
            builder.append(el.getClassName()).append(".")
                    .append(el.getMethodName()).append("():")
                    .append(el.getLineNumber()).append("\n");
        }
        String id = builder.toString() ;
        int n = 0;
        if (count.containsKey(id)) {
            n = count.get(id) + 1;
        }
        count.put(id, n);
    }
    if (count.size() % 10000 == 0) System.out.println(count.toString());
 
    // ... some code ...
}
Тут константа 10000 подбирается вручную, в зависимости от общего количество вызовов в секунду. У меня их очень дофига.
Пользуясь этими тремя методами я увеличил производительность в 300 раз. По хорошему их бы в класс отдельный выделить и повторно использовать. Но то уже потом как-то...

вторник, 21 октября 2014 г.

25 октября состоится Loderunner Codenjoy @ GlobalLogic CodeLabs

А ты играл в детстве в LodeRunner на Денди? У тебя есть отличная возможность вспомнить азарт этой несложной игры.

Это произойдет уже в эту субботу. Впервые codenjoy собирает ребят для баттла в LodeRunner.


Правила простые. За 5 часов твоей команде (у нас программирование в парах) надо будет написать свой алгоритм игры в LodeRunner — твой AI.

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

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

Как подготовиться к игре, читай тут

Хостит нас GlobalLogic CodeLabs

За репетицией можно подглядеть вот тут

Поторопись, регистрация еще открыта

15 ноября в Черновцах - доклад на конференции

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

Глава 1. "Программирование для души" 
Вспомнить то время, когда компьютер впервые появился в твоей жизни. Первый скомпилированный код. Первая бессонная ночь. Это время было наполнено магией. Потом по-чуть чуть эта магия превратилась в профессию. И может быть сейчас все не так привлекательно, каким было раньше. Я поделюсь своим наблюдением всего этого безобразия. Расскажу куда делась магия и как ее вернуть назад.   

Глава 2. "1+1=11"
Пара - уникальный союз. Посмотри вокруг - во главе многих успешных начинаний находятся двое. Задрот-технарь и  показушник-продажник. Это уже потом они обрастают компанией. Там где трое уже нужен менеджмент :) А двое - они и сами справятся. В этом докладе поделюсь своим опытом продвижения проектов "с" и "без" напарника.

Глава 3. "Хакерспейс - твоя лаборатория"
Участвовал в хакатонах? Это классное чувство. Марафон на котором ты кодиль сутку или двое. Кодишь что-то на острие технологий или решаешь какую-то социально-значимую проблему. Обязательно попробуй, как представится возможность. И тогда ты поймешь, что хакатоны - это хорошо. А ксли хакатоны - это хорошо. То почему бы их не проводить и чаще и разнообразнее. Хоть каждый день! Так ребята пришли к понятию Хакерспейсов. Сейчас это движение накрыло весь мир. И наш родной город не исключение. В докладе расскажу про формат, трудности реализации у тебя в компании.

Глава 4. "Мир менять - только проактивно"
Тебя можно нагуглить? У тебя есть свой блог? А выступал ли ты с докладом? Может хоть книгу написал? :) Есть такой стиль программирования, называется google driven development. Все хорошо! Я тоже его использую. 500 раз в день, если не больше. Знания гуглят все. Вопрос в том, кто их туда кладет, зания эти. Это мог быть и ты. И в этом докладе я расскажу, почему тебе это выгодно делать. Расскажу, почему мне выгодно выступать на этой конференции. И как еще выгодно можно делиться знаниями.

Глава 5. "Нетворкинг"
А еще про нетворкинг немного :) Не имей 100 гривней, а имей 100 друзей. Как говорится в одной мудрой пословице. Айтишник - это в первую очередь человек работающий с информацией, а уж потом автоматизатор процессов или программист. Айтишника знают многие и он так же знает многих. Эта его облако возможностей вместе разом может в миг решить любую его проблему. Сейчас дастаточно только запостить в сетке - "Ребята, надо то-то" и все. Сарафаном разнесут и тут же бумерангом верентся. Ах у тебя не так? Ну тогда  пора прокачивать твой нетворкинг!

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

После конференции с удовольствием со всеми желающими перенесусь в какую-то не шумную кафешку, дабы подробнее поработать над запросами ребят. 

Ах да! Билетик туда-сюда в Черновцы оплачивает организатор конференции компания SoftServe - самая большая айти компания в Черновцах. 

Скоро увидимся! 

понедельник, 20 октября 2014 г.

Быстрая реализация Random - алгоритм XORShift

Как-то Серега писал о нерендомности рендомайзеров (импульс пришел отсюда). Для меня это не критично как бы, я просто хотел найти красивый большой png c белым шумом, но у гугла были только небольшие разрешения и то сжатые jpeg. Так что я стал мучить java.util.Random который оказался не таким уж и производительным. Попытки создать свой собственный ни к чему рендомному не привели, хотя было нарисовано много красивых картинок. Но я нашел что искал.

XORShift (любителям математики - goto сюда) до ужаса простой и гениальный алгоритм генерации рендомных чисел. Вот он (взято тут)

public class XORShiftRandom {
    private long last;

    public XORShiftRandom() {
        this(System.currentTimeMillis());
    }

    public XORShiftRandom(long seed) {
        this.last = seed;
    }

    public int nextInt(int max) {
        last ^= (last << 21);
        last ^= (last >>> 35);
        last ^= (last << 4);
        int out = (int) last % max;     
        return (out < 0) ? -out : out;
    }
}

Кстати на моей поделке он оказался быстрее java.util.Random в 10 раз.

А вот white noise полученный с помощью этого алгоритма черно-белый (19200х10240, 1920х1024) и цветной (19200х10240, 1920х1024). Осторожно большие размеры! Они не ужимаются ничем :) Так же, чтобы не слишком обижать java.util.Random выложу и его работы: черно-белый (19200х10240, 1920х1024) и цветной (19200х10240, 1920х1024).



Может как-то пригодится.

А чтобы проверить рендомность алгоритма я сделал следующее. Нагенерил из одного ряда png'шек шириной от 1 до 800 пикселей и высотой 600. А потом во вьюере быстренько просматривал один за другим в поисках харктерного муара. XORShift в некоторых местах все же едва "замуарил", а java.unit.Random показал немного более худший результат - в процессе изменения ширины картинки было видно движение больших массивов пикселей.

А еще я вот записал вот это видео :) Для ценителей... 600Mb за 1,5 минуты :)



суббота, 18 октября 2014 г.

Вызов win api из java с помощью JNI

Сегодня стояла задача получить доступ к WinApi из Java. На помощь пришел JNI.

Дня начала в maven надо прописать две зависимости.
<dependencies>
 <dependency>
  <groupId>net.java.dev.jna</groupId>
  <artifactId>jna</artifactId>
  <version>4.1.0</version>
 </dependency>
 <dependency>
  <groupId>net.java.dev.jna</groupId>
  <artifactId>jna-platform</artifactId>
  <version>4.1.0</version>
 </dependency>
</dependencies>
А теперь выведем в консоль, например, заголовок активного окна с помощью этого кода.
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef;

public class GetForegroundWindowTitle {

    public static void main(String[] args) {
        User32 user32Lib = User32.INSTANCE;
        WinDef.HWND hwnd = user32Lib.GetForegroundWindow();

        char[] title = new char[10240];
        user32Lib.GetWindowText(hwnd, title, title.length);

        System.out.println(String.valueOf(title).trim());
    }
}
С JNI есть доступ к api unix, mac и других осей.

Не просто слова

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

пятница, 17 октября 2014 г.

Моя поделка на Android GroundhogDay

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

Что я хотел? Банальный ListVew с элементами которые имеют чекбоксик. При клике на чекбоксик он выделяется и через секунду юлемент удаляется. Если я за эту секунду снял чекбоксик (передумал), то удаления не произойдет. Так же можно повыделять/поснимать за это время еще и другие чекбоксики, секунда до удаления отсчитывается от последнего клика. 

Как любитель code reuse я не мог не выделить эту фичу в отдельный мегастатический монстр :) Я в последнее время долго кодил на JavaScript так что особо не судите за интерфейсность.

package apofig.com.myway;

import android.os.Handler;
import android.widget.ListView;

import java.util.LinkedList;
import java.util.List;

public class ListViewCustomizer {

    interface WhenDelete {
        void doit(List<String> removed);
    }

    interface OnClick {
        void click(int position);
    }

    public static OnClick setupListViewThatHideChecked(final ListView listView, final List<String> list, final WhenDelete doit) {
        final List<Integer> lastPositions = new LinkedList<Integer>(); // будем хранить тут те позиции по которым кликнули

        // эта штука позволит нам сделать отложенный во времени вызов кода
        final Handler handler = new Handler(); 

        // вот этот код будет вызываться через секунду после того как был сделан последний клик
        final Runnable runnable = new Runnable() { 
            public void run() {
                // если ничего не выбрали, то и удалять нечего
                if  (lastPositions.isEmpty()) return; 

                // тут храним имена удаленных элементов, его вернем клиенту
                List<String> items = new LinkedList<String>(); 
                while (!lastPositions.isEmpty()) { // по все удаленным
                    Integer index = lastPositions.remove(0); // первый элемент списка 

                    // если за это время его успели анчекнуть, пропускаем 
                    if (!listView.isItemChecked(index)) continue; 
                        
                    items.add(list.get(index)); // сохраняем его

                    list.remove(index.intValue()); // удаляем

                    // нам после удаления элемента надо подтянуть и чекбоксики, потому как они хранятся в другом месте 
                    for (int j = index.intValue(); j < list.size(); j++) {
                        listView.setItemChecked(j, listView.isItemChecked(j + 1));
                    }
                   
                    // ну и пересчитать индексы, потому что все после удаленного стали на 1 меньше
                    for (int i = 0; i < lastPositions.size(); i++) {
                        Integer removed = lastPositions.remove(i);
                        if (removed > index) {
                            removed--;
                        }
                        lastPositions.add(i, removed);
                    }
                }
                if (items.isEmpty()) return; // чеи в правду ничего не удалили? выходим

                // выполняем клиентский код если надо
                if (doit != null) {
                    doit.doit(items);
                }

                // чистим 
                lastPositions.clear();
            }
        };

        // этот обработчик следит за тем, чтобы запустить второй, через секунду после того как отыграет последний клик
        final int[] count = {0};
        final Runnable runnable2 = new Runnable() {
            public void run() {
                count[0]--;
                if (count[0] == 0) {
                    handler.postDelayed(runnable, 1000);
                }
            }
        };

        // а этот код должен дернуть клиент, каждый раз когда кликнули по элементу и указать position
        return new OnClick() {
            @Override
            public void click(int position) {
                // странно, но тут не надо инвертировать, потому как значение isItemChecked( - такое как надо, но 
                // оно не применится к чекбоксику, если не вызвать еще и setItemChecked(
                boolean checked = listView.isItemChecked(position);
                listView.setItemChecked(position, checked);

                // добавляем в скписок выделенных только чекнутые, анчекнутые удаляем
                if (checked) {
                    lastPositions.add(Integer.valueOf(position));
                } else {
                    lastPositions.remove(Integer.valueOf(position));
                }

                count[0]++;
                // Спасибо http://stackoverflow.com/q/8177830
                handler.postDelayed(runnable2, 1000);
            }
        };
    }
}
А используется он так
    public void onCreate(Bundle savedInstanceState) {
        // бла бла бла
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ListView listView = (ListView) findViewById(R.id.lvMain);
      
        // исходные данные и адаптер
    List<String> list = new LinkedList<String>(Arrays.asList("one", "two", "three", "four", "five"));
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, list);
        listView.setAdapter(adapter);

        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); // можно выделять несколько

        // настраиваем компоненту
        final ListViewCustomizer.OnClick onClick =
                ListViewCustomizer.setupListViewThatHideChecked(listView, list,
                    new ListViewCustomizer.WhenDelete() {
                        @Override
                        public void doit(List<String> removed) {
                            // перерисовываем список в соответствии с изменившимися данными
                            adapter.notifyDataSetChanged();

                            // выводим на экранчик сообщение с именами удаленных элементов
                            Toast.makeText(MainActivity.this, splitWith("\n", removed), Toast.LENGTH_SHORT).show();
                        }
                });

        // передаем импульс онклика
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                onClick.click(position);
            }
        });

    }
    
    // метод превращения списка в строку разделенных разделителем
    private static String splitWith(String separator, List<String> removed) {
        String info = "";
        for (String m : removed) {
            info += m + separator;
        }
        info = info.substring(0, info.length() - separator.length());
        return info;
    }
Вот еще xml-ки
<!-- Спасибо http://dajver.blogspot.co.uk/2013/09/listview-edittext.html -->
<!-- Спасибо http://startandroid.ru/en/uroki/vse-uroki-spiskom/15-urok-6-vidy-layouts-kljuchevye-otlichija-i-svojstva -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

        <ListView
            android:id="@+id/lvMain"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
        </ListView>

</LinearLayout>
Может кому-то пригодится... Если надо проект в zip виде, пиши в комменты - выложу.

четверг, 16 октября 2014 г.

Замедлиться

Доброе утречко. Хотя уже почти полдень, но все же. У меня есть на выбор сейчас два варианта - поторопиться, куда-то зачем-то и вести себя так, будь-то бы сейчас отпуск и спешить никуда не надо. В своей почитать_на_потом папке я нашел статью "День, когда я перестала говорить своему ребенку “Давай скорее!” Прочитал ее неспешно и вот чем поделюсь. 

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


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


Вот снял там небольшой ролик


Вообще, нужен штатив, а то...


Еще один момент замедление был на концерте где играли некоторые произведения Баха. Он был еще тот контенщик - нагенерил столько произведений, что названия генерились просто путем приствения порядкового номера.


Мне больше всего нравится.


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

Замедляйтесь! "Кто понял жизнь, тот больше не спешит..." (с) Oмар Хайям
Кто понял жизнь тот больше не спешит,
Смакует каждый миг и наблюдает,
Как спит ребёнок, молится старик,
Как дождь идёт и как снежинки тают.
В обыкновенном видит красоту,
В запутанном простейшее решенье,
Он знает, как осуществить мечту,
Он любит жизнь и верит в воскресенье,
Он понял то, что счастье не в деньгах,
И их количество от горя не спасет,
Но кто живёт с синицею в руках,
Свою жар-птицу точно не найдет
Кто понял жизнь, тот понял суть вещей,
Что совершенней жизни только смерть,
Что знать, не удивляясь, пострашней,
Чем что-нибудь не знать и не уметь

среда, 15 октября 2014 г.

Позвоните Маме

Мы с моей мамой придумали игру. Я звоню каждый день, а Мама рассказывает мне по одной истории из моего детства. 


А вчера я понял кое что. Мама случайно обронила, что ей нужно чтобы я звонил, по поводу без повода, на пол часа, или 10 секунд. Просто позвонил. А ведь не говорила об этом прямо раньше. А я то работа, то заботы, то забегался, то забыл... Не ценим, когда есть. А еще я каждый мой звонок Маме говорю, что люблю ее и скучаю. Раньше не делал так, стеснялся, что ли. Но это очень важно. Пару слов. Мама я тебя люблю и скучаю. Ведь это правда. Так почему бы не сказать это? В детстве Мама это говорила мне каждый день по несколько раз, я уверен в этом, потому что сейчас говорю так же своем ребенку. Так почему бы не вернуть Маме то хорошее, что она тебе передала в детстве? 

Ну что сидишь?
Позвони Маме
Прямо сейчас
Скажи, что ты есть, с тобой все хорошо
Любишь
Скучаешь
Спроси как прошел день
Гуляла ли сегодня

С Саней все нормально?

Вчера общался с другом, его другой мой друг спрашивал "все ли ок с Саней, он в блоге не пишет". Да, было много переживаний за это время как в семейном, так и в карьерном плане. Кое-что переживалось очень неохотно. Эго сопротивлялось до последнего. И кажется вчера оно сдалось. А еще осенняя хандра до купы. 


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

В попытках справиться в внутренним состоянием я пробовал:
- сбежать в горы и делал это дважды
- говорить что думаю и пофиг, что подумают вокруг
- морозиться от всего, что не доставляет
- пить пустырник :)

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


Отдельное спасибо хочется сказать за Смех. Это универсальный по моему способ. Не знаю как, но если тебе фигово сейчас надо найти способ посмеяться. Очень помогают в этом дети, если начать дурачиться вместе с ними. Я понял это, в один из дней, когда мы гуляли с ребенком. Гуляли рендомно. Сели на одну маршрутку, потом вышли пересели на вторую, потом на третью... Вот уже ребенок умаялся, и домой попросился, как вижу Цирк. А хочешь в Цирк? Хочу - говорит. Ну пошли. Там я ржал наверное больше, чем ребенок. Смеялся конечно же над собой. 


Что еще происходило: 
- стал крестным отцом
- узнал, кому я на самом деле нужен, т.к. эти люди стучались ко мне сквозь не пробивную стену
- на время, а потом на долго ушел из фейсбука 
- официально открыли }{space, а потом написали с Вовой легковестную CMS для него на основе скрипта lazy-загрузки постов для инфоподдержки
- понял как, где хочу жить и над чем работать (об этом позже)
- понял, чего делать не хочу и не буду
- понял, что в походы стоит ходить самому
- запустил http://simple-sample.com.ua так, проверить работает ли инструмент
- сократил потребление алкоголя до литра пива в месяц
- не провел ни одного тренинга - и теперь я точно знаю, что по-настоящему хочу это делать 
- позакрывал купу старых полу-дохлых проектов
- стал ходить в офис и понял, что WFH - это убийца настроения, если не заставлять себя выходить из дому (об этом позже)
- стал писать аппликушку для андроида по управлению моими хорошими привычками
- еще по мелочам, что не вспоминается...

Как-то так

Второй день встаю с рассветом

Посмотрим как пойдет, но пока все замечательно. Вот уже 4:30 утра я встал без будильника. Правда снился мне кошмар жуткий, но ничего - кошмар во сне, весь день на позитиве. И кажется я могу связать причину и следствие - видимо это от того, что я на ночь ем. Ну такое. Позавчера лег в 22:00, до 22:30 заснул, и проснулся в 7:00 (видимо недосып был). А вчера лег в 21:00 и проснулся в 4:30. Раз, два, три, четыре (загибает пальцы)... 7,5 часов. Ну по ощущениям вроде как хватило.


Что я использую для того, чтобы выспаться?
- обязательно стакан воды перед сном и стакан воды как проснусь.
- обязательно спать с открытой форточкой
- выключаю вайфай раутер
- мобильный ставлю "в самолете", никаких будильников
- за час до сна лучше не кушать, но если и есть то не сложное что-то. Идеально, если яблоко на терку :)
- на утро надо придумать интересную таску, чтобы хотелось встать
- как проснулся, сразу встаю, для этого телефон ставлю подальше от кровати, чтобы надо было встать к нему и посмотреть сколько там времени. А встал - сразу свет включаю и в душ.
- после за ноут, пост в блоге
- после зарядка
- после завтрак
- после креативная таска, на которую у меня при обычном режиме не хватает времени.

Вот уже 5:00 утра и я знаю что до работы еще 5 часов времени. За это время можно сделать одну полноценную итерацию чего-либо. 

вторник, 14 октября 2014 г.

Кто рано встает, тому все плюшки

Решил возвращать назад свою привычку рано вставать. Помогает мне в этом одно мое приложение на Android. Его суть, вкратце, вот в чем - я забиваю в него полезные привычки в позитивной формулировке в прошедшем времени. Например: 
позвонил Маме,
проснулся рано,
размялся,
делал частые перерывы,
вышел из дому,
читал хоршую книгу,
вдохновил человека,
внимательно слушал собеседника,
консультировал за деньги,
сделал уборку дома
общался с иностранцем
питался по графику
путешествовал за город
сделал что-то драйвовое
секономил денег
запостил в блог
сделал что-то смелое
изучил новую технологию
помог человеку
медитировал
лег спать рано
игрался с ребенком
смеялся
знакомился с новым человеком
питался полезной едой
играл на фортепиано
удивил человека
похвалил жену
сходил в театр
постил в блоге о приключениях  
и так далее... А потом пару раз в день заглядываю в приложение и выбираю те, что уже сделал.

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


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

Как-то так

понедельник, 13 октября 2014 г.

Подари квест другу

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



Общались мы с Вовой где-то часа 4, наматывая круги под окнами моего дома. Решили для начала сделать три вещи:
1) я делаю квест для Вовы
2) Вова делает квест для меня
3) я пишу несложный сервис для выдачи играющему по линку текста описания квеста, а для админа редактирования квест-флоу
4) мы заручаемся поддержкой кого-то, кто уже в теме реальных квестов
5) квест начинается с смски на мобильник "поздравляю вы в игре"!

Кстати, про игру. Посмотри фильм Игра Дэвида Финчера, чтобы понимать откуда черпалось вдохновение.


Продолжение обязательно следует...

среда, 8 октября 2014 г.

Убрать перископ! Ухожу из фейсбука на 3 месяца

Только что прочитал вот эту статью. Подпишусь под каждым словом. 



Ухожу из фейсбука до нового года (ух! думал в начале на месяц закоммититься, но прививаю себе привычку делать каждый день что-то смелое - так что до конца 2014 года!). 

Сомнения закрались уже как месяц, но ярко понял это позавчера, когда ехал в поезде - там я за два часа прочитал 200 страниц книги про Spring. Вдумчиво так. В результате - масса идей. Где-то столько же уходит на скроллинг новостей в ленте за пару дней. Что я ценю от фейбсука? Пару-тройку вдохновляющих цитат, пару-тройку ссылкок на смешные видео, в основном репостом с adme.ru или подобных сайтов. 

Да, фоточки друзей - их интересно посмотреть, кто как живет. Но если разобраться - лучше напроситься в гости, а там и фотки посмотреть и послушать историю друга и вместе чаю попить. Да лайки, да прикольно, да это все затягивает - и вместе с тем пахнет зависимостью. Я уже второй (или третий?) месяц не постил в свой блог http://apofig.com. На фейсбуке можно ограничиться одним абзациком, а потом можно с чувством выполненного поскролить чуть вниз - вроде как запостил жеж идею. Но тут же ее похоронил. В блоге же надо вдумчиво, но и нагуглить потом смогут. 

Кстати твиттер я уже давно удалил и не жалею за ним. Удалять его решил, когда понял, что читаю его сидя утром в туалете. В социальных сетях ты либо паук либо мушка. Я пока мушка, так как ничего не продаю. А чтобы была мне стимуляция - первому из моих друзей, кто заметит меня на фейсбуке до 2014-12-31 включительно я торчу 100$. 

Вызов я передаю всем, кто неравнодушен.