Как стать автором
Поиск
Написать публикацию
Обновить

Какую игру делать?

«Лед тронулся, господа присяжные заседатели!»
Ильф и Петров, «12 стульев»

Разрабатывать игры мы начали в 2008 году. До этого мы занимались созданием сайтов на региональном рынке и понимания того, как создаются игры, у нас не было в принципе. А начали очень просто: после неудачного старта онлайн-казино в конце 2007 года, когда заказчик просто отменил проект, а договора у нас с ним не было, я стал думать, где найти новые проекты. И в этот момент я узнаю, что один из программистов написал простую игру и продал ее за несколько тысяч долларов. «Как так?», — воскликнул я, вспоминая наши бюджеты на сайты, и начал в срочном порядке изучать рынок flash игр.

Зимой 2008 года пришлось распустить команду, так как новых заказов не было и тратить деньги на заработную плату не имело смысла. Но часть команды, поверившая в то, что разработка игр — перспективное направление, осталась (тем не менее, почти все из тех, кто остался тогда, позднее уйдут из команды по различным причинам).

И в это время я начал активно искать контакты людей, готовых приобрести flash игры. Ответ был один: «Сделайте игру и приходите к нам, мы спросим, сколько вы за нее хотите». Ну что же, надо делать. Встал вопрос: «Какую игру делать?». Понятно, что нужно было начинать с небольшой игры и первое, что пришло в голову — тетрис и арканоид.

— Будем делать арканоид.
— Но их же уже много.
— Сделаем 3D арканоид, как Richochet от Reflexive. Такого точно еще никто не делал на Flash.
— Хорошо.


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

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

Итогом наших стараний стало то, что в апреле мы выпустили Galaktoid.

Что было правильно сделано:

  • быстро поменяли рынок, на котором работали;
  • не имея возможности нанять людей с опытом работы в игровой индустрии (в нашем городе помимо нас только одна компания, разрабатывающая игры) мы учились всему сами;
  • первыми сделали 3D арканоид на платформе Flash и, что называется, попали в аудиторию;
Какие уроки мы получили:

  • не надо оставлять людей в команде, которые не хотят учиться;
  • всегда надо подписывать договора;
  • при планировании нужно учитывать время на геймдизайн/создание контента;
  • работа с фрилансерами увеличивает время на разработку;

О boost::asio::ip::tcp::iostream

Появилась задача написать некий сервер.
Если уж выбор пал на С++, то надо и библиотеку применить, желательно козырную — boost в самый аккурат. Про неё столько пишут и говорят… да еще с таким трепетом и так восторженно, что я не мог не проникнуться идеей приобщиться.

Мысль, что в бусте нет библиотеки для работы с сокетами даже не возникала — она должна там быть. И правда, есть — это boost::asio. Почитав доки я восхитился.
Самое восхитительное, что есть удивительный класс boost::asio::ip::tcp::iostream! Вот его-то и буду юзать в сервере — в чистом сиплюсплюсном стиле потоковый ввод-вывод… Лепота!
Но следует учесть, что boost::asio::ip::tcp::iostream подчиняется законам жанра и по своему интерпретирует «перевод каретки», «новая строка» и т.д. Следовательно бинарные данные пересылать не получится. Для этого был написан класс base64 для кодирования бинарных данных в текстовые. Оверхед траффика в 33% для моей задачи вполне допустим.

Итак, сервер должен обслуживать коннекты клиентов, авторизовать их и что-то делать. Банально.
Сервер должен быть многопоточным. Чтобы на каждый коннект свой тред. Должен быть такой диспетчер-криэйтор — он будет принимать коннекты и создавать треды, которые будут работать с клиентами. Этот диспетчер не должен следить на жизнью тредов — они сами должны разрешать все ситуации. Количество тредов не ограничено — предполагается, что процесс обмена с клиентом будет не столь длителен. А если нет — отключим газ (с) к.ф.
В документации asio есть много отличных примеров. Немного подпилив получим это:

server.cpp
int main(int argc, char** argv)
{
...
boost::asio::io_service io_service;    
boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), port);
boost::asio::ip::tcp::acceptor acceptor(io_service, endpoint);

    // крутимся  
    for ( ;; ) 
    {
      boost::asio::ip::tcp::iostream* stream = new boost::asio::ip::tcp::iostream;
      acceptor.accept(*stream->rdbuf());  // ждем-c...

      std::cout << "\nClient connected" << std::endl;
        
      // создаем тред job, параметр - указатель на стрим, на котором клиент 
      boost::thread thr(boost::bind(&action::job, stream));
      thr.detach(); // пущай себе летает...
    }

...
return 0;
}

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

Работа с клиентом
thread.cpp
namespace action
{
  void job(boost::asio::ip::tcp::iostream* stream)
  {
    std::string from_remote_side;

    *stream >> from_remote_side;  // ждем от клиента
    if (from_remote_side == "me") // явно упрощенная процедура авторизации ;)
    {
       // здесь остальная реализация протокола
    } 
  }
}


Вот тут — *stream >> from_remote_side; засада. Ввод синхронный, значит тред будет ждать когда что-то там прилетит. А если не прилетит, а если вдруг много коннектов и, естественно, создано много тредов и все они ждут… Ни на какие мысли не наводит? =)
Ограничить время ожидания ввода? Да! Надо вкрутить какой-нибудь таймер, который бы делал что-нибудь полезное — разрывал соединение, например.

Сторожевой таймер
Его задача закрыть поток. Это вызовет завершение операции потокового ввода.
Таймер запускается в отдельном треде из треда, который обслуживает запросы клиента.
Таймер, выждав заданное время, закроет стрим, если job() за время ожидания не установит флаг завершения операции done.
С флагом не все гладко. Рассмотрим ситуацию, когда job() завершится раньше, чем таймер.
По завершении job() адрес, по которому хранится done, станет невалидным, вочдог попытается прочесть данные и access violation.
Объявлять done глобальной нельзя. Так как за неё могут конкурировать другие треды, а этот факт потянет за собой мьютексы и прочие локи… Зачем плодить лишние сущности?
Нужно заставить job() дать возможность таймеру проверить done, т.е. не завершаться раньше сторожевого таймера. А значит нужен какой-то механизм синхронизации. В библиотеке boost::thread есть класс barrier. Он создается с параметром количества процессов, которые должны на каком-то этапе ожидать завершения работы остальных процессов, например, для получения всех необходимых результатов работа всех процессов. Как только все процессы подойдут к точке ожидания, все они разблокируются и начнут работать дальше. В нашем случае процессы просто завершатся.
Класс barrier создается в job(), а watch_dog() получает указатель на него в качестве параметра.

Модифицируем job():
namespace action
{
  void job(boost::asio::ip::tcp::iostream* stream)
  {
    int done = 0;
    int time_out = 30;
    boost::barrier barrier(2);  // два треда должны ждать друг друга
    std::string from_remote_side;
    ...

// запускаем сторожевой таймер на время достаточное, например, для 
// аутентификации клиента (в секундах)
    
    boost::thread thr(boost::bind(watch_dog, time_out, stream, &done, &barrier));

    *stream >> from_remote_side;  // ждем от клиента
    if (from_remote_side == "me") // явно упрощенная процедура авторизации ;)
    {
      done = 1;

       // здесь остальная реализация протокола
    } 

    if ( done ) // если нет, то поток уже закрыт сторожевым таймером
    {
      stream->close();
    }

    delete [] stream; // !!!
    barrier.wait();  // если завершаемся раньше, чем сторожевой таймер, то ждем его
    std::cout << "The end" << std::endl;
  }
}

Cторожевой таймер использует класс deadline_timer из библиотеки boost::asio и класс seconds из boost::date_time.

