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


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

понедельник, 31 марта 2014 г.

Пресуппозиции НЛП

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

По моему эту опыту НЛП не о том, как программировать других, а о том, как программировать себя. А меняя себя - меняется мир вокруг. Вернее мир даже не меняется, а меняется место в котором оказываюсь я. Под "местом" я имею ввиду не только географию, мою реакцию на привычные события и как следствие контекст в котором я оказываюсь.

Итак базовые аксиомы. Если разобраться в любой модели (которая описывает мир вокруг) есть аксиомы - то что принимается без доказательства и то, на чем базируется вся модель. У НЛП такие аксиомы называются базовыми пресуппозициями. Вот они.

Пример. Обычный день. Работаю, все ок. Вдруг Главный Шеф добавляется и пишет в скайпе "привет, как дела?". Допустим такого он раньше не дал - мы с ним вообще редко пересекались. Вот тут можно происходить 100500 разных вариантов развития событий. От - "аааа, все пропало - сейчас меня будут увольнять", до "ммм, интересно, наверное меня хотят повысить". Все что будет дальше зависит от моей интерпретации того, зачем он это написал. В реальности же он мог просто ошибиться и не того добавить. И тут первая аксиома - карта не территория. То что я узнал про этот мир - это не мир, это только описание какой-то его части. Да опыт собирается долго, лет 20-30, но все же любая модель - это не устройство, это только мысли на тему как бы оно могло работать. 


Идем дальше. Допустим человек курит. Начал курить в юношестве он не потому, что хотел себе навредить, а просто хотел быть как все его сверстники - хотел интегрироваться в группу, это инстинкт выживания. Группа могла быть не совсем той, как надо. Но он не хотел плохо ни себе ни кому. Хотел хорошо. Теперь он курит по привычке. Привычку просто надо пересмотреть. Ему это уже не надо для вступления в новые группы - он вырос. А привычка осталась как аппендикс. Но удалять ее будет достаточно сложно, если считать что решение было принято неверное, во вред.  Но если допустить что причиной появления плохой привычки было позитивное намерение и осознать какое именно - можно взять и заменить реализацию с "я курю" на "я занимаюсь чем-то другим", если конечно потребность еще жива. Итак следующая аксиома гласит - в основе любого поведения лежит позитивное намерение. Критики сюда могут приплести всякого рода преступников, но если они пообщаются с психологами которые каждый день работают с преступниками, то узнают, что даже в этих случаях намерение может быть позитивным. Просто карта у преступника другая.


Идем дальше... В какой-то момент, когда карта достаточно хорошо по мнению ее автора описывает территорию может показаться, что все стало понятно. Но вдруг случается fail. Это не значит, что все пропало. Это значит, что модель (карта) не полна и надо ее уточнять. Можно конечно проигнорить фидбек внешнего мира и сказать - это все фигня. Но тут как раз и начинаются трудности. Итак все что не вписывается в модель - это не крах, а обратная связь, которая может помочь укрепить модель, если немного подумать. Аксиома гласит нет поражений, есть только обратная связь. 


Наличие выбора всегда лучше, чем его отсутствие. Если застой - значит модель пора потрясти. Всегда есть 100500 вариантов развития событий. Если начать обсуждать с друзьями как решить ту или иную задачу, то станет понятно, что вариантов решения есть масса, только "я почему-то об этом не подумал". Не подумал потому как модель не позволила. Немного отходить от привычной модели полезно для увеличения вариантов выбора. Модель (карту) после можно уточнить в соответствии с новым опытом. "Я не буду это делать потому что это _______" - первый признак на пути к застою... Особенно если ты уже очень опытный в этом вопросе.


Смысл коммуникации состоит в получаемой реакции. Вот зачем ты общаешься с окружающими? Я проходил через этапы "что-то понял и теперь давайте вам все расскажу". Даже сейчас может показаться, что я продолжаю этим заниматься, но в моей голове в процессе повествования об чем-то (моих моделях) получаю новые знания (больше делюсь => больше понимаю), а если собеседник в этот момент делится своей моделью (на первый взгляд противоречащей) - я беру таймаут на подумать. Вскоре придумывается новая, более объемлющая модель, как правило укладывающаяся все в меньшее количество слов. Смысл общения в том новом что ты можешь от него получить. 

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


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


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


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


Дальше на этом всем базируются практики для наведения порядка в своем чердаке.

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

Вот недавно интересовались у меня вот этим. Линками помог, выложу и тут


А вот тут можно попрактиковаться.

В практике как применять? ХЗ. Просто интересный факт....

воскресенье, 30 марта 2014 г.

Мое новое хобби - слушать о твоих хобби

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

От этого мир становится лучше. Поясню...

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

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

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

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

Просто напиши мне и договоримся о встрече. 

Как-то так.

P/S/ Сегодня ехал с водителем. Он был готов поговорить. Пересел к нему вперед. Пристегнулся и начал слушать. Он рассказал о том, что встречаются водители хамы. Да, согласен. Это просто от того, что они делают нелюбимую работу - заметил я. Сказал мне о том, что работа ему как раз не для того, чтобы получать удовольствие, а чтобы прокормить семью. Интересно. А какие у вас увлечения, чем вы занимались раньше? Рассказал, что был техником на СТО. Спросил, а почему бы не открыть свое дело? Ответом было да полно сейчас таких СТО открыто, да и время не благоприятное. Ок, понятно. 

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

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

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

Когда он выговорился. Я спросил, а за что ему уже говорят спасибо окружающие люди? Он ответил, что опыт не пропьешь и его часто спрашивают о том, как купить те или иные детали, как отремонтировать ту или иную машину. Это делают друзья. И он с удовольствием им помогает. Супер! Суууупер! Знаете почему? А потому что теперь перед мной сидит не водитель NoName, а вполне конкретный человек который с радостью поможет (и мне тоже) в этом деле, которое любит. 

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

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

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

P/S/S/ Ехал то я на совсем другую встречу. Договариваться за велотур с организатором. Зачем? Я просто могу это сделать. Девчонки из моей компании просто получат новый опыт, и я тоже. Велотур получит новых клиентов и конечно же оплату... Но я уверен, что дело не только в деньгах, именно потому я с http://velotour.com.ua и сотрудничаю.  Мне это нравится работать с увлеченными людьми и помогать им делать еще больше того что они делают. И я это делаю. Мы обсудили детальки по туру. 

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

Как-то так обычно это и происходит...

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

пятница, 28 марта 2014 г.

Простой возвращатель html файлов

Задачка была сделать так, чтобы по урлу http://127.0.0.1:8080/context вытаскивалось содержимое папки context корня проекта (html/css/js). Причем если я соберу war И задеплою на сервак, то корнем проекта будет считаться корневая папка вебконтейнера. Если запрашиваемого файла нет, создаю новый.

Велосипед короче очередной. Но надо было быстро.

Вот архив.

Вот основной сервлет

package com.apofig;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;

public class SampleServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        try {

            String context = req.getContextPath();
            if (context.startsWith("/")) context = context.substring(1);

            String path = req.getServletPath();
            if (path.equals("/") || path.equals("")) path = "/index.html";

            String fileName = context + path;
            File file = new File(fileName);
            if (!file.exists()) {
                file.createNewFile();
            }

            String mimeType = getServletContext().getMimeType(file.getPath());
            resp.setContentType(mimeType);
            resp.setContentLength((int) file.length());

            if (mimeType == null) {
                resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
                return;
            }