thread.cpp
namespace action
{
  void watch_dog ( int wait_time, boost::asio::ip::tcp::iostream* stream, 
                   int* done, boost::barrier* barrier )
  {
    boost::asio::io_service io;
    boost::asio::deadline_timer t(io, boost::posix_time::seconds(wait_time));

    t.wait();             // за это время должна завершиться операция
 
    if ( !*done )
    {
      stream->close();   // закрыть поток
      std::cout << "Goof!" << std::endl;
    }

    barrier->wait();         // ждем когда отработает родительский тред
  }
}


Важно: job() и watch_dog() должны быть в одном файле.

Решение проблемы кодировок для AJAX и PHP без iconv

Вступление:


Многие, не исключая автора, сталкивались с проблемой, когда нужно использовать одновременно php и ajax в web проекте, написанном с использованием однобайтовой кодовой страницы (cp1251, koi-8, cp866, cp1252, latin-1 и т.д.). Все находили известный тезис что «AJAX работает только с UNICODE».
Попробуем разобрать проблему и найти решение.

Для нетерпеливых читателей скажу, что решение есть в виде написанной функции “encodeFormField”, которая работает с ЛЮБОЙ однобайтовой кодировкой. Эту функцию можно (нужно) использовать вместо escape или encodeURIComponent, после чего строковые данные доставляются до php в исходной кодировке (нет необходимости в использовании iconv в php скриптах).
Исподники (BSD License) можно загрузить по адресу:
www.viasoft.com.ua/js/encode_form_field.zip

Итак, задача:


1. Есть сайт, написанный на php
2. Кодировка html страниц сайта cp1251 (koi-8, cp866, cp1252, latin-1 и т.д.).
3. Нужно добавить AJAX функциональность, без необходимости переписывать php код

Лирика:


Как пишутся php скрипты обычно:

<body>
<form>
 <input type="text" name="my_field" value="Привет!" />
 <input type="submit" value="show me" />
</form>
<div>
<?
if (isset($_REQUEST['my_field']))
 {
  if ($_REQUEST['my_field'] == 'Привет!')
   {
    echo 'Напишите что-то поинтереснее!';
   }
  else
   {
    echo 'Получено:'.htmlspecialchars($_REQUEST['my_field']);
   }
 }
?>
</div>
</body>


Все работает, как и ожидалось:

Мы просто читаем данные запроса из массива $_REQUEST['my_field'] и получаем их в том виде, который ввел пользователь (если мы не забыли про «Content-Type: text/html; charset=windows-1251»).

Как это работает на самом деле:

1. Браузер передавая данные на сервер, кодирует символы текущей кодировки с кодами > 127 как последовательность байт в виде %{2 hex символа}. Например, в примере выше (для cp1251) мы увидим «test.php?my_field=%CF%F0%E8%E2%E5%F2%21». В этом случае CF — это код буквы «П» F0 — код буквы «р» и т.д.
2. PHP обрабатывает строковые данные «как есть», т.е. манипулирует строковыми данными как последовательностями однобайтовых символов, не пытаясь преобразовывать их в unicode (это скорее хорошо, так как это быстро). Поэтому последовательность байт %CF%F0%E8%E2%E5%F2%21 превратится в строку из 7-ми байт, что соответствует 7-ми символам слова «Привет!» в cp1251
3. Мы можем эту строку записать в БД, сравнить с другой строкой из таких же 7-ми символов и т.д.
Все это очень удобно, просто, так и хочется писать код дальше.
Собственно на php так это и делается в большинстве случаев.

А теперь JavaScript:


Допустим, мы хотим отправить на сервер HTTP request, сформированный в JavaScript (например, AJAX или даже простой location.replace переход) в котором поле query запроса будет кодироваться из JavaScript функцией.

Попробуем для кодирования поля из нашей формы применить функцию escape:


<body>
<form>
 <input type="text" name="my_field" id="my_field" value="Привет!" />
 <input type="button" value="show me" onclick="sendform()"/>
</form>
<div>
<script>
function sendform()
 {
  location.replace(location.pathname+'?my_field='+encodeURIComponent(document.getElementById('my_field').value));
 }
</script>
<?
if (isset($_REQUEST['my_field']))
 {
  if ($_REQUEST['my_field'] == 'Привет!')
   {
    echo 'Напишите что-то поинтереснее!';
   }
  else
   {
    echo 'Получено:'.htmlspecialchars($_REQUEST['my_field']);
   }
 }
?>
</div>
</body>


Как видим, «escape» не подходит:

Вместо:
test.php?my_field=%CF%F0%E8%E2%E5%F2%21
На сервер передается:
test.php?my_field=%u041F%u0440%u0438%u0432%u0435%u0442%21

В чем же дело?

«escape» кодирует символы с кодами > 127 из исходной кодовой страницы как %u{4 hex символа(unicode)} и php не распознает такую кодировку (что логично, вспомним, что строки в php это просто последовательности байт).

Попробуем применить вместо escape функцию encodeURIComponent:

Заменим:
location.replace(location.pathname+'?my_field='+escape(document.getElementById('my_field').value));
на:
location.replace(location.pathname+'?my_field='+encodeURIComponent(document.getElementById('my_field').value));

Как видим, «encodeURIComponent» тоже не подходит:

Вместо:
test.php?my_field=%CF%F0%E8%E2%E5%F2%21
На сервер передается:
test.php?my_field=%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD!

В чем же дело?

«encodeURIComponent» кодирует символы с кодами > 127 из исходной кодовой страницы путем перевода их в UTF-8 и затем передает их как последовательность %{2 hex символа}.
Примечание: Аналогично работает с символами > 127 функция encodeURI, впрочем она не подходит для url компонент.

Причина проблемы:


1. В JavaScript все строки представляются в unicode (именно так: При любой загрузке JavaScript кода, все строковые константы в нем автоматически переводятся в unicode).
2. В JavaScript нет других функций, которые кодируют строки параметров url, кроме escape и encodeURIComponent

Собственно вот мы и видим причину, по которой так много пишется что «AJAX работает только с UNICODE».

Существующие варианты решения:


1. Конечно, это не проблема, если весь сайт в UTF-8 или если его можно перенести в UTF-8, но это большой кусок работы и это не всегда возможно.
2. Можно использовать на PHP стороне функцию iconv для того чтобы перекодировать UTF-8 в нужную кодировку, но это не удобно (в частности, нужно просмотреть все обращения к аргументам) — хотя это наиболее часто рекомендуемый способ.

Как решить проблему проще:


Нужна JavaScript функция, которая кодирует данные также, как и браузер, тогда можно писать на php «как обычно».
Фактически, нужна функция которая использует таблицу перекодировки UNICODE -> текущая кодовая страница.
Существуют решения, которые реализуют такое преобразование для некоторых кодировок, но они не универсальны.

Решение:


После нескольких дней экспериментов, было найдено универсальное решение — функция encodeFormField, которая работает в любой однобайтовой кодировке (cp1251, koi-8, cp866, cp1252, latin-1 и т.д.).
Это и было опробовано в нескольких проектах.
Загрузить скрипт можно отсюда:
www.viasoft.com.ua/js/encode_form_field.zip

Основная идея:

0. Используем браузер для построения таблицы перекодировки unicode -> текущая кодовая страница:
1. javascript файл содержит строковую константу, которая содержит символы с кодами от 128 до 255 включительно.
2. Броузер загружает эту строку и преобразовывает ее в unicode в ТЕКУЩЕЙ кодировке.
3. Когда нужно преобразовать символ с кодом > 127 из ТЕКУЩЕЙ кодировки, ищется его позиция в этой строке.
4. Найденная позиция+128 и будет искомым hex кодом символа и она используется для кодировки url (или post) компонента запроса.

Как пользоваться:

1. Подключите encode_form_field.js
2. Используйте функцию encodeFormField(text) вместо escape(text) или encodeURIComponent(text) и получите правильную кодирование символов для однобайтовых кодировок.

Комменты приветствуются.

Успехов!

PS:
НЕ РЕКОМЕНДУЕТСЯ использовать copy-n-paste для того, чтобы вставить этот код к вам на страницу, так как большинство редакторов «сломают» строку преобразования. По этой же причине редактировать исходный файл нужно с осторожностью. Лучше загрузить файл из архива и использовать его на вашем сайте.

PPS:
Скрипит публикуется под BSD License, так что если есть идеи как все это улучшить — welcome!

Концепция интеллектуальной операционной системы

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

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

Обычно все дело сводится к оптимизации. Являясь «продвинутым» пользователем, стараешься все оптимизировать. Создавать ссылки поближе, добавлять ярлыки в автозагрузку, а то и «скрипты» писать, или вообще, программы, пользоваться различными «помогающими» программками.

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

Например, в Windows (вижу ваши тухлые помидоры) нет понятия «относительного ярлыка». Допустим, я хочу создать ярлык в корне съемного диска на файл или программу, находящуюся где-то в дебрях подпапок этого же диска. Создам, и? Подключив устройство на другой ОС, где этот диск отмечен уже другой буквой, ярлык не будет работать. При попытке убрать букву диска из пути ярлыка (т.е. попытаться сделать его «относительным»), Windows просто скажет вам, что что-то вы странно поступаете, он так не умеет. И не каждый пользователь догадается написать bat-файл. Существует множество и других неудобств в различных операционных системах.

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

С задачами управления действиями ЭВМ и периферийными устройствами современные ОС справляется превосходно. API есть, драйверы есть. А вот взаимодействие с пользователем – тут над этим работать да работать.

Прошло не мало времени, с развития операционных систем, а банальные неудобства, так и остаются. В каждой новой ОС мы видим множество «примочек», «удобств», которые, может быть в большинстве своем, и упрощают жизнь, но, благодаря своему появлению порождают еще несколько «неудобств». Затрачивая при этом ресурсы вычислительной машины, заставляя пользователя разбираться в чем-то больше, чем ему нужно – еще один факт, который лично меня раздражает.

Времена, когда ЭВМ выводили результаты своей работы на ряд световых индикаторов – лампочек или печатали на ленты, ушли давно. Я их и, слава богу, и не застал. А вот с DOS поработать пришлось. Набор команд с консоли, пакетные файлы… Да здравствует Norton Commander! Windows 3.11 я тоже не затронул. Знакомство с Windows у меня началось с версии 95. Про Unix и Linux я тогда не слышал вовсе. Работать мышью мне понравилось. Но позже я понял, что если хочешь делать что-то быстро, то без клавиатуры и «горячих» клавиш никуда.

К чему пришли сейчас? Прозрачные окна. 32-х битная цветовая палитра значков, от которых глаза разбегаются, сразу и не поймешь, что нажимать. Множество рабочих столов в Linux. KDE 4 и сногсшибательный 3-мерный рабочий стол. И множество всяких полезных и бесполезных примочек вроде колышущихся окон, эскизов закладок, наглядное представление свободного места на дисках и т.д. Красиво, да, кого-то притягивает. Но все это на одном уровне.

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

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

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

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

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

Дальше – больше. Представьте, если программистам не придется писать драйверы. Интеллектуальная операционная система через пару дней сама поймет, как пользоваться принтером после N вызовов на порт и сканируя результат. Интересно?

Соответственно, следить за своим состоянием (или самочувствием) и излечиваться от всякой «нечисти» ОС тоже должна самостоятельно.

Попробуем же дать определение интеллектуальной ОС.

Интеллектуальная операционная система – это операционная система, способная самостоятельно находить оптимальное взаимодействие с пользователем и аппаратными средствами вычислительной машины.

Какой она будет? На базе какой ОС? Простор для деятельности большой и пока необъятный.

2 месяца с Ubuntu 9.10

Решил написать этот пост после прочтения нескольких постов, положительно отзывающихся о Ubuntu 9.10

Еще начиная с Убунту 8.04 иногда ставил себе эту систему чтобы просто посмотреть, что да как организовано. Обычное любопытство. Но в прошлом году, примерно в декабре месяце, у меня Windows перестала работать с сетью (это отдельная история, проблема была в материнке). Мне посчастливилось, на моей флешке был записан Live CD Ubuntu 9.10. Загрузившись с нее я был удивлен — сеть прекрасно работала.
В этот период мне нужно было писать диплом, и разбираться с компом не было особо времени. Я решил поставить Убунту, и с нее писать диплом. Уточню, что рассматривать Убунту буду со стороны студента технического ВУЗа.
Первую неделю я потратил на установку различного софта. Несколько слов о проблемах с этим самым софтом.
Скайп.
Скачал последнюю его версию, все классно. Но. При его использовании столкнулся с такой проблемой. Если приостановить разговор, то возобновить его не получится — «громкость» микрофона на 0. И через Alsa mixer во время использования не получается повысить чувствительность.
Офис.
В плане использования ОО очень даже неплох. Особенно порадовала функция с помощью которой можно вносить комментарии к вставленному тексту. Но на этом все радости закончились. При открытии файла docx его форматирование было ужасным. Часть текста съехала в одну сторону, часть в другую. Таблицы вообще перестали являть собой что-то понятное. Пришлось все это исправлять. Про интерфейс я не буду уже ничего говорить т.к. есть люди, которым нравится интерфейс типа 2003 Офиса. Мне лично интерфейс 2007 более удобный.
Аудиоплеер.
Ну тут все замечательно, кроме поддержки кодировки win1251 в тегах. Мне лично совершенно непонятно зачем мне, рядовому пользователю заморачиваться в этими кодировками. В windows foobar прекрасно читает и Юникод и вин1251.
Видеоплеер.
Вот с видеоплеерами в Линуксе явные проблемы. Конечно же нету моего любимого Kmplayer. Но ладно, должны же быть нормальные видеоплееры в линуксе. Вначале я попробовал VLC, который у меня как минимум год стоял под виндой. Но вот в чем незадача, он или зависал, или просто вылетал. При этом иконка плеера (я использовал Dockbar) не исчезала при закрытии этой программы.
Перешел на Smplayer. Не зависал. Но использование «всплывающей» панели управления было неудобным — после нажатия паузы проигрывание не запускалось нажатием кнопки Play. Приходилось нажимать Стоп, и заново плэй. Терпеть более менее можно.
IM клиент.
Мой любимый клиент — Miranda. Пытался найти ее аналог в Линуксе. Нашел что-то более менее подходящее — Qutim. И снова столкнулся с проблемами: не передавались файлы в названии которых содержатся русские символы, при передаче мне файла открывалось диалоговое окно, где предлагалось открыть файл или закрыть окно. При нажатии кнопки Открыть ничего не происходило. Это ужасно раздражало.
Вы конечно можете мне сказать, что можно было использовать другой клиент типа Pidgin, Kopete и т.д. Но я люблю красивый, удобный мне интерфейс. В Копете, например, ужасно неудобный контакт лист. Пидгин некрасивый, ну и т.д.
Аналог Autocad.
Правильнее будет сказать, поиски аналога Автокад. Фактически, ничего нормального, удобного я не нашел. Руководствовался в основном удобством и минимум переучивания. Все испробованные мной программы были или неудобны или требовали много времени чтобы переучиться.
Аналог MathCad.
Тут все еще веселее, чем с Автокадом. Аналогов нету.
Gimp
Тут я не буду рассказывать, что ФШ лучше. Мне непонятно удобство использования этого редактора с кучей окон. Я постоянно переключаюсь между окнами Alt-Tab, и как одновременно можно пользоваться другими программами мне непонятно.
Virtual Box.
Решил в виртуалку загнать виндоус для установки там Маткада и Автокада. Установил, запустил, поставил винду туда. Все круто, все работает. На следующий день запускаться отказалась ссылаясь на какую-то ошибку. Поиск в гугле ничего не дал.
3Д игры.
Работать отказались т.к. драйвера, которые предлагает Убунту не работают с 3Д. Ати уже прекратила поддержку «старых» видеокарт.
Интерфейс Гнома.
Вначале я поражался как классно все реализовано. Как удобно, интуитивно понятно. Но и у него есть свои недостатки. Меню Переход. После того как я добавил в «избранные ссылки» в районе 10 папок, уже стало неудобна навигация через это меню, особенно, когда подключено несколько девайсов через ЮСБ.
Расшаривание папок с ноутом, на котором стоит семерка, так же было неудобным. Сразу после настройки все прекрасно работало. Но после перезагрузки зайти на комп с ноута не получалось. Приходилось заново определять папки для расшаривания через ГУИ Самбы.