            write(resp, file);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // thanks to http://stackoverflow.com/questions/8623709/output-an-image-file-from-a-servlet
    private void write(HttpServletResponse resp, File file) {
        try {
            OutputStream out = null;
            FileInputStream in = null;
            try {
                in = new FileInputStream(file);
                out = resp.getOutputStream();

                // Copy the contents of the file to the output stream
                byte[] buf = new byte[1024];
                int count = 0;
                while ((count = in.read(buf)) >= 0) {
                    out.write(buf, 0, count);
                }
            } finally {
                if (out != null) out.close();
                if (in != null) in.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }
}

Вот web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         id="WebApp_ID" version="3.0">
    <display-name>WebSocketServer</display-name>

    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>com.apofig.SampleServlet</servlet-class>
        <load-on-startup>100</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

И pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>WebServer</groupId>
    <artifactId>WebServer</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <jetty.version>8.1.10.v20130312</jetty.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>${jetty.version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-client</artifactId>
            <version>${jetty.version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-webapp</artifactId>
            <version>${jetty.version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-jsp</artifactId>
            <version>${jetty.version}</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <filtering>true</filtering>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>${jetty.version}</version>
                <configuration>
                    <webApp>
                        <contextPath>/context</contextPath>
                    </webApp>
                    <stopPort>9999</stopPort>
                    <stopKey>foo</stopKey>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <encoding>utf8</encoding>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jetty-jspc-maven-plugin</artifactId>
                <version>${jetty.version}</version>
                <executions>
                    <execution>
                        <id>jspc</id>
                        <goals>
                            <goal>jspc</goal>
                        </goals>
                        <configuration>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <webXml>${basedir}/target/web.xml</webXml>
                </configuration>
            </plugin>

        </plugins>
    </build>

</project>

Проект собирается
     mvn clean
     mvn package
     mvn war:war
Стартовать его можно
     mvn jetty:run

Может пригодится кому

У падавана своего учишься ты

Падаван - название, принятое в Ордене джедаев, для обозначения молодых людей, обучающихся Силе при одном из магистров Джедаев (с)

Ученик это, в общем...

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

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

Что ты получишь? Ты получишь опыт наставничества и он тебе пригодится. Это естественно. Но это не так важно на самом деле. Что важно - ты получишь пример от падавана того, как нужно учиться. Он будет у тебя учиться тому, в чем ты крут, а ты у него будешь (неосознанно) подглядывать то, что ты уже подзабыл - как это, учиться. И тут вдруг увидишь, что и тебе много людей готовы помогать в твоих вопросах. И так ты найдешь своего Ментора. 

Что хочешь получить - вначале отдай.

Как-то так...

Фрирайтинг-спарринг-марафон

Прямо сейчас 3:12. Мы с любимой женой смотрим "Голос украины"... А я параллельно пишу посты в блоге. Слушая выступления конкурсантов, отвечая на комментарии жены, время от времени переводя взгляд на экран, если слышу что-то на мой слух достойное. 

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

Я не знаю как хорошо начинать вести блог, но могу рассказать как я это делал:
1) завел блог на blogspot.com
2) потом созрел для покупки домена, купил apofig.com и настроил одно на другое
3) думаю потом как-то переходить на свою CMS на хостинге (потому как там можно делать всякие прикольные кастомные штуки), хотя блогспот очень гибок в этом плане и потому пока мне ок, что apofig.com ссылается на apofig.blogspot.com

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

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

Кстати, если ты заметил, то я уже начал писать пост :) Я могу легко скопипастить эти строки в блог и будет небольшая заметка. И я могу так продолжать очень долго. 

Попробуй писать все, что приходит в голову. Выключи критику. Она сама выключаетсся, когда ты постишь очень быстро. Настолько быстро (без пауз) как можешь. Не удаляя никакие буквы или всякие очепятки. Просто постишь предложение за предложением. Как мысль появяляется в голове начинаешь ее постить. Как только закончил предложение, то в голове появляется другое. И ты постишь... А если там пауза... Можешь рассказать о том, как ты сегодня клёво покушал суши и познакомился с интересными людьми. Вы говорили о том-то и том-то. И кстати...

Понимаешь о чем я? Все кстати. Это фрирайтинг. Записываешь поток сознания. Ты как в транс легкий проваливаешься. И читаешь свои мысли. Куда бы они тебя не завели. 

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

Потом я ушел писать пост, а через некоторое время Тарас поделился своим первым постом. С радостным "ура - написал первый пост!" и я предложил

Хочешь прикол? Если сейчас сядешь за новый пост, то через 15-20 минут появится что-то еще. Причем не надо париться на тему... Я часто начинаю с какой-то определенной темы, а ближе к концу поста тему меняю,  потому как то что нафрирайтил - совсем о другом.

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

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

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

Через некоторое время Тарас предложил третий свой пост.

Спроси себя какой пост ты так же хочешь написать еще? Подсознание само скажет, когда хватит. Ты почувствуешь какую-то полноту. Что-то типа "я сделал сегодня все, что хотел". 

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

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

Не только впитывать инфу, но и отдавать...

Как-то так.

Диалог с Опытом

Сегодня бывал на ивенте "Цифровая революция или как сделать ИТ индустрию в Украине локомотивом новой экономики" от Романа. Немного задержался и пришел, когда все уже началось. Конечно же был аншлаг и все не помещались. Но послушать хотелось, потому все кто не успел пристроились к узкому проходу с мыслью хоть послушаю. Я то был уверен, что ивент записывается и я обязательно посмотрю его позже. Расслабился. Потому мне захотелось покреативничать. Задачу себе поставил - а как сделать так, чтобы я видел то, что происходит там, за перегородкой?

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

Что сделал:


Это может и мелочевый кейс. И со стороны это выглядело как будь-то бы я знал что делаю, не раз это делал в прошлом и потому делаю сейчас. Но нет - я импровизировал. Пример по моему очень примечательный. Человеку проще смириться с тем, что чего-то нет, чем порисерчить на тему вопроса, как сделать, чтобы это было. Но если взять рисерч в привычку, то это будет происходить само собой (в смысле легко). Можно сказать, что я уже не напрягаюсь - идеи сами приходят. Я лишь слушаю их.

Напомню, что в голове у меня сидят двое (об этом я ранее писал). Первый Персонаж - мое Сознание, то что я обычно называю Я. Второй персонаж - мой Опыт - все то, что со мной происходило. Сознательно я могу задавать себе (в уме) вопросы. Сознательно я могу управлять руками, ногами, перемещать свое тело и то же делать с предметами вокруг меня. Мой Опыт хранит тысячи часов видео/аудио контента, массу советов, информации (моделей) о том, как все в мире работает. Там есть все от первых экспериментов в песочнице с пасочками в возрасте 3х лет, до сегодняшнего опыта поедания манной каши, которая у меня была на завтрак. Сознание говорит на русском языке. Опыт отвечает бессловесными образами из прошлого. И да, немного с паузами, не всегда сразу. 

Итак диалог Сознание и Опыт:
Сознание: Как сделать так, чтобы было видно тем, кому не видно? 
Опыт: Вебка (мне просто вспомнилось какой-то момент из прошлого в котором была вебка на USB)
Сознание: Но как быть? У меня нет сейчас вебкамеры - вебка есть дома, а тут нет...
Опыт: Рюкзак (мне просто вспомнилось, как я ее когда-то брал с собой в рюкзак)
Сознание: Это понятно - буду брать с собой, но сейчас ее-то нет. Как быть?
Опыт: Девушка на рисепшене (мне просто вспомнилось как я брал браслет на рисепшене, когда только пришел в коворкинг)
Сознание: А понятно! Пойду спрошу есть ли вебка у ребят в коворкинге. 
...Вебка у них как оказалось была и они мне ее дали под залог. Супер! Иду на место. Тут Сознание начало вякать неконструктивное: 
Сознание: Мы сейчас будем что-то делать, а если не получится? На нас сейчас люди смотреть будут. Нет, чтобы стать как все в строй. 
Опыт: (молчит)
Сознание: Саня. Не парься ты. Просто сделай. Куля в лоб, так куля в лоб!
Опыт: та самая прога (мне вспомнилось как я подключал вебку и записывал видео с с помощью конкретной проги)
Сознание: Ага, понято! Только я забыл как прога называется. Блин. Как ее быстро найти? 
Опыт: две папки Program Files (я вспомнил, что у меня в винде 64 битной две папки Program Files и прога находится не в 64-битной)
Сознание: Иду в папку. Нахожу прогу! Ах вот же она VirtualDubMod. Запускаю. Пробую достучаться до вебки. Какая-то ошибка. Не сильно вчитываясь в сообщение задаю вопрос - а в чем дело? 
Опыт: Скайп (я просто вспомнил, как скайп мешал подняться моему jetty серверу, и выскакивал эксцепшен c сообщение Address already in use или что-то типа того)
Сознание: Такс, понял. Джетти тут не причем, просто нам мешает скайп - наверное он вебку занял. Выключаю его. Запускаю. Та же ошибка. Снова не вчитываюсь. Спрашиваю себя - в чем дело? 
Опыт: WebRTC (я просто вспомнил, что я недавно я разбирался с этой технологией и там использовалась вебка)
Сознание: Так, понято. Запускаю аппликушку. Где моя Idea? Запустил. Поднял сервак. Запустил в браузере. Вижу то что происходит на вебке в браузере. Супер! Теперь надо понять, как направить вебку в сторону сцены?
Опыт: короткий провод (я просто увидел как мне не хватает длинны провода в каком-то кейсу из прошлого)
Сознание: Ага, я понял. Вебку ставим на перегородку, а ноут будет лежать на столе. Замерял длинны провода хватает. Вопрос в другом, как сделать так, чтобы вебка стояла строго направленная на сцену, а не падала с перегородки (провод-то тянет ее вниз)?
Опыт: швабра (я увидел какую-то швабру припаркованную в каком-то углу)
Сознание: Понял, привязать ее к швабре и как-то пристроить к перегородке. Иду поищу швабру..... Не нашел. Швабры нет. Что делать? Попутно оглядываюсь по периметру помещения, какие объекты могли бы вызвать хоть какие-то реакции (обычно такие реакции это тоже ответ Опыта).  
Опыт: настольные игры (я как раз просматривал все объекты и тут взгляд завис на настольных играх, упакованных в твердые прямоугольные картонные коробки)
Сознание: Ну и как мне их заюзать? Есть камера, есть коробка и что дальше? 
Опыт:  тяжесть (я просто вспомнил, как я в прошлом поднимал подобную коробку и отмечал что она как бы тяжелая...)
Сознание: Ага, надо пределать камеру как-то к коробке и тогда она не будет падать с перегородки под тяжестью своего провода. Но как пределать? 
Опыт: Скотч (я просто вспомнил как им что-то клеил)
Сознание: Все, понял - иду на снова рисепшен.... Скотч мне дают. Супер. Приделываю вебку к коробке ставлю на перегородку, нацеливаю на сцену. Картинку видно на экране. Ставлю экран по направлению к зрателям. Моя довольна! Сижу, прислушиваюсь к тому, что говорит Рома..... Но что-то не так. Блин, ну что такое? 
Опыт: батарея (я вспомнил, что у меня на ивенте одном в самый ответственный момент просто выключился комп). 
Сознание: Понял, сейчас достану зарядку. Подключил. Сижу смотрю.... Все равно что-то не так. Ну что еще?!
Опыт: батарея (все то же воспоминание)
Сознание: Ну ок, я набажил где-то где? Осматриваю все вокруг, и тут глаза останавливаются на лампочке что возле штекера которая обычно горит красным при зарядке, а сейчас не горит. И тут не успел я это осознать как 
Опыт: нет контакта (я вспомнил, как сидя дома на диване у меня ноут выключился при том, что я был подключен к сети - оказалось, что просто не было контакта сетевого провода с блоком питания)
Сознание: Смотрю под стол. Таки да, сетевой провод не до конца в блоке питания. Вставляю - лампочка загорелась. Супер! Сидим дальше смотрим...
Опыт: че-то не то...
Сознание: Ну что опять? Картинка размыта. Да, согалсен. Но ребята вообще ничего не видели, а теперь хоть что-то видят... Так что все ок.
Опыт: че-то не то...
Сознание: Ну ок и как мне быть? 
Опыт: CSS  (я вспомнил, как фиксил этот проект натягивая на него дизайн)
Сознание: Ща пофикшу. Сделал некоторым блокам display:none, а тому где мэин стрим, сделал height:200% заместь 80.
Опыт: ляпота... (я просто ощутил чувство завершенности, что все ок)
Сознание: Ну наконец-то...
Опыт: блог (вспомнил как я что-то постил в блоге)
Сознание: Оки, запощу потом этот опыт в блог.
Опыт: фотоаппарат (я просто вспомнил, что он у меня есть в рюкзаке)
Сознание: Ну вот я еще фоткать буду? Что народ подумает... Ну ладно. Сфотну... Фоткаю.
Опыт:  ляпота... 
Сознание: Ок... Спасибо! 

На самом деле этот диалог происходил достаточно быстро. Если ты заметишь, то у тебя тоже в голове происходят всякие мимолетные воспоминания. Утверждаю, что они не случайны - а намекают на решение. Так же стоит задавать открытые вопросы типа "и как это сделать?" и после этого слушать, что в голове появляется само собой. Я так траблшучу обычно все. А опыт наполняю всякими интересными штучками - он обычно сам мне намекает, чего хочет набраться. Это может быть что угодно, что-то что вообще сейчас непонятно (Сознанию) как применять. Но я знаю, то пройдет немного времени и я пойму зачем мне нужен был этот опыт. И не парюсь, если я не достиг в этом чего-то выдающегося. Опыту иногда для выдачи гениального решения достаточно 5 минут заняться какой-то фигней, насытиться и выдать решение. 


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

Этим постом я показал как можно с ним общаться. И Опыт-Родитель очень мудр. По началу его не так уж просто понять, но если "набить руку" это все проще и проще. Ну а можно конечно же на него забить и жить оСознанной предсказуемой и рациональной жизнью.  Сознание может понять причинно-следственную связь, может разобрать что-то по косточкам и собрать обратно получив то же что имело на входе. Сознание нового придумать не может. Все новое - это от Опыта. Сознание часто себе Авторство присваивает, но это не совсем так. Озарение/инсайт - это когда Сознание поняло, что за картинку целый день показывает Опыт. Конечно же Сознание думает, что это оно придумало. Но нифига. Оно просто догадалось что значит этот объект и как (и с какой) текущей задачей он связан. Но объект появился в голове сам, его туда положил Опыт. А Опыт это все то, что с тобой когда-либо происходило, причем я так же думаю, что Опыт, если не находит ответа по equals (а оно делает это быстро), оно начинает миксовать - вот тут-то и рождается креатив. Сознанию надо лишь расслабиться, понять и сделать то, что его просят - это его задача.

Как-то так.

вторник, 25 марта 2014 г.

Командировка во Львов

На прошлой неделе было увлекательное путешествие во Львов. Всем, кто участовал в этом квесте большое спасибо. Был там с семьей. Работал удаленно. Цель визита - ряд мероприятий для программистов в офисе компании GlobalLogic. Солнечный Львов мне очень понравился. Жить в центре, питаться в кафешках - самое оно.

20е марта, Четверг - Java Ideas Factory. Вечер, после работы. Группа из 15 человек. Общение на тему хобби. Кодить мы так и не стали - намного интереснее было знакомиться и слушать про увлечения друг друга. А потом и вовсе скатились в сторону таймменеджмента.


21е марта, Пятница - вечером обсуждали с Вовой и ребятами старт нового для компании формата. Радует то, что заручились поддержкой ребят.


22е марта, Суббота - целый день bomberman codenjoy на площадке GlobalLogic CodeLabs.
Вот отчет.


 
 
Помимо игры в этот день локализирована одна критическая бага. Моя довольна!

Львов, спасибо!

среда, 19 марта 2014 г.

Играем на фортепиано на Java: Шаг 6 - Залил на Github. Обозначил цели

В прошлый раз вот что было:

Совсем недавно попросили проект на github. Готово, он теперь будет жить тут
 
Чуть позже я его переведу на английский, т.к. эксперимент с русскими буквами показал что в Idea очень неудобно отходить от английского языка. 

А вот его описание:

Я люблю играть на фортепиано. Делаю это в свободное время и для души. Учусь по ютьюбу. Очень люблю программульки Synthesia/Fl Studio и то, как они работают с Midi, но они платные и не открытые. Я программист и это так же люблю. Java - мой инструмент в этой области. В один прекрасный день решил скрестить несколько моих хобби. Верю в то, что когда-нибудь напишу робота, который будет классно импровизировать. А пока пусть этот проект побудет тут.

В будущем проект будет делать:
  • графическая клавиатура и визуализация вопроизведения композиции
  • загрузка/выгрузка в миди файл для работы с другими программами
  • коллекция музыкальных шаблонов, в которых разобрался сам
  • генерация приятной на слух рендомной музыки
Пока это так, время покажет во что выльется проект. Лицензия хакерская "бери что-то клевое, сделай с этим что-то прикольное и верни обратно комьюнити".


вторник, 18 марта 2014 г.

Как эффективнее изучать джаву? Часть 1

Очень часто этот вопрос задают ребята. И чтобы не отвечать одно и то же, решил методом великого CopyPast'а скопить рекомендации в блог.

Ты приходишь на работу сутра во сколько? Cтарайся прийти немного раньше и первым делом сесть за джаву. Выбери себе какую-то задачку по душе, быть может чето посортировать надо на винте, или игрульку какую-то хотел написать, или какую-то коллекцию собираешь и хочешь свой каталог сделать - что нибудь для себя. 

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

Воспринимай джаву, как новая страничка своей карьеры. Я - утром 2 часа - я новый. я - днем и вечером - я как обычно. Если джава это твое и дело пойдет - будет драйв и ты это почувствуешь. Тогда ищи возможности как сделать из 2 часов 3, потом 4... Говори всем, что тебя драйвит - тебе будут помагать. Ну а если джава не пойдет, лучше брось и найди что-то по душе - то, что будет драйвить.

В поиске своего дела - подумай хорошо. Нужно тебе оно или не нужно. Хочешь ты этого или не хочешь. Должн ты это или не должен. Делаешь ты что-то или не делаешь. Из всех этих плоскостей я для себя выбираю - что реально сделано было до сегодня (это я выбрал делать) и что я хочу сделать (это выбрало что-то внутри меня).
Порпобуй просто делать джаву каждое утро по 2 часа. А потом всю работу. Так ты сразу поймешь твое ли это. Можешь себя немного по заставлять конечно, может тебя это симулирует. Но не стой на мысли "я хочу изучать джаву, но не нашелся тренинг/тренер/проект (нудное выбрать)" - это ментальная мыслеловка, попав в которую можно хотеть учить джаву еще года полтора. Либо учишь (в смысле кодишь, потому как учить особо нечего). Либо не кодишь. 

Немного отвлекусь на "я учу джаву". Учить джаву не надо. Ее стоит использовть. Вот ты жеж не учишь молоток? Или чайник. Так, даже если взять устройства по-сложнее, например, роликовые коньки. Ты не учишь их, ты учишься кататься и делаешь это приблизительно так - одел ролики, встал на ноги, упал на попу, снова встал, только теперь уже держусь за поручень и как-то по бортику-по боррику так же, как и 90% тех, кто сюда пришел. Иногда поглядывая за теми, кто виртуозно катается тут на сверхскорости с мыслью, когда-нибудь я тоже так буду. Нечего учить ролики. Одел и пошел. Сегодня же. Так и с джавой.
Теперь про рассказывание всем вокруг о том, что тебя дравит. Смотри какая тут грабля есть. Если ты не говоришь всем вокруг, что тебя драйвит, что нравится - тебе будут предлагать что-то по-умолчанию. По-умолчанию - это не всегда твое. Что знаичт "не твое"? А то, что ты не будешь это делать, когда это больше не надо, например на выходных, по вечерам, в отпуске.. А не будешь делать это часто и много, не преуспеешь... Впереди будет много поводов сдаться, свернуть с пути. Но если дело твое - это тебя только разтормошит, раззадорит. Если не твое - будет боль.
Как это проверить? Я бы рекомендовал тебе бросить джаву и перестать про нее думать. Вот так вот. Хочешь - выкинь нафиг из головы. Не твое это. А вот если приспичит - тогда когда будет не надо - тогда и вернись. 

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

Если джава - это как раз та штука, тогда вот тебе план:
1) пробуй сура заниматься ею а не вечером (вечером ты уже уставший, мозг будет саботировать и тупить)
2) пробуй искать возможности заполнить большую часть своего проектного времени джавой
3) не читай книги/статьи, если нет надобности в выбранном тобой практическом проекте
4) пиши что-то для себя, что будет полезно лично тебе - это позволить тебе продержаться, если даже вдруг появится повод соскочить
5) если потеряешь интерес к ней - оставь не время и не берись, пока снова не захочется продолжать
6) если интереса не появится, имей смелость признать - не мое это, но задай так же вопрос - а что мое?
7) но если все ок - говори всем, что ты пишешь такой-то и такой-то проект,  пусть все знают что ты используешь (не учишь, а уже используешь) джаву в таком-то домене
8) заведи себе блог на эту тему и пости туда интересные открытия. Редактирование этот поста заняло у меня 18 минут. Это не много.
9) начинай ходить на тусовки джавистов - их на DOU в календарике полно бесплатных происходит. Может там найдешь кого-то, кто тоже начинает учить джаву. С ним скооперируйся
и пишите проект вместе.
Только практика поможет тебе. Только если траблы в коде, ты для их решения читаешь статью/книгу - вот тогда ты запоминаешь. Иначе это трата времени, которого я как понял у тебя сейчас и так не хватает.