На удивление не возникло почти никаких проблем с установкой драйверов на МФУ. Вот только ссылку на скачивание этих драйверов пришлось получать у саппорта Самсунга по имейлу.

Это основное с чем я сталкивался. Еще немного про саму Убунту. За 2 месяца ее использования у меня 2 раза падал X.org. Первый раз после установки какой-то программки для изменения интерфейса (сделать ею ничего не успел еще). Просто после перезагрузки иксы отказались запускаться. Второй раз после установки Vmware. Так же установил и после перезагрузки иксы не запустились. Оба раза ошибки указывали на проблемы с драйверами к видео. Видеокарта у меня X1950 Pro.

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

P.S.
Через 2 месяца я с удовольствием перебрался в винду.

Google App Highlights. Кратчайший обзор новых фич Гуглосервисов

Всем привет!
Являясь любителем служб известной Корпорации Добра, я подписан на некоторое количество англоязычных Гуглоблогов, чтобы всегда можно было вкусить «тепленького», с первых рук. И есть одна серия регулярных постов, называемая Google Apps Highlights, в которой описываются новинки Служб Google — такой себе краткий обзор последних наработок. Здесь я его попытался чуть переиначить и выдаю на съедение любопытствующим. Итак…

1. Gmail
Долгожданный и довольно давно выпрашиваемый на справочном форуме Gmail функционал ручного обновления POP-аккаунтов явился в виде Lab-функции!
Читать дальше →

Реализация MVC на C++

Паттерн MVC является одним из архитектурных паттернов, предназначением которого является разделение логики, представления и управления.

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

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

Итак, для реализации MVC нам понадобятся еще 2 паттерна, таких как Observer/Наблюдатель и Command/Команда.

В простейшей реализации будет достаточно, чтобы Модель просто наследовала класс Observable для оповещения Представления, которое в свою очередь будет наследоваться от класса Observer. Контроллер должен будет реализовывать метод Execute(), который будет принимать объект класса Command. Представление, в свою очередь, должно будет предоставить реализацию метода Draw().

Итого, интерфейсные классы будут выглядеть следующим образом(т.к. модель требует только наследования от Observable — здесь я её не указываю):

class Command
{
public:
virtual void run(PlayerModel* model) =0;
};

class Controller
{
public:
virtual void execute(Command* command) =0;
};

class View: public Observer
{
public:
virtual void Draw() =0;
};

Сам пример реализации


В качестве примера реализации легче всего будет взять класс игрока (объект, который будет задаваться координатами x и y), которого можно будет двигать и отображать на экране:

class PlayerModel: public Observable
{
int m_x, m_y;
public:
PlayerModel(int x, int y): m_x(x), m_y(y){}
int GetX(){
return m_x;
}
int GetY(){
return m_y;
}
void IncX(){
m_x++;
Notify();
}
void IncY(){
m_y++;
Notify();
}
};

class MoveCommand: public Command
{
int m_type;
public:
typedef enum {UP, RIGHT} direction;
MoveCommand(int type): m_type(type){}
void run(PlayerModel* model){
switch (m_type){
case MoveCommand::UP:
if (model->GetY() < 640)
model->IncY();
break;
case MoveCommand::RIGHT:
if (model->GetX() < 800)
model->IncX();
break;
}
}
};

class PlayerController: public Controller
{
PlayerModel* m_model;
public:
PlayerController(PlayerModel* model): m_model(model){}
void execute(Command* command){
command->run(m_model);
}
};

class PlayerView: public View
{
class Circle
{
int m_x, m_y;
int rad;
public:
void Draw(){
cout << «I'm circle, with coordinates » << m_x
<< " and " << m_y << "!" << endl;
}
void SetX(int x){
m_x = x;
}
void SetY(int y){
m_y = y;
}
} *m_circle;
public:
PlayerView(){
m_circle = new Circle();
}
~PlayerView(){
delete(m_circle);
}
void Draw(){
m_circle->Draw();
}
void Update(Observable* obs, Argument *arg){
PlayerModel* model = static_cast<PlayerModel*>(obs);
m_circle->SetX(model->GetX());
m_circle->SetY(model->GetY());
Draw();
}
};

int main()
{
PlayerModel* player = new PlayerModel(300, 500);
Controller* playerController = new PlayerController(player);
View* playerView = new PlayerView();
Command *up = new MoveCommand(MoveCommand::UP),
*right = new MoveCommand(MoveCommand::RIGHT);
player->AddObs(playerView);
playerController->execute(up);
playerController->execute(right);
delete player;
delete playerController;
delete playerView;
delete up, down, right, left;
}


(для экономии места реализацию паттерна Observer не выкладываю)

Как можно заметить главная зависимость Представления от Модели существует только в методе Update. В этом методе мы переводим данные модели на уровень данных Представления. Таким образом, можно менять способы Представления, совершенно не беспокоясь об исходной моделе.

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

Модель необязательно должна представлять собой только один класс. Она также может быть группой нескольких классов. Например, в модель из примера, мы могли бы добавить еще одного игрока или препятствия.

Для большего удобства работы с MVC можно будет воспользоваться паттерном Facade/Фасад, либо агрегировать Контроллер в Представление (очевидно, что при этом повысится связь между ними).

iRevolution или «Яблоко Раздора»



Apple официально заявил что iPad (iPhone) поддреживать технологию Flash не будет. Причина — Flash требует слишком много ресурсов и имеет нестабильный код. Adobe в свою очередь прекратила свою работу и всяческие заявление о «iPhone-пакете» который успешно переводил Flash в iPhone нэйтив код.

Стартуя iPad в Марте-Апреле без Flash (70% сайтов используют Flash для интерактивной рекламы и видео) Apple скорее всего намеренно создает критическую ситуацию чтобы побольше наделать шума и заявить о своем доминировании на рынке догоняя Microsoft, подкравшись к нему со стороны hardware (MS $250BL, Apple-$200BL). Налицо стремление Apple взять реванш и отыграться за годы прозябания на грани банкротсва. Apple бравирует тем что он хорошо изветен как «убийца» старых технологий (выпуск первого iMac без флоппи диска, MacAir вообще без CD и т.д.), однако вопрос о том что Flash действительно «помрет» в ближайшее время всетаки вызывает большие сомнения.

Да и вообще о Flash-ли, если присмотреться, идет речь?

— Adobe может «тихо» выпустить свой Flash-CS5
— Adobe может выпустить следующую версию «проигрывателя»
— Кто то «левый» может придумать заплату
— Может новый Quick Time появится
— Несомненно начнется активный перевод Flash slide-show на аналогичные AJAX-шоу, тем более что тенденция наметилась еще раньше.