Ну а сейчас на секунду представь, если вдруг ее не надо было учить. Допусти оракл ее удалил нафиг и больше не поддерживает. И андроид навернулся. Вдруг за джаву перестали платить. И еще тебе вдруг деньги в наследство упали. Работать вроде как и не надо. И джаву учить нет смысла. Стало от обдумывания легче?  Если да, уже забудь думать про джаву. Это не твое, а навязанное. Если из за денег - на своем хобби больше пользы (а значит денег) сможешь заработать. Его-то ты хоть знаешь ближе, чем эту джаву.

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

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

Пример другой. Писали с другом игрульку в тетрис для нашего тренинга, как пример на чем можно попрактиковаться, пока мы рассказываем полезные знания. Небыло никакой мысли о том, что это пойдет куда-то дальше. В итоге это сейчас мой основной домашний проект, уже есть команда энтузиастов, которым он нравится. Провели 30 встреч за последних 1,5 года, более 400 человек, из большая часть в восторге и хотят еще. Уже с десяток игор разных. Нам прикольно - мы продолжаем.

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

"Как лучше выучить джаву когда времени мало, а стимул есть?"
Вложи завтра утром 2 часа в то, чтобы выписать 100 идей для будущего тренингового проекта. 100 идей из того, что тебе помогло бы. Может не тебе, может близким (но лучше тебе). Не напишешь 100, будет 45- ок! Где-то среди них будет та, которая заставит бросить все и начать кодить. Ну или как минимум она будет самая интересная из всех. Можешь даже параллельно 5 проектов начать. Ничего страшного в этом нет. Просто потом под настроение будешь переключаться с одного на другой. Надоест проект, отложи на время, бери другой из списка
Кстати, хочешь можешь прям сейчас начать. Это еще один признак, что это твое. А завтра продолжишь. Сделай это для себя. Весело чтобы было и прикольно. Если это будет полезно для тебя в первую очередь, и ты в процессе получишь фан, то тебе будет всеравно, что скажут другие (а они обычно отговаривают, потому как сами не могут). Ты уже получил пользу, фан, опыт, но у тебя есть еще исходный код, который ты можешь предложить другу. И когда ты найдешь первого, кто за него скажет спасибо, вот тогда задумаешься, а не начать ли мне свой стартапчик? Где-то так оно и делается все. 

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

Это не советы, это просто информация. Она может у тебя не сработать. Не верь мне на слово, сам проверяй. Одно радует - у меня это сработало. Как у тебя будет - я ХЗ :) Но я рад что ты интересуешься новым. 

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

Мне пора бежать. Приехало такси.  Часть 2 можно прочитать тут.

суббота, 15 марта 2014 г.

Еще раз о восприятии (отрыво из чата)

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

[0:09:07] СанЁк: у шизофреников такое бывает, они не знаю что находятся в иллюзиях
[0:09:29] СанЁк: если никого нет, а есть только я
[0:09:34] СанЁк: и то что я вижу
[0:09:44] СанЁк: значит я вижу вокруг проявления себя
[0:09:55] СанЁк: тот кто мне не нравится - значит я себе такой не нравлюсь
[0:09:59] Volodymyr: проекції
[0:10:03] СанЁк: так так
[0:10:13] СанЁк: если нравится - значит либо хочу таким стать, либо сам такой
[0:10:21] СанЁк: ты мне нравишься :)
[0:10:42] СанЁк: т.е. это говорит о том, что в тебе очень много всякого чего я хочу, или что сам имею
[0:10:42] Volodymyr: круто, ти мені також. ))
[0:10:56] Volodymyr: логічно
[0:10:59] СанЁк: ты сказал А, а я услышал "А"
[0:11:08] Volodymyr: якщо повезло )
[0:11:12] СанЁк: да
[0:11:29] СанЁк: я никогда не могу до конца доказать что А ты чувствуешь так же как и я свое "А"
[0:11:36] Volodymyr: ок, процентне співвідношення "розумінь" вище
[0:11:47] СанЁк: но у меня есть интерпретация увиденного/услышанного
[0:12:00] СанЁк: я сделал вывод, что ты сказал именно "А", а не А
[0:12:21] СанЁк: это мой вывод, основанный на моем опыте относительно всех "не меня", кто говорили когда либо "А"
[0:12:29] СанЁк: это мое состояние мозгов
[0:12:42] СанЁк: а все вокруг - раздражители (прости что так)
[0:13:15] СанЁк: я даже сейчас не могу до конца быть уверенным, что ты меня понимаешь. мы вроде условились, что слова есть, язык, значения слов такое-то...
[0:13:33] СанЁк: я могу подстраиваться под твои реакции... но все равно я понятия не имею что ты сейчас чувствуешь
[0:13:39] СанЁк: даже если ты сейчас поделишься этим
[0:13:47] СанЁк: я увижу в твоих словах свой опыт
[0:13:59] СанЁк: потому как не могу видеть ничего другого
[0:14:09] СанЁк: а?
[0:14:13] Volodymyr: воно то правда частково - те що ти говориш. тільки от практичних висновків мало можна зробити. всерівно це обмеження нашої реальності - значить саме в таких умовах нам найкраще жити
[0:14:24] СанЁк: вот, ща сделаю
[0:14:29] СанЁк: что для себя придумал
[0:14:43] СанЁк: "поступай с другими так, как ты бы хотел чтобы поступали с тобой"
[0:14:59] СанЁк: как это превращается в этом контексте "все проекции"
[0:15:19] СанЁк: по моему, если я вижу в ком-то что-то, что не понимаю, что мне не нравится и так далее
[0:15:22] Volodymyr: ну поступай с собой так...
[0:15:30] Volodymyr: ну чи якось так
[0:15:34] СанЁк: то - внимание, я вижу себя такого каким мог бы быть
[0:15:34] Volodymyr: смисл тоже є
[0:15:45] СанЁк: я вижу какие-то части своего опыта, с которыми не проработал
[0:16:07] СанЁк: и это чудо, что нашелся человек, который мне показал меня такого, каким я себя не видел давно (или никогда)
[0:16:14] СанЁк: он мой тренер
[0:16:24] СанЁк: я могу допережить этот опыт
[0:16:30] СанЁк: и вот что получаю взамен
[0:16:51] СанЁк: как только я себя такого интегрирую в свой опыт, приму, полюблю, зауважаю
[0:17:13] СанЁк: вдруг в мире пропадет целый класс зацепок
[0:17:16] Volodymyr: (y)
[0:17:36] Volodymyr: чувак, круто
[0:17:43] Volodymyr: мені подобаються твої висновки
[0:17:46] СанЁк: я перестану видеть эту зацепку, а перейду на другой, более глубокий уровень, где опять же увижу какие-то свои закрома
[0:17:54] СанЁк: меня парят бомжи?
[0:18:12] СанЁк: я люблю себя бомжом, более того я могу быть бомжом в определенных условиях
[0:18:20] СанЁк: я извлеку от этого чудный опыт
[0:18:27] СанЁк: я уважаю себя бомжом
[0:18:30] СанЁк: и бамц
[0:18:36] СанЁк: нет бомжей больше
[0:18:37] Volodymyr: бамц!
[0:18:39] Volodymyr: ))
[0:18:49] СанЁк: я это назыаю интегрировать себя такого
[0:18:54] Volodymyr: круто. щось ще?
[0:19:08] СанЁк: еще раз "делай так как ты хотел бы чтобы делали с тобой"
[0:19:42] СанЁк: никого нет, только я, а раз так то мысль превратится в "делай с собой так, как я хотел бы чтобы было вокруг".
[0:19:56] СанЁк: и раз я такое делаю, значит уже это возможно в мире
[0:20:07] СанЁк: а раз возможно, - 1 блоккер на пути новой информации ко мне в бошку
[0:20:21] СанЁк: и блин, все сразу становится в новом свете
[0:20:22] СанЁк: както так :)