В любом случае этой заплатой врят-ли будет HTML5. Apple и многим другим нравится кивать на html-5, но это скорее всего «долгая песня». Может ли IE оказаться под угрозой потери рынка даже если все кинутся на Пятерку кроме него? Может, но в это трудно поверить. Аналоги уже были, но корпоративная Америка продолжала юзать IE так как с потрохами в заложниках у MS.

Другой вопрос насколько реальны аппетиты Apple? Уже очень напоминают последние заявления Apple майкрософтовское диктование правил для РС и Интернета. То есть насколько массовым может стать iPad?
Не наблюдается ли тут картина возникновения новой формации? Отпочкование от Персонального Компьютера (ПК\РС) нового понятия — Компьютер Потребителя (КП\CC) когда десктопы и лаптопы останутся только в бизнес секторе, а народ повалит на «таблетки»?

Тут уже и сам Apple не так будет важен. iPhone породил массу гибридов, а iPad идет проторенной дорожкой и за этим «паравозом» кинутся очень многие, тем более что ряд компаний еще раньше начали работу в этом направлении, а некоторые даже с большим успехом (параметрами).

Рамка цен iPad $500-800 за машину которая включает все что нужно рядовому потребитею, то есть намного дешевле любого лаптопа, превышая многократно любого из конкурентов по hardware/software дизайну. То есть учитывая опыт успеха iPhone, с 99% уверенностью можно сказать что iPad ждет «таже участь» — но если в ситуации с iPhone речь шла о телефонных сервисах, что реального бизнеса касалось в очень малой степени, то в ситуации с iPad мы можем получить факт массового перехода потребителей на новую РС\Интернет Платформу, а это уже 100% касается нас, потому что так или иначе, а все мы тут завязаны на конечного потребителя который «вдруг» начинает видеть плоды нашего творчества «другими глазами».

Что день грядущий нам готовит?

Как стать великим манипулятором и завоевать мир

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

Теперь же ситуация резко изменилась: мало того, что труды выдающихся ученых нынешнего и прошлого столетия представлены к нашим услугам, в дополнение к ним, в любом магазине вы обнаружите стенды, ломящиеся от книжек в ярких обложках, призванных помочь читателям самостоятельно разобраться с психологическими проблемами. Это очень радужное положение вещей, ведь в нашей стране институт семейных психологов пока не прижился. Хотя добрый Андрей Курпатов и демонстрировал многомиллионной аудитории телезрителей, что не так страшен черт как его малюют, лихо расправляясь с чужими комплексами и лучезарно улыбаясь в камеру, для многих все равно неприемлемо изливать душу постороннему человеку. Совсем другое дело в одиночестве полистать умную книгу, отыскав в ней свой собственный диагноз, получить практический совет на животрепещущую тему. Правда, чаще всего самолечение приносит больше вреда, чем пользы, но кто из нас об этом думает, заглатывая, к примеру, упаковку «препаратов нового поколения», чтобы победить хворь и не брать больничный.

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

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

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

А сколько войн было выиграно благодаря военным хитростям! Но литература литературой, история историей. Вернемся к нашей обыденной жизни, где манипуляция играет роль защиты от самодурства правителей, тирании руководителей, дурного характера коллег или родственников. Достаточно привести несколько примеров, чтобы осознавать сколь часто приходиться выступать в роли манипулятора или жертвы. Заметьте, читая газету и покупаясь на личное мнение журналиста, мы видим факты с субъективной точки зрения, авторской, и, тем не менее, воспринимаем ее как свою собственную. Попадая в огромный торговый центр, становимся жертвами рекламы и, зачастую, покупаем совершено ненужные вещи. Поддаваясь на богатые обещания очередного народного избранника, отдаем ему свой голос. Аферисту – собственные деньги. Великие гении манипуляции вершили судьбы мира, искусно управляя толпой. Факты говорят за себя: где государство – манипуляции неизбежны. Более того, и в личной жизни мы сталкиваемся с манипуляциями. Достаточно помянуть несколько незамысловатых сюжетов.

Мама в пятый раз объясняет непонятливому чаду, как решать домашнее задание по математике. Дитя совершенно искренне морщит лоб и изображает усердие, но не способно решить ни одного примера. Уставшая родительница со вздохом сама делает все задания, только бы скорее избавиться от этого занудного мероприятия. Ребенок сидит рядом с благонравным видом и тихо радуется.

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

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

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

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

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

Что же такое психологические манипуляции? Так ли они ужасны и стоит ли от них излечиваться? Можно ли прожить, никогда с ними не сталкиваясь? И, главное, как устоять перед чужим напором, не поддаться на хитрости оппонента и не пугаться собственной доверчивости?

Через века передавалось это искусство, тщательно скрываемое от представителей других народов. Было создано своеобразное хранилище данных, в котором обобщены и классифицированы в виде метафорических схем методы манипулятивного воздействия и разработан определенный методический подход по их использованию в различных ситуациях, что в концентрированном виде нашло отражение в «Трактате о 36 стратагемах». Само понятие «стратагема» означает стратегический план, в котором для противника заключена какая-либо ловушка или хитрость, в зависимости от контекста китайские иероглифы могут выступать в различных значениях… нас в них интересует выступающие в определенных типах текстов два значения: 1)военная хитрость и 2)хитрость, уловка в политической и частной жизни.

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

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

Схожую точку зрения проповедовал и Николо Макиавелли, автор манипулятивных правил, которые, по его мнению, непременно обеспечат процветание государства и победу над неприятелем.Он по достоинству оценил пользу психологических воздействий на сознание подданных, но Макиавелли был невысокого мнения о своих собратьях, считая людей лживыми и неблагодарными существами. Потому и обращаться с ними предлагал соответствующим образом. Чтобы держать в повиновении своих подданных, государю вменялось уметь отступать от добродетели, когда того требует государственное спокойствие. Главное — видимость, иллюзия. Политика манипуляций по Макиавелли должна быть гибкой и долговременной.

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

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

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

Надо сказать, что именно фашистская Германия привнесла в эту науку основные практические заветы и с большим рвением апробировала на людях. Не зря в юности Адольф Гитлер некоторое время работал рекламным агентом. Полученные навыки пригодились ему в построении собственной политики. Грамотно проведенная рекламная кампания способствовала его огромной популярности и всенародной любви. Он всего лишь удачно сыграл на слабостях своей паствы. Вооружившись психоанализом Зигмунда Фрейда, дополненным и улучшенным им самим.

Адольф Гитлер первый в истории человечества систематизировано и целенаправленно использовал научные изыскания в области воздействия на человеческую психику. Большинство изысканий базировались на учении Фрейда, использованном для подтверждения избранности немецкого народа. Пока отец психоанализа открыто не открестился от «избранника немецкой нации». Гитлер обращался не к разуму толпы, он умело играл на человеческих инстинктах, усугубляя их рядом ритуальных действий. Как известно именно ритуальные практики создают ощущение духовной близости и причастности к чему-то особенному. Умелое управление позволило ему под гнетом инстинкта объединить разношерстную толпу в единое, безликое чудовище. Теория же была как нельзя проста, взята из рассуждения З.Фрейда: вождь-мужчина при помощи бьющей через край харизмы очаровывает женщину-толпу:

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

Позже Эрик Фромм отмечал, что самоутверждение властителя зиждется на его идеализации, которая является ни чем иным, как попранием свободы каждого индивида. Самопожертвование, по его мнению, всегда останется одной из величайших трагедий человека. Смерть ведь не может принести удовлетворения, за какие бы святые идеалы не предлагалось ее принять. Гитлер же как нельзя лучше усвоил универсальность главного фрейдистского закона — сексуального инстинкта. Эрос не сексуальный рефлекс, эрос, прежде всего, влечение. Это был второй столп после инстинкта смерти, который использовал Гитлер.

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