Перечитал еще раз, вспомнилось что
"полюби ближнего своего как самого себя"

пятница, 14 марта 2014 г.

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

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

Итак проект maven, сервер на jetty/java, киент - java script/jquery, связь тудым-сюдым web socket.

Вот рабочий задеплоенный на сервак codenjoy.com код. Можно встраивать в свой блог. Только пока не гарантирую что при перезапуске не полетят все время (позже сделаю, чтобы оно сохранялось). Пока так - AS IS. Вот исходный код.
<script language="JavaScript" type="text/javascript" src="http://codenjoy.com/timer/timer.js"></script>
<script language="JavaScript" type="text/javascript" src="http://codenjoy.com/timer/jquery-1.11.0_min.js"></script>
<script language="JavaScript" type="text/javascript" >
    setupTimeWatcher("timer_info_div");
</script>
<center><div style="display:inline-flex;">
    <div id="timer_info_div"></div>
    <div> - столько времени читатели проводят на блоге</div>
</div></center>
Дальше код сервера
package com.apofig;

import org.eclipse.jetty.websocket.WebSocket;
import org.eclipse.jetty.websocket.WebSocketServlet;
import org.json.JSONObject;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.HashMap;

public class TimerServlet extends WebSocketServlet {

    public static HashMap<String, Integer> times = new HashMap<String, Integer<();

    @Override
    public void init() throws ServletException {
        super.init();
    }

    @Override
    public WebSocket doWebSocketConnect(HttpServletRequest httpRequest, String protocol) {

        return new WebSocket.OnTextMessage() {

            public Connection connection;

            @Override
            public void onMessage(String data) {
                try {
                    synchronized (times) {
                        JSONObject signal = new JSONObject(data);
                        String type = signal.getString("type");
                        String hash = signal.getString("hash");

                        if (!times.containsKey(hash)) {
                            times.put(hash, 0);
                        }

                        if (type.equals("tick")) {
                            int time = signal.getInt("time");
                            times.put(hash, times.get(hash) + time);
                        }

                        if (type.equals("get")) {
                            connection.sendMessage(String.valueOf(times.get(hash)));
                        }
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onOpen(WebSocket.Connection conn) {
                connection = conn;
            }

            @Override
            public void onClose(int closeCode, String message) {
                connection = null;
            }
        };
    }
}

И клиента
function setupTimeWatcher(timerDivId, reportToServerDelayInSec, getFromServerTotalTimeDelayInSec) {
    if (!reportToServerDelayInSec) reportToServerDelayInSec = 5;
    if (!getFromServerTotalTimeDelayInSec) getFromServerTotalTimeDelayInSec = 1;

    $().ready(function() {
        var total = 0;
        var activity = false;
        var hash = document.domain;

        var server = new WebSocket("ws://192.168.1.102:8080/timer/ws");
//        var server = new WebSocket("ws://tetrisj.jvmhost.net:12270/timer/ws");
        server.onopen = function() {
            server.onmessage = onGetTotal;
            tick(report, reportToServerDelayInSec * 1000);
            tick(getTotal, getFromServerTotalTimeDelayInSec * 1000);
        };

        // thanks to powtac (http://stackoverflow.com/questions/6312993/javascript-seconds-to-time-with-format-hhmmss)
        var toHHMMSS = function (seconds) {
            var sec_num = parseInt(seconds, 10); // don't forget the second param
            var hours   = Math.floor(sec_num / 3600);
            var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
            var seconds = sec_num - (hours * 3600) - (minutes * 60);

            if (hours   < 10) {hours   = "0"+hours;}
            if (minutes < 10) {minutes = "0"+minutes;}
            if (seconds < 10) {seconds = "0"+seconds;}
            var time    = hours+':'+minutes+':'+seconds;
            return time;
        }

        var onGetTotal = function (event) {
            var total = JSON.parse(event.data);
            $("#" + timerDivId).html(toHHMMSS(total));
        }

        var getTotal = function () {
            var request = { type : "get", hash : hash };
            server.send(JSON.stringify(request));
        }

        var onActivity = function() {
            activity = true;
        };

        var inc = function () {
            if (activity) total++;
            activity = false;
        };

        var tick = function(smth, delay) {
            setTimeout(function(){
                if (!!smth) {
                    smth();
                }
                tick(smth, delay);
            }, delay);
        };

        var report = function() {
            var data = { type : "tick", time : total, hash : hash };
            server.send(JSON.stringify(data));
            total = 0;
        };

        $(window).mousemove(onActivity);
        $(window).keypress(onActivity);
        $(window).scroll(onActivity);

        tick(inc, 1000);
    });
}

Собрать варник
mvn clean
mvn package
mvn war:war

Запустить джетти на локали
mvn jerry:run

Обратить внимание на урл сервера в клиенте

...
    $().ready(function() {
        var total = 0;
        var activity = false;
        var hash = document.domain;

        var server = new WebSocket("ws://192.168.1.102:8080/timer/ws"); // TODO вот тут айпишка и порт должны быть 
...

Так же внимательнее с контекстом "/timer/", если собрался поменять, то он встречается в pom.xml и timer.js

Время на разработку - 1 час 20 минут. Время на пост в блоге - 15 минут.

Я потенциальный и я кинетический

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

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

Или вот так


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

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

Посмотри на это видео. Вот ты. Бурный. Живой. 

 
Обратил ли ты внимание на камень на 40й секунде. Ты его пытаешься сдвинуть с места.  И ничего не получается. Стоит на месте и все тут. Но ты не обратил внимание на то, что ущелье это в котором ты бурлишь - ты сам сделал. Тысячи тонн породы вымыл в открытое море. За всю свою жизнь. Да ты силен, однако! Но почему-то сосредоточился вот на этом вот камне.

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

Твоя сила в том, что ты несешь. Все остальное сделают мелкие камушки. 

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

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





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

И да. Твой опыт уникален. Уникальнее некуда. Сколь быстро ты начнешь делиться им со всеми вокруг - так быстро ты поймешь что без тебя этому миру никак.