Ученик Фрейда Э.Дихтер в конце 30-х годов переселился на территорию США. Там он создал «Американский институт по изучению мотивации поведения», став рекламным гением и играя на инстинктах толпы ради огромных продаж. Именно он явился основателем современных рекламных трюков, поставив не на функциональность товаров, а на сокровенных желаниях и инстинктах, таящихся в глубине души каждого человека. Реклама, по его мнению, сама должна была создавать потребность в товаре. Видя победное шествие гения рекламы, впоследствии и политики заинтересовались его разработками. Теперь и политические деятели превратились всего лишь в товар. Таким образом, манипулирование человеческим сознанием обрело полноценную научную базу и стало самостийной отраслью психологии.
Расцвет «Добродетельной лжи»

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

Но давайте все же сформулируем для себя понятие манипуляция. Собственно, если собрать воедино все трактовки, то можно получить определение манипуляции как обращения с объектами с определенными целями или намерениями. Социологический словарь гласит: «Манипуляция психологическая [лат. manipulatio — пригоршня, горсточка, ручной прием] — вид психологического воздействия, используемого для достижения одностороннего выигрыша посредством скрытого побуждения кого-то…»

А вот словарь Ушакова предлагает другую версию:

«1. Движение руки (устар.). 2. Сложный прием, сложное действие над чем-н. Химик производил непонятные для непосвященных манипуляции. 3. Проделка, махинация (неодобрит.)».

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

Итак, главная особенность манипуляции состоит в том, что манипулятор стремится скрыть свои намерения от жертвы. Объект же воздействия должен не только пребывать в неведении относительно видов на себя, но и пребывать в уверенности, что свобода выбора была за ним, и он сам принял данное решение.Любимые нами с детства сказки, и те, в качестве основных элементов интриги, часто используют ложь, хитрости, ловушки: солдат получил от жадной старухи все необходимое для обеда, пообещав сварить кашу из топора, Лиса трижды выманивала из избы Петушка, пока не утащила с собой доверчивую птичку. Лиса, скажете вы, эта рыжая бестия всегда и везде предстает в роли коварной хитрюги, что здесь удивительного. Тогда вспомним сюжет известной сказки об Иване-ца­ревиче и Волке, который выстроен на воровстве и подлоге. Сначала Иван дважды не внял инструкциям Волка, соблазнившись на богатство. Если это была манипуляция с его стороны, то она удалась как нельзя лучше: в третий раз Волк самостоятельно отправился на дело, и лично провел операцию по похищению царевны. Любой из нас, поворошив собственную память, вспомнит множество сказочных историй про хитрецов и обманщиков, авторских и народных.

Как не восхититься находчивостью Тома Сойера, блестя­щая выдумка которого позво­лила ему, не прикладывая рук, побелить весь забор, да еще приобрести множество ценных для него безделиц. Том с помощью имитации (как фокусник или актер) удовольствия и вдохновенности в работе, которая самому ему представля­ется рутинной, достиг сразу двух целей. С одной стороны, обеспечил себе удобную позицию, защищающую его от насмешек приятелей, тем, что представил крашение забора не как работу, а как творческое увлекательное занятие: «Разве мальчикам каждый день достается белить заборы?”. А с другой стороны, возбудил зависть и интерес к работе у друзей, чем добился основной манипулятивной цели — приятелям захотелось делать то, что Тома тяготило. Тонкость, на которой он сыграл, заключается в разном отношении к работе и к игре: „Работа есть то, что мы обязаны делать, — говорит в авторском анализе данного эпизода Марк Твен, — а Игра есть то, что мы не обязаны делать”. И как только Бен — первая жертва Тома — захотел поработать, Том, чтобы закрепить и развить успех, начал притворно отказывать в прось­бе, разжигая его желание. М. Твен объясняет действие дан­ного приема следующим законом, управляющим поступками людей: “Чтобы взрослый или мальчик страстно захотел об­ладать какой-нибудь вещью, пусть эта вещь достанется ему возможно труднее».

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

Reactive Extension (Rx) для начинающих (часть 1)

Первая часть перевода серии статей о Reactive Framework. Автор Bnaya Eshet.

Что такое Reactive Framework Extension?


Rx представляет собой push-модель событийно-ориентированной коллекции на основе IEnumerable<T>. Фреймворк включает в себя интерфейс IObservable<T>, аналог IEnumerable<T> и IObserver<T>, аналог Enumerator<T>.

Copy Source | Copy HTML
  1. // Summary:
  2. //     Represents a push-style collection.
  3. public interface IObservable<T>
  4. {
  5.     // Summary:
  6.     //     Subscribes an observer to the observable sequence.
  7.     IDisposable Subscribe(IObserver<T> observer);
  8. }


Copy Source | Copy HTML
  1. // Summary:
  2. //     Supports push-style iteration over an observable sequence.
  3. public interface IObserver<T>
  4. {
  5.     // Summary:
  6.     //     Notifies the observer of the end of the sequence.
  7.     void OnCompleted();
  8.     //
  9.     // Summary:
  10.     //     Notifies the observer that an exception has occurred.
  11.     void OnError(Exception exception);
  12.     //
  13.     // Summary:
  14.     //     Notifies the observer of a new value in the sequence.
  15.     void OnNext(T value);
  16. }


На самом деле мы имеем шаблон push-коллекции(коллекция может быть бесконечной),
которая может передавать данные в наш объект IObserver<T>. Имея такой шаблон,
мы можем применять LINQ к подобной коллекции. Более детально IObservable<T>
и IObserver<T> будут рассмотрены во второй части.

Interactive (IEnumerable<T>) Vs. Reactive (IObservable<T>)


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


Итоги


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

Как начать работу с Rx


Библиотеку можно взять здесь. Доступны версии для .NET 3.5 и 4.0
В проекте необходимо добавить ссылку на System.Reactive.

IT-компании + студенты = хорошие IT-специалисты

Был вот такой пост. В самом первом комментарии к нему было написано, цитирую: «Ваши домыслы очень красивы, но в реальной жизни все немного иначе». Хочу рассказать свою историю (и своего ВУЗа), опровергающую данное высказывание комментирующего.

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

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

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

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

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

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

Надеюсь, мой пост был вам полезен.

Доступ к *NIX файловым системам на чтение/запись из Windows

Приветствую тебя %username%!
У тебя на компьютере двойная загрузка windows/*nix?
У тебя возникала потребность в доступе к файловым системам *nix из под Windows?
Если да, то прошу под кат, я расскажу как можно получить доступ на чтение запись для таких фс!
Читать дальше →

Проблема с паролями

А в чем собственно проблема?


У вас бывает такое, что когда вы вводите пароль, он не подходит, хотя вам кажется что вводили вы все верно? После этого начинаешь раздражаться и злиться, пароль увидеть нельзя, потому что по стандарту поле типа password закрыто звездочками. Всем известный Якоб Нильсен (специалист по web-usability) предложил решение данного вопроса: “Показывать пароль открытым при его вводе”. Многие не согласны с эти категорически, да и я тоже. Безопасность все же не должна страдать ради удобства, хотя Нильсен говорит об обратном. Ну что ж попробуем выйти из положения и совместить безопасность и удобство. Как говорится “все уже придумано до нас”, поэтому не будем изобретать велосипед, а просто вспомним поля ввода паролей.
Читать дальше →

Final Fantasy XIII на Xbox 360. Что получилось?

image Прошло четыре с половиной года со времён релиза Final Fantsy XII. Четыре с половиной года фанаты серии и просто остальные люди ждали тринадцатую часть величайшей серии игр в жанре JRPG. Публика жадно поглощала все пресс-релизы, скриншоты, видео и даже небольшие заметки. Всё же игра выходила на PS3 — консоли нового поколения и все от неё ждали невиданного доселе размаха и визуальной составляющей, которая судя по ранним скриншотам обещала переплюнуть на несколько сот голов всё ранее виденное нами. Однако спустя некоторое время ажиотаж поутих и к процессу разработки новой части серии стали относиться как и ко всем другим разработкам.
но так было до тех пор, пока не грянул гром, да такой силы, что его услышали все — квадраты заявили о том, что игра не станет эксклюзивом для PS3 и также появится на Xbox 360. Началась вторая волна ажиотажа, которая не стихала ещё дольше, чем первая. Но годы шли, шли и выставки вроде E3 и прочих, а сроки выхода отодвигались с каждым днём всё дальше и дальше.
Не так давно игра всё же вышла на золото. Но только на японском и только на PS3. Мультиплатформы с европейской версией на Xbox 360 пришлось ждать ещё несколько месяцев. Но всё плохое, как последние месяцы, всё же кончается и релиз для консоли дядюшки Баллмера вышел на прилавки.
Так что же получилось?

Как добавить новое измерение в рабочее место и к чему это приведет…

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

По ряду причин, выходящих за пределы обсуждения в в данном материале, на работе у меня были закуплены комплекты для просмотра стерео-контента, а именно мониторы с 120Гц разверткой и очки nVidia 3DVision. для тех кто еще не слышал про такое поясню. Принцип прост — очки мигают, закрывая поочереди глаза зрителю, а монитор синхронно с ними показывает поочереди разные картинки для левого и правого глаза соотвественно. Дальше наш моск уже сам выстраивает картину мира в виде полноценного 3х-мерного изображения. Но все ли так гладко? Ан нет!

Немного отступлю от рассказа и сказу, что проблема не с железом — ано топовое и самое современное на сегодня. i7 Extreme, Quadro 5800 и 24Г памяти — и все это под Win7 х64 (кажется профессиональная). Тоесть говорить о несовместимости думаю лучше не стоит.



Комплект состоял как уже говорилось из монитора и очков. Очки же это 2 блока: сами очки и модуль синхронизации втыкаемый в USB. Достал, воткнул, перегрузился, поставил дрова и… и ничего не заработало…

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

И вот встал вопрос — а что теперь с этим делать? Фотовьювер был любезно помещен инсталятором на рабочий стол, но где брать стереопары — тут я потерялся. Вспомнил, что на фишках дуквально недавно были полуголые тетки в стереопарах для любителей «скашивать глаза» (вариант просмотра стереопар без специальных списпособлений путем разсинхронизации взгляда — я так и не осилил этот способ). Достал картинку и… и увидел что стереопары сшиты в один кадр, а программа требует 2 разных картинки, а фотошоп мне не предусмотрел на рабоче месте. Выругался и порезал подрусчными средствами. Сложил фотки в разные слоты вьювера и… И сбежался народ поглазеть на трехмерную грудастую красотку на фоне моря…

Видеоплеера в комплекте не оказалось, а игрушки на работе это уже вершина наглости. Плеер был найден на сайте nVidia, где же к нему были и тестовые видео-ролики со стереопарами. Любопытно стало почему его не приложили на CD из коробки. Поставил, включил, развернул на весь экран и… и упали драйвера видеокарты! Перегрузился, включил плеер, закинул видео, развернул на весь экран и… и увидео плоскую даже не двоящуюся картинку… Множество перезагрузок и попыток хоть что-то завести — но итог один, либо вижу плоское изображение, либо все двоиться, но очки не мигают, либо вообще ничего не показывается, а повисает, мигает обоими экранами, переключается между режимами и вообще всячески мешает и раздражает.

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

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

Итог: глупо и бессмысленно. Идея хорошая, но реализация хромает — драйвера сделаны очень плохо. Все ломается и портиться даже в штатном режиме. Продукт пока не вызвал у меня никаких положительных эмоций. хотя до момента включения я был просто в востерге от превкушения того, что сейчас, через пару мгновений я смогу порвать привычные рамки плоского мира и добавить новое пространственное измеререние в свою повседневную работу…

Как я начинал свою деятельность в интернете

Привет хабр
Хочу поделиться с тобой, как я начинал свою деятельность в интернете. Так же надеюсь на инвайт от тебя ;)
Так вот…
Всё начилось неожиданно чуть более года назад, когда отец подогнал мне небольшой виртуальный сервачек с неограничинными

ресурсами, грубо говоря «поиграться» и посмотреть, что из этого выйдит. На сервере стоял CentOS в минимальной комплектации, но так как до этого я знал Linux На базовом уровне, мне хватило сил, что бы привести его в божеский вид.
Изначально мою был установлен апач и пошло дело с досканальным изучением его конфига, на предмет создания новых
виртуалхостов.

Но так как я был молодой, хотя я и сейчас в полне молод, я играл в такую игрушку, как Counter-Strike 1.6 и вот захотелось
мне сделать свой сервачек cs и посмотреть как будет себя вести железка, на которой всё находилось.
Всё шло просто отлично. Мой сервер развавался, добрые люди приводили новых игроков на сервер, рекламировали его. Забился 1 сервер на 32 игрока, второй, третий…

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

Всё работало идеально — аптайм с кажым днём рос, но продолжалось всё не долго…
Забыл ещё сказать, что у меня на сервер кроме серверов с игрушками хостилось несколько сайтов. Один из этих сайтов был
очень брутальный и все админы, где стоял сервер, неоднократно жаловались, что бы я удалил сайт. Естественно я после жалоб ничего не удалял, а просто проводил небольшой цензур с удалением/скрытия всего, что было не угодно.

Шло время… После 2-3 месяцев работы сервер опять повторяется так же история с пропажей сервера. Но в этот раз все админы

на месте, никто никуда не уезжал, все соседние сервера работают, а мой нет. Как же так?
Админ кормил меня обещаниями 1-2 месяца, после чего я уже смирился, что сервер мне никогда не вернут. Ну и б-г бы с ним, но была очень важна информация на нём, а именно все бекапы сайтов и баз :( Было конечно жалко, но деваться некуда.
Так и пропал мой первый серве. Правда досих пор и не понял по какойпричине… То ли стало жалко трафик, то ли настучали на сайт…

Сервера не было, игроки ныли, ничего не работало. Искалась срочно альтернативная замена. Ничего не оставалось, как поднять срочными мерами всё насвоём домашнем компе(Celeron 1.7). Интернеты у меня тогда ещё были асеметричные адсл'и со скоростью отдачей в 1 мегабит, чего даже не хватало на сайт, но всё как-то работало, с ужастными лагами но работало.

После месяца уныния и поиска альтернативной решение моей задачи я ничего не предумал, как купить интернеты и сервер и не собрать всё у себя. Уже 1 декабря у меня был собран сервер и куплен интернет у местного провайдера, предоставляющий доступ по Ethernet. Всё работало! Именно, то что я и хотел!

Кстати. В конце сентября я купил ноутбук и хотел подключать его к интернетам по wifi, да и старый celeron надо былоподключить к интернетам — было принято решение покупать роутер. Выбор пал на D-Link DIR-300.
Получилось, что все сайты крутились на сервере celeron, а уже игровые сервера на новом сервере.
Всё работало просто отлично, роутер не зависал, аптайм одного из сервера достиг 42 дней, после чего рубанули на 2 минуты электричество в квартире.

После 2 месяцев стабильной работы мой d-link начал не справляться с нагрузкой, то есть когда скорость приёма/передачи
достигает порядка 10-20 мегабит, то роутер начинает уже жутко лагать и пинг с 1 сервера до другого достигал 10-30мсек. Но это восновном было, когда я что-нибудь качал, так как интернет у меня на всё один — и сервера и я работаем с 1 интернета, а ведь иногда хочется посмотреть новый фильм =)

Было принято решение Собирать роутер самому из x86 компа. Опять поехал в магазин покупать кучку сетевух. В качестве
роутера взял компьютер Pentium-MMX 266Mhz. Покрутив его со всех сторон, поставив на него, перепробовав на нём все
дистрибутивы понял, что ничего хорошего из него в виде роутера не выйдит. Ну и бог с ним — обошелся он мне в копейки.
Был куплен Celeron900Mhz для роутера с 256Mhz. Сейчас стоит не подключенный с уже предустановленной ос IPCOP и
настроенный. Вот только интернеты я боюсь от d-link'а отключать, так как я отвечаю за аптайм всего, что находится на моих серверах. Так Celeron900 и стоит ожидая, когда прийдётего очередь =)

Можно сказать, что моя хардварная часть рассказа кончилась. Пора теперь рассказать о софтварной части.
Как я уже говори на мощном сервере стоят сервера counter strike,quake и других игр. Так как мои рабочие сервера не

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

Довно хотел заниматься хостингом…
Купил лицензию на ISPManager и поставил его на старенький Celeron1.7. Всё работало просто идеально и до сих пор так и работает.
Так я и начал заниматься сам серверами и после этого датацентрам не доверяю.

Вот фото, как оно выглядит сейчас:
image

Надеюсь на инвайт. Ещё столько всего нужно рассказать.

Вывод денег с oDesk'а — краткое саммари

Много раз обсуждалось на Хабре различные способы вывода денег с oDesk'а — хочу поделиться своим опытом.

1. Вывод через карточку Payoneer.

Как это работает: на oDesk'е, в разделе Payment Methods, добавляем способ вывода — Payoneer Debit card. Происходит перенаправление на сайт Payoneer, там заполняем несложную анкету. Через несколько дней карточку аппрувят (или нет — в зависимости от ситуации) и присылают по почте. Процесс пересылки занимает в среднем три-четыре недели.

Активация карточки — $10, вывод денег с oDeska — $2; быстрая загрузка на карточку — еще $2.5 (или ждать три дня). При снятии в рублях в банкомате получается потеря примерно 3%.

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

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

2. Вывод через MoneyBookers.

Как это работает — так же как и с Payoneer, добавляем payment method — MoneyBookers. Перенаправляемся на сайт, там заполняем анкету.
MoneyBookers требует проверки почтового адреса; они присылают на домашний адрес письмо (доходит быстро — дней за пять) с пин-кодом, который нужно ввести на сайте. После этого аккаунтом можно пользоваться.

Вывод денег с oDesk'a — $1, что хорошо. Вот только с MoneyBookers'а деньги тоже надо как-то вывести. Нам подходит два метода — прямым банковским переводом, и на карточку VISA.

У меня есть долларовый депозит в Альфа-Банке. На страничке вывода средств указываю SWIFT — ALFARUMM, и номер депозитного счета, нажимаем вывод. Деньги приходят на счет где-то через три дня. MoneyBookers пугает, что деньги в банки без прямого свифта (Альфабанк как раз из таких, по идее, надо указывать свифт-код банка, в котором у нашего банка коррсчет) — ни у меня, ни у моих коллег за полгода ни разу проблем не было.

Еще можно выводить на карту VISA — я ни разу не пробовал.

3. PayPal — мало у кого есть карточка, на которую PayPal готов зачислять деньги. У меня нету, поэтому я этот метод не рассматриваю

4. Прямой SWIFT перевод. Стоит $30; при прочих равных гораздо выгоднее использовать путь №2.

Надеюсь, что эта информация окажется полезной, особенно тем, кто только начинает работать с oDesk.

Как я пришел в IT или как найти свой путь.

Доброе время суток, дорогой %username%!

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

Коротко о себе: выходец из страны бывшего СНГ. В детстве нас (есть мл. брат) воспитывала мать и благодарю за все. Детство прошло спокойно, т.е, послушнее ребенка невозможно было найти. Этому мама была очень рада. Воспитывали в ключе «не заставь меня краснеть за тебя». И это вбилось в голову с тех пор. Когда мои ровесники сбегали с классов, я сидел и не мог себе позволить такого. В детстве занимался шахматами и был победителем на городских соревнованиях. Одним словом ботаник. Кстати, забыл еще один момент, примерно в классе 8 дали «таблетку», только не как у Морфиуса, а наоборот, которое закрывает глаза на все. А именно, научили быть кротким. Подставлять правую щеку, если ударили по левой. Помнится, до этого, во многих случаях был инициатором драк 1 на 2 (1 был я ;)). Но, научился и этому, т.е ставить всех выше себя. Жил мыслью «вот, закончу школу и поступлю в ВУЗ». Закончил с красным аттестатом. Поступил. Закончил ВУЗ. ВУЗ выбрали за меня. Посоветовали, мол, будущее за компьютерами и ты иди туда. И я пошел. У меня гуманитарный склад ума, но, с логикой и математикой все в порядке. Окончил и ВУЗ.
Работал более года в сотовой компании в отделе тех. поддержки. Но, не мое, уже начались перепадки настроения. Когда работал в сотовой компании параллельно учился на CCNA. Как раз, тогда, один из тех, кто с нами проходил обучение заходил на хабр. Потихоньку, я тоже начал заходить. Читать, интересоваться. Технологии. Стартапы. Биографии великих IT-шников. Бизнес.
После сотовой компании работал системным администратором. Думал, мол, отучился, вот и все. Буду сис. админом. Не тут то было. Быстро надоело. Не мое. Уволился. За это пол года кем только не работал, начиная с маркентингового агенства и заканчивая менеджером по продажам.
За этот период определился с целями.
Цели это главное у человека в жизни. Если у вас нет цели, то, все это впустую. Обращая внимание на прошлое, понимаю, что жил жизнью, которую мне прописали.
Теперь советы тому, как найти свой путь.
1. Определить что Вам нравится. Как писал Б. Шефер, возьмите свое хобби и зарабатывайте при помощи хобби.
В моем случае, это, стартапы, интернет, продвижение сайтов, разработка сайтов.
2. Найдите свои сильные стороны. Например, у кого-то хорошо получается проводить презентации (для IT компаний это огромный +), у кого-то хорошо получается вести вопросы по урегулированию вопросов с властями, у кого-то писать код, кто-то генератор идей. Одним словом, IT компания, это не только программисты и разработчики, но и менеджеры по продажам, презентеры, непосредственно руководители и другие.
3. Начните действовать. Хотите взять, встаньте и возьмите. Не ждите пока кто-либо поможет Вам. Пишите, звоните, станьте выскочкой.
4. Найдите единомышленников и продолжайте работы над своей целью.
Есть прекрасная фраза Джобса, в которой он говорит, не стоит браться за все подряд. Ждите, ищите и вы найдете «свое».
Эта статья во многом будет полезна как и для будущих родителей, а именно, как не стоит воспитывать ребенка и для тех, кто ищет свой путь. В конце хотелось бы сказать, что «свое» я нашел.

Сложно о простом — параграфы в списках

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

div.article ul li{
margin: 0px 0px 5px 0px;
}


Однако это вызывает для списков с однострочными элементами и списков со смешанными элементами неприятные нарушения стиля. Проще всего использовать для этого параграфы, будет это выглядеть так:
Читать дальше →

Восстановление «забытого» *nix пароля методом «взлома» самого пароля

В сфере взлома восстановления паролей вы всегда должны что-то узнавать\учить новое. Иногда даже если ты опытный пассворд-крякер ты не сможешь взломать пароль или даже получить свой пароль. Это скромный технический мануал :) только даст вам «рецепт» для взлома, но к любому другому паролю может понадобиться совсем другой подход.

Читать дальше →