www.blogspot.com
johnspade
John Spade Blog
1	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/AbPnxjM4EE0/unknown-book.html	Ищу книгу	2013-10-24T19:13:21.218+04:00	tag: книги endoftag 	   В 7-9 лет я прочитал одну книжку, которая очень мне тогда доставила. С тех пор мой вкус изменился, вряд ли сейчас она мне так же понравится, но все равно хочу найти ее и перечитать. Обидно то, что я помню о ней многое, а найти не могу уже несколько лет.   В общем, это роман о любви двух подростков, девушка была дочкой богатых родителей, ездила в универ (или колледж) на мотоцикле. Парень уходит на войну во Вьетнам, чтобы подзаработать денег, а девушка теряет родителей, ее дом продают за долги. Ей приходится участвовать в женских боях на ринге. Парень теряет на войне ноги и ездит в инвалидной коляске. Конец грустный - они вместе заканчивают жизнь самоубийством путем передозировки наркотиков.    Если я не ошибаюсь, произведение было напечатано в "Роман-газете", но в списках его найти не могу. Название вроде бы состоит из имен главных героев, но это неточно.    Некоторые моменты помню чуть ли не дословно, но не могу вспомнить ни одной цитаты, чтобы вбить ее в гугл. Так что буду надеяться, что кто-то из моих читателей случайно знает этот роман, буду благодарен за помощь.     
2	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/lQFZHBgKbAo/company-of-heroes-2.html	Об игре Company of Heroes 2	2013-08-05T17:48:38.932+04:00	tag: игры endoftag tag: мнение endoftag tag: я негодую endoftag 	  Сегодня компания "1С-СофтКлаб" приостановила продажи игры Company of Heroes 2 в России. Все началось с обзора на игру от BadComedian'а, известного обзорщика фильмов. Он обратил внимание на ложь создателей игры про советских солдатов, которые по сценарию сжигают на своей земле избы с мирными жителями, чтобы ничего не досталось врагу; идут в атаку не из-за своей доблести и героизма, а только потому, что сзади загранотряды с пулеметами. Предлагаю посмотреть обзор полностью, если вы еще не:     Обзор обратил на себя внимание не только русских игроков, но и мировой общественности, об этом писали крупные зарубежные игровые сайты, а пользовательский рейтинг игры на metacritic упал до 1,5. И это еще до публикации обзора на английском языке! Созданы петиции к локализатору игры в России о запрете продаж, которые были услышаны.  Сам BadComedian был против запрета игры, ибо все мы взрослые люди и можем решить, во что нам играть. Но компания Relic так и не признала свою неправоту, огородила свою страницу в Фейсбуке от русских и украинских пользователей, а модераторы их форума писали, что тупых русских в школе не учат истории. Даже Михалков как-то оправдывался, когда его фильм "Утомленные солнцем 2" обличали во лжи. В этом свете прекращение продаж игры в России выглядит вполне справедливым - издатель и разработчик лишаются третьего по величине для них рынка. Конечно, не такое уж это и наказание, большинство денег они получили после выпуска игры.  На все это возмущение многие отвечают, что в какой-нибудь Call of Duty Modern Warfare 2 нужно стрелять по русским, никто почему-то не пишет петиции, все с удовольствием играют. Но это игра с альтернативной историей, ставшая уже сериалом. Таким играм нужен "условный" противник, чтобы сюжет имел под собой какое-то реальное основание - обычно это русские или корейцы (Crysis). Разработчики же CoH2 заявляли, что у них все по историческим документам. Историю нельзя просто взять и переписать, ее можно только оболгать, как это сделали в Relic.  Но есть и те, кто саркастически заявляет "поцреотам припекло" и "дедывоевали". Примечательно, что это те самые люди, которые по поводу и без повода истерически кричат "пора валить из рашки". Я же считаю, что уважение к истории своей страны - это неотъемлемая черта любого нормального человека. Не обязательно быть ура-патриотом, но если тебе как представителю нации плюют в глаза, нельзя просто утереться и пройти мимо.  В России много такого, из-за чего хочется отсюда уехать, но иногда в ней происходит и что-то хорошее. Это справедливое возмущение ложью и нелогичностью в игре Company of Heroes 2 с последующей приостановкой продаж - как раз такая вещь. Было бы неплохо еще и заставить разработчиков извиниться.     
3	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/mgQj4XxeDF8/android.html	Android-приложения с веб-сервисами	2013-07-19T14:27:08.942+04:00	tag: приложения endoftag tag: Android endoftag tag: софт endoftag 	  Для меня смартфон  - это устройство, которое многое умеет, но все же не способно полностью заменить компьютер. Поэтому продуктивнее всего использовать их в совокупности. Следовательно, должна быть возможность использовать одни и те же данные как на смартфоне, так и на компьютере. Этой цели и служит эта подборка Android-приложений. Все они имеют веб-сервисы и помогают мне в решении повседневных задач. Итак, поехали.    Evernote         Самое известное, популярное и многофункциональное приложение для создания заметок. Его ругают за некоторую монструозность. Десктопная программа - целый комбайн с прицепом. Зато это дает много возможностей по каталогизации заметок - блокноты, категории, метки. Я люблю его за возможность накидать записей в кучу, а потом аккуратно разложить по полочкам. При этом Android-приложение выглядит довольно просто и удобно. Но немного не хватает рукописных заметок.   Google Play   Feedly      RSS-читалка, одна из лучших альтернатив ныне закрытому Google Reader. Немного огорчает отсутствие мобильной версии, но зато у них очень хорошее Android-приложение. Так как я читаю ленты как с компьютера, так и с телефона, синхронизация списка чтения и отметок о прочтенных записях оказывается довольно полезной. Google Play   Pocket      Сервис для сохранения статей "на потом" с красивым интерфейсом. Позволяет прочитать в автобусе статьи, на которые никак не было времени дома. Или наоборот - сохранить в приложении статью, которую лучше посмотреть дома на большом экране (с картинками, музыкой и видео, например). Google Play   Яндекс.Диск      Мне удобно использовать его для синхронизации текстовых документов. Все сразу они на телефоне не нужны, но иногда бывает нужно что-то посмотреть. Почему не Dropbox? На Яндекс.Диске дают больше бесплатных гигабайт, а скорость выше из-за географической близости. Google Play   Семейный бюджет      Недавно я стал вести учет своих расходов. Найти приложение для этого было несколько проблематично, потому что большинство из них платные, без веб-интерфейса и перегружены функциями. После нескольких дней поиска я нашел приложение "Семейный бюджет". Оно довольно простое и имеет веб-сервис по адресу koshelek.org. Умеет выдавать отчеты в виде диаграммы, больше мне ничего и не нужно. Из недостатков - довольно заметный рекламный баннер на каждой странице, но его можно убрать за $1. Google Play   Out of Milk Shopping List      Вообще я любую текстовую информацию закидываю в Evernote, но списки покупок в нем вести несколько неудобно, поэтому использую для этого специализированный популярный сервис Out of Milk. Приложение может сканировать штрих-коды на чеках, никогда не пользовался, но интересная фича. Списки покупок удобнее набрасывать дома на компьютере, а потом в магазине можно их просто открыть на телефоне. Google Play   TeamViewer      Есть несколько приложений для управления компьютером с телефона, но TeamViewer я использую давно, программа висит в автозагрузке всех моих компьютеров, так что пользуюсь им. Google Play   Endomondo Sports Tracker      Приложение для спорта, измеряет расстояние, среднюю скорость и прочие параметры по GPS. Я использую его во время велопрогулок. Данные по заездам удобнее смотреть на сайте, особенно маршрут. Google Play  На этом все, замечания можно высказать в комментариях. Эта подборка носит чисто рекомендательный характер и отражает в основном мои личные предпочтения.     
4	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/zoQyxZyiDWc/dead-man-down.html	Фильм "Одним меньше" (2013)	2013-07-09T19:59:58.531+04:00	tag: фильмы endoftag 	  Присутствуют спойлеры!  Есть такой хороший актер - Колин Фарелл. Он имеет обыкновение сниматься в хороших фильмах. Если вы не смотрели "Залечь на дно в Брюгге" или "Семь психопатов" - обязательно посмотрите. Но, к сожалению, не всегда.  Недавно на торрент-трекерах DVD вышел последний фильм с Фареллом - Dead Man Down или "Одним меньше" в российском прокате. Жанр заявлен как "криминальная драма", но это скорее недобоевик на криминальную тематику (в сравнении с настоящими криминальными драмами, хотя бы с фильмом "Телохранитель").  Сюжет фильма довольно банален - месть. Главный герой мстит преступному синдикату за убийство его семьи. Несмотря на неоригинальность, на этой основе можно снять неплохое кино. Вспомним фильм "Законопослушный гражданин", который заставил меня сидеть от начала до конца с отвисшей челюстью - сценарист потрудился на славу. Главный герой невероятно хитроумными способами изничтожал своих врагов одного за другим.  От этого фильма я ожидал чего-то подобного. Персонаж Фарелла, Виктор, строит план мести и собирается стравить между собой две криминальные группировки, чтобы убить всех одним махом. И сначала вроде все как полагается - главный герой прослушивает телефонные переговоры, нагнетает напряжение и манипулирует людьми. Местами фильм напоминает неплохих "Отступников". А потом появляется женщина и все портит. Рушит план главного героя, который попросил ее о помощи, и уничтожает потенциал сценария, фильм заканчивается пшиком. Вместо одного расчитанного взрыва, который покончил бы со всеми разом, Виктор как какой-нибудь Макс Пэйн влетает в дом на машине, ломает мебель, палит изо всех стволов и вообще ведет себя безобразно, как будто тут боевик со Шварцнеггером. И все ради того, чтобы спасти женщину, которая все испортила и обосралась сама, попав в руки к злодеям.  Режиссер хотел сказать что-то вроде: "Отношения между людьми важнее всего, важнее мести и старых душевных травм". Жаль, что я не понял это сразу и досмотрел фильм до конца, обманувшись в ожиданиях.     
5	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/40TLANk9fCo/smplugin.html	Плагин Blue Screen of Kill для Sourcemod	2013-06-20T18:50:51.372+04:00	tag: игры endoftag tag: программирование endoftag tag: проекты endoftag 	  В те времена, когда мне оставалось еще несколько лет до окончания школы, а мой компьютер не тянул Counter-Strike: Source, я играл в CS 1.6. На deathmatch-серверах мне очень нравился один плагин - при убийстве экран на секунду вспыхивал прозрачно-синим цветом. Он был популярным, многие сервера его использовали.   Потом я стал играть в CS:S и обнаружил, что ни на одном сервере такого плагина нет. Это было грустно, но пришлось смириться. Ну а недавно я запустил собственный сервер и подумал, что неплохо было бы иметь у себя такой плагин. Поиск по Гуглу ничего не дал - либо он слишком непопулярный среди игроков в CS:S, либо его еще никто не написал. Поэтому мной было решено написать этот плагин для Sourcemod самостоятельно.  Я боялся, что придется тыкаться в языке SourcePawn, как слепой котенок, но, к счастью, все необходимые функции были найдены в мануалах для начинающих. Начал я с Введения в написание Sourcemod-плагинов, где рассказывается о структуре кода плагина и базовых командах, там же было обнаружено нужное мне событие для получения информации о смерти игрока. С помощью Аквы среди пользовательских сообщений была найдена функция для затемнения экрана пользователя выбранным цветом. Также она есть в библиотеке стоковых функций SMLIB, в идеале можно просто ее подключить и прописать в коде только вызов с параметрами, но у меня ничего не получилось - компилятор кушать этот вызов отказался напрочь. Да и тащить целую библиотеку на сервер ради одной простенькой функции в одном плагине немного слишком.  В общем, осталось только собрать все это дело вместе с параметрами. #include &lt;sourcemod&gt;  public Plugin:myinfo =  {  name = "Blue Screen of Kill",  author = "johnspade",  description = "The plugin fades the screen to transparent blue for a second when you kill someone",  version = "1.0",  url = "http://johnspade.ru" } // Получение события смерти public OnPluginStart() {  HookEvent("player_death", Event_PlayerDeath); } // Функция затемнения PerformFade(client, duration, const color[4]) {  new Handle:hFadeClient=StartMessageOne("Fade",client)  BfWriteShort(hFadeClient,duration)  BfWriteShort(hFadeClient,0)  BfWriteShort(hFadeClient,(0x0001))  BfWriteByte(hFadeClient,color[0])  BfWriteByte(hFadeClient,color[1])  BfWriteByte(hFadeClient,color[2])  BfWriteByte(hFadeClient,color[3])  EndMessage() } // Получение игрока-убийцы, применение к нему функции затемнения public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) {  new attacker_id = GetEventInt(event, "attacker");  new attacker = GetClientOfUserId(attacker_id);  PerformFade(attacker, 300, {0, 0, 200, 51}); // PerformFade(клиент, продолжительность, {красный, зеленый, синий, прозрачность}) }  Выглядит работа плагина так:     Увидеть эффект вживую можно на моем сервере. Для использования на своем сервере вы можете скачать готовый плагин (положите его в папку cstrike\addons\sourcemod\plugins). Если вас не устраивает цвет, продолжительность или прозрачность вспышки, вы можете отредактировать параметры вызова функции самостоятельно (я указал их в последнем комментарии в коде) и скомпилировать код в онлайн-компиляторе. Если что-то непонятно в коде, можно почитать статьи по ссылкам или задать вопрос в комментариях.     
6	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/_6acFUSe3Pk/js-server-css.html	Сервер Counter-Strike: Source	2013-06-18T18:22:24.739+04:00	tag: игры endoftag tag: проекты endoftag 	    После покупки нового компьютера у меня практически полностью освободился ноутбук, и я поднял на нем public-сервер Counter-Strike: Source на 14 слотов. Без лишней скромности назвал его в свою честь - JS-Server. На сервере только одна карта, $2000$. Я выбрал именно ее, потому что она популярна среди игроков в CS: S, и на ней можно играть малыми командами, даже 1x1. Пока что на сервер заходит не так много людей, для больших карт игроков бы не хватало.     Сервер no-steam, могут заходить игроки как со Steam-версией игры, так и с пиратками.  На сервере есть все необходимые базовые плагины, как то: Players Votes (voteban, votekick), Resetscore, AFK Manager, а также Show Damage (показывает нанесенный урон) и Weapon Restrict (AWP ограничены до 1 на команду, flashbang и smoke запрещены). Раздражающих звуков и музыки в конце раунда нет. Сервер охраняется Sourcemod-античитом, большинство читеров банятся автоматически. Круглосуточный доступ не обещаю, обычно выключаю его на ночь, так как все равно никто не играет.    Если вы играете в CS: Source, настоятельно приглашаю! Чтобы поиграть со мной, если меня нет на сервере, можно постучаться в мой Steam-профиль. Только сразу предупреждаю: админки не раздаю, так как справляюсь один.    Если у вас Steam, нажмите сюда, чтобы запустить игру и присоединиться к серверу. Если же у вас пиратка, то традиционно прописывайте в консоли адрес: connect cs.johnspade.ru. Не забудьте добавить его в избранное.    Собственно, сам сервер выглядит для админа как такая консолька, в которую выводятся логи событий и прописываются команды:    Но управление сервером осуществляется в основном через меню админа в самой игре, а настройка - редактированием config-файлов для плагинов и сервера в целом. Я даже написал простенький Sourcemod-плагин для себя, но об этом расскажу в отдельном посте.  Администрировать сервер забавно - мне это интересно как айтишнику, ну и просто весело чувствовать себя главным, разруливать сложные ситуации и общаться с игроками.     
7	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/1WHmGgxcZqs/detectors.html	Противокражные датчики	2013-06-07T23:43:51.637+04:00	tag: я негодую endoftag 	   Для предотвращения краж в магазинах одежды используют так называемые радиочастотные противокражные жесткие датчики. При попытке выноса за дверь магазина датчик вызовет срабатывание сигнализации противокражной системы. Они бывают разных типов - большие, маленькие, с тросиком.  Я бы хотел сказать пару слов про датчики, состоящие из двух частей, соединенных тонкой ножкой. Вот так:   Так вот. Этой ножкой часто прокалывают саму ткань одежды, оставляя в ней дырку около сантиметра в диаметре. Купил ты кофту, а в ней дыра. Приходится зашивать, надеясь, что получится незаметно. Носки в магазинах одежды продают пачками, тоже прокалывая ножками датчиков. В наше время штопать носки вроде как западло, проще купить новые. А тут купил ты несколько пар новых дорогих носков, а в них уже дырка. И у всех в одном месте.  Это что-то вроде неотдираемых наклеек на яблоках, когда проще отрезать кусок, чем отмывать эту липкую гадость. А против профессиональных шоплифтеров (магазинных воришек) эти датчики все равно не помогают, они выносят вещи в специальных сумках, которые глушат их сигнал. В общем, ненавижу эти жесткие датчики вместе с магнитными наклейками на книгах и пр. И ведь они используются повсеместно, нет смысла бороться с каким-то конкретным магазином возвратами одежды с дырками и написанием жалоб.     
8	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/qdqzIPY8sFs/vuz.html	Как выбрать вуз	2013-06-02T01:08:59.381+04:00	tag: советы endoftag tag: учеба endoftag 	   Многих школьников старших классов волнует вопрос: какой вуз выбрать? Итак, первая, она же главная, методика. Выгляните в окно - если видите там вуз, смело несите туда документы! Я не рассматриваю тех, у кого не хватает баллов ЕГЭ, чтобы поступить в вуз в своем дворе - вы неудачники, лучше умрите.    Если из окна не виден вуз, то открывайте карты и составляйте список ближайших вузов. Выберите тот, где больше всего красивых девушек. Те, до которых ехать больше получаса, должны быть сразу вычеркнуты.    Вы можете мечтать о прекрасном будущем, о обучении в престижном университете, но подумайте о том, как четыре года подряд придется тратить час на дорогу туда и час на дорогу обратно. Как вы будете ездить два часа в день на метро ради пятиминутной консультации перед экзаменом. И даже если у вас всего одна пара сегодня, вы в сумме потратите на нее четыре часа и все, полдня загублены.     А если до вуза идти всего пару минут, вы восхитительны. Вы спите много и со вкусом, цвет вашего лица естественный, а смех всегда жизнерадостный. Вы не нервничаете по пустякам и не страдаете раздражительностью. Ваше "Доброе утро" всегда искренне. Вы всегда хорошо пережевываете свой завтрак и неспешно готовитесь к семинарам по утрам, пока ваши менее удачливые одногруппники трясутся в набитых электричках с головой в подмышке какого-нибудь дачника.    Ладно, не воспринимайте это всерьез, это совершенно неважно, вы привыкнете. И вообще не стоит следовать никаким советам в этом блоге. Желаю удачи в открытии всех дорог.         
9	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/E7drDKxJMNU/literature-lessons.html	Литература и язык предисловий	2013-04-20T04:03:55.990+04:00	tag: школа endoftag tag: язык endoftag tag: учеба endoftag 	   Литература - бесспорно один из самых важных предметов в школе, хоть и занимает одно из топовых мест в списке "В жизни это не понадобится". Когда у учителя спрашивают, зачем оно нужно, он отвечает что-то типа: "Будет о чем поговорить в цивилизованной компании". Конечно, никто не разговаривает о литературе в компаниях. Литература нужна для того, чтобы научить людей анализу и выражению своих мыслей, в частности, убедительной аргументации. Это умение нужно в спорах, например, а спорить приходится постоянно. Все эти сочинения, которые так лень писать, учат школьников, что у текста должен быть в начале тезис, а в конце вывод, иначе это просто сотрясание воздухов и трата бумаги. И прочим важным вещам.  Но у уроков литературы есть один нюанс. Они прививают ученикам т. н. канцелярский стиль речи. Я называю его "язык предисловий" - напыщенный, неестественный и штампованный. Процитирую статью Петра Пустовалова:   Обильно засорены работы выпускников школ, студентов младших курсов выражениями из так называемого канцелярского стиля речи. Обнаружить пути, по которым этот «речевой мусор» проникает в речь молодёжи, довольно легко. В школе свою лепту вносят, как это ни странно, сами преподаватели литературы. Именно от них ребята на протяжении нескольких лет слышат, что все писатели «великие русские», что любое изучаемое произведение «имеет огромное значение», что оно «сыграло огромную роль в борьбе против…», что наконец оно написано «метким, выразительным (иногда добавляют ‘‘красочным’’) языком» и т. д. Подобные языковые штампы ученики видят и в учебниках, и в тех материалах, которые они «берут напрокат» в Интернете. Чем они привлекают? Тем, что не заставляют пишущего думать, заниматься поиском тех языковых средств, которые помогли бы более точно передать свою мысль, подчеркнуть его авторскую индивидуальность. Укрепляет  позицию учеников и пассивность самих преподавателей (часто слышишь: «Хорошо, что хоть так написали»). Мне было бы все равно, если бы это не повлияло на мой стиль выражения мыслей. Когда я пишу какой-нибудь текст, замечаю, что эти штампы пролезают на бумагу, из-за этого он кажется менее простым и правдивым. Не то чтобы преподаватели учили всех писать в таком стиле, просто в школе все привыкли - если написать так, легче получить высокую оценку. Такого стиля учитель ждет от учеников.  От этого может спасти большая начитанность, но этим обладают не все. Я часто замечаю в соцсетях пользователей школьного возраста, которые явно ничего не читали, кроме произведений по школьной программе, и ничего не писали, окромя школьных сочинений. Их речь страдает вышеупомянутыми штампами, из-за чего их аргументы и утверждения кажутся смешными и неубедительными.  Когда я в школе немного лукавил, думая: "На самом деле я вычитал это в учебнике, но напишу «я думаю, что это произведение имеет огромное значение и написано выразительным языком», это будет правильно для сочинения", я не думал, что впоследствии это так мне аукнется, и придется долго вычищать свою речь от подобных оборотов.     
10	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/ZhZdOMyQbmw/half-life-2-episode-3.html	Нужен ли Half-Life 2 Episode 3?	2013-04-04T13:36:53.411+04:00	tag: Portal 2 endoftag tag: Half-Life 2 endoftag tag: игры endoftag tag: Valve endoftag 	   Пост навеян первоапрельским розыгрышем с фейковой страницей предзаказа Half-Life 2 Episode 3. Так вот, он не нужен.  Half-Life 2 вышла почти 10 лет назад. Играя в нее, чувствуешь, что это уже довольно старая игра. Эти туповатые враги с надоедливым респауном, отвратительная стрельба из автоматов, зрительно бедноватые уровни. Этот геймплей был отличным для 2004 года, в 2007 все еще смотрелся достаточно свежо, хоть и потребовал косметических улучшений - но сейчас, спустя пять лет после второго эпизода, третий эпизод не нужен. Незачем продолжать насиловать старые скрипты, плодить уровни с расставлением турелей и изобретать вариации одних и тех же головоломок. Третий эпизод не нужен даже для завершения сюжета. Сюжет в Half-Life 2 более-менее интересный, но подается очень скудно. Ни тебе интересных диалогов, ни хорошей драмы.  Я не говорю про графику, Portal 2 показал, что движок Source до сих пор способен выдавать довольно впечатляющую картинку.     Но все же. Хватит игр на нем. Движок Source 2 и Half-Life 3 с новым сеттингом, персонажами и геймплеем - вот чего я жду от Valve.  Наверное, вы хотите спросить, за что я не люблю Half-Life 2. Она меня не зацепила и показалась страшно нудной. Еще в начале, когда меня заставили целую вечность пилить куда-то на катере, я страшно задолбался. А потом мне дали багги... Про стрельбу и AI я уже говорил, кажется. Дизайн уровней местами понравился, но от локации Цитадель я плююсь до сих пор, она отвратительна. Одно мне греет душу - Рэйвенхольм, самый атмосферный и любимый уровень. В общем, я еле доиграл до конца, чисто для галочки. Сюжет для меня интересен только в глобальном плане - зачем Г-мэну нужен Фриман и так далее. В эпизоды играть вообще не собираюсь, прошел их на Ютубе (только потому, что мне нравился летсплеер).  Я не считаю эту игру плохой и не собираюсь спорить с теми, кто называет HL2 игрой  десятилетия. В конце концов, кто достоин получить титул компании, сделавшей игру десятилетия, если не Valve? Они сделали CSS (мой любимый сетевой шутер) и Portal 2 (мою любимую игру вообще). Но Half-Life я люблю больше, чем вторую часть, а с выходом Black Mesa Half-Life 2 больше не нужна.     
11	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/Fi7ypJNyqsw/google-reader.html	Закрытие Google Reader	2013-03-16T00:21:42.787+04:00	tag: социальные сети endoftag tag: Google endoftag 	  Обычным будним утром я налил себе чаю и сел за компьютер, чтобы почитать события и новые посты в блогах за завтраком. И был неприятно удивлен плашкой, сообщающей о том, что Google Reader закроется первого июля сего года. Тут мне в голову пришло несколько мыслей. Первая - "Нужно срочно искать альтернативу!". Но об этом потом.  Я задумался о том, как мы привыкли полагаться на веб-сервисы. Мы каждый день смотрим ролики на YouTube, получаем информацию о погоде с Яндекса, проверяем наличие Интернета, набирая в адресной строке браузера www.ru. И совершенно не думаем, что что-то может случиться с этими сайтами. Google Reader был для меня одним из таких сервисов. Не то что бы я его особо любил (как Твиттер, например) - он настолько прост и удобен, что я не замечал его работу, сосредотачиваясь на доставляемом им контенте. Он стал для меня утренней газетой, газетой, которую я читал в метро, журналом, который перелистывают, когда скучно. Он стал частью моей жизни, как и другие Интернет-сервисы.  Их можно сравнить с телевизором, по которому вы каждый день смотрите фильмы и новости. Периодически к вам домой заглядывают мастера от компании-производителя, которые меняют кнопки на телевизоре местами, уменьшают размер экрана и производят другие обновления. Вам приходится привыкать к новому виду вашего телевизора, иногда вам хочется сделать все по-старому, но производитель объясняет изменения тем, что они улучшают удобство, повышают безопасность и делают ваш телевизор прогрессивным. Все это не очень мешает вам смотреть каналы телевидения. Но в один прекрасный день к вашему дому подъезжает фургон, который забирает ваш телевизор, объясняя это тем, что производитель прекращает его поддержку.  Вообще, плевать на этот телевизор. ГуглРидеру можно найти замену. Поговорим о соцсетях. Очень многое в нашей жизни завязано на аккаунте в ВКонтакте или Facebook. Наши воспоминания, фотографии, коллекция видеозаписей. Телефонная книжка смартфона синхронизируется со списком друзей. Мы планируем встречи и события в социальных сетях, узнаем домашнее задание и ведем деловую переписку. Последнее время я практически не слушаю музыку с жесткого диска - она находится в моей аудиотеке ВКонтакте. Мы регистрируемся на многих сайтах с помощью аккаунтов в соцсетях.  Теперь представьте себе, что ваш аккаунт неожиданно заблокировали. Вы не сможете получить доступ ко всему вышеперечисленному. Не сможете войти на множество сервисов и приложений. И хорошо, если техподдержка поможет вам восстановить доступ к своим аккаунтам. Памятуя об этом, я мало доверяю сайтам, которые не позволяют зарегистрироваться по старинке - введя e-mail, пароль и имя пользователя. Я вообще не стараюсь особо не полагаться на хранение информации в своем аккаунте ВКонтакте, но, тем не менее, недавно с удивлением обнаружил, что при отсутствии доступа к нему не смогу послушать любимую музыку. Еще страшнее подумать, что произойдет, если будет заблокирован мой аккаунт Google, ведь на нем завязано огромное количество сервисов - почта, синхронизация закладок в браузере, события в календаре, этот блог... На эту тему советую почитать статью "Что произошло, когда Facebook заблокировал мой аккаунт".  И я обещал рассказать о поиске альтернативы ГуглоРидеру. Должен сказать, все довольно грустно. Либо ужасный дизайн, либо монструозное юзабилити, либо нельзя импортировать подписки из Google Reader. Для меня еще важно наличие удобной мобильной версии - я постоянно читаю ленту со своего Nokia C3 (не смартфон). Пока самой лучшей альтернативой показался The Old Reader. Создатели позиционируют его как "такой же, как и старый ридер на платформе Google, только лучше". Сначала я подумал, что это стартап уровня "у нас тут социальная сеть со стеной, как раньше во ВКонтакте", но все оказалось довольно неплохо. В мобильной версии не работают некоторые кнопки (видимо, Opera Mini режет скрипты), но читать можно. Еще кучу альтернатив можно найти здесь.  Такие дела.     
12	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/1PTxGk0Jey0/immunitet.html	Антивирус Бабушкина и туземцы	2013-03-08T23:18:05.615+04:00	tag: мысли о жизни endoftag tag: софт endoftag 	   Вы, наверное, слышали про Бабушкина и его антивирус "Иммунитет". Если нет, то вот вам ссылка. Почитайте и возвращайтесь. Я не знаю, как он докатился до такой жизни, но есть у меня пара мыслей по этому поводу.  Что подумают дремучие туземцы некоего изолированного до наших времен острова в океанийском архипелаге, если к ним прилетит исследователь на вертолете? Они подумают, что к ним спустился Бог на небесной колеснице, принесут ему человеческую жертву и прочие почести. Это всего лишь обычный рядовой человек на обычном вертолете, но среди туземцев он будет самой уважаемой персоной.  Если ты программируешь с детства, когда у остальных школьников информатика еще даже не началась, те, кто ничего в этом не понимает, будут смотреть на тебя с восхищением. Если в твоем провинциальном городе даже учителя информатики в институте заглядывают тебе в рот, если со школы все вокруг восклицают "вау, ты настоящий программист", недолго возгордиться и начать считать себя офигенным разработчиком. Если ты выигрываешь конкурс школьных проектов, потому что никто не может по достоинству оценить твое творение из двух батников, синхронизируемых командой ping, все, ты второй Ломоносов. Если журналисты с регионального телевидения, которые в разработке ПО понимают не больше твоей бабушки, как мухи на варенье слетаются на юное дарование, им можно показать флешку, воткнутую в корпус от маркера и рассказать о своих экзерсисах в занимательной математике - про сжатие 2 Гб до 2 Кб. Ведь твои идеи все вокруг признают блестящими и оригинальными, потому что просто их не понимают. Но если свою бабушку можно заставить считать себя хорошим программистом, просто показав экран с парой строчек кода, то после репортажа по телевидению на антивирус Бабушкина обрушилась волна заслуженной критики. Чем Бабушкин возмущался в стиле "но я же написал большую сложную программу, а не украл где-то, за что вы меня ругаете?". Видимо, это привычка - показывать свои несколько тысяч строк кода, чтобы закосить под тру-программиста.  Мораль этой истории - оценивайте свои способности и умения не в сравнении, а объективно. Мифический исследователь на вертолете из начала этого поста может подумать: "А ведь я не рядовой гражданин, а самый настоящий Бог, раз туземцы считают меня им". Преклонение туземцев затмит тот факт, что оно обеспечено всего лишь барахлящим вертолетом.     
13	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/rwDRGn1QXQQ/lastfm.html	Расширение для поиска выделенного текста на Last.fm	2013-03-08T23:18:05.605+04:00	tag: javascript endoftag tag: программирование endoftag tag: софт endoftag tag: музыка endoftag tag: проекты endoftag 	Я люблю слушать музыку, а еще я страшный лентяй. Если вижу в интернетах упоминание какого-то музыкального исполнителя в положительном контексте, мне хочется с ним познакомиться. Для этого я открываю его страничку на Last.fm и смотрю, какие у него самые популярные по прослушиваниям песни. Мне кажется, именно с них лучше всего начинать знакомиться с исполнителем. Но копировать текст руками, открывать новую вкладку, вводить адрес last.fm, вставлять текст в строку поиска - это таааак лень... Я студент-айтишник, и культивировать свою лень с помощью компьютера - мое предназначение. Так что я написал несложное расширение, которое добавляет в контекстное меню Chrome пункт для поиска выделенного текста на last.fm одним кликом.     Расскажу немного о создании. Это не мануал по созданию расширений, я просто покажу, как решил поставленную задачу. Как и гаджет Windows, расширение для Google Chrome требует манифест, только в формате JSON:  {  "manifest_version": 2,  "name": "Simple Last.Fm Finder",  "version": "1.0",  "icons": {   "16": "icon16.png",   "48": "icon48.png"  },  "description": "Расширение добавляет в контекстное меню пункт для быстрого поиска выделенного текста на last.fm.",  "background": {   "scripts": ["background.js"]  },  "permissions": [   "http://*/*",   "https://*/*",   "contextMenus",   "tabs"  ] }  Версию манифеста, равную 2, указывать обязательно - без этого расширение не станет работать. Иконка 16x16 будет отображаться рядом с моим пунктом меню, а 48x48 - представлять мой продукт на странице расширений. Я, не мудрствуя лукаво, взял соответствующие логотипы Last.fm. Обычно в манифесте указывают background и popup страницы, но мне они не нужны, у меня только один скрипт - Хром сам сгенерирует для него страницу.  Далее я запрашиваю разрешения на работу с контекстным меню и вкладками. Должен признаться, я не очень понял, на какие URL мне нужны разрешения, но расширение должно работать везде, так что оно получает доступ ко всем страницам.  Больше от манифеста мне ничего не нужно. Теперь можно написать простенький скрипт:  chrome.contextMenus.create({  "title": "Search on last.fm",  "contexts": ["selection"],  "onclick": search });  function search(e) {  var lastFmSearchUrl = "http://www.lastfm.ru/search?q=";  var searchQuery = e.selectionText;  var searchUrl = lastFmSearchUrl + searchQuery;  chrome.tabs.create({"url": searchUrl }); }  Он с помощью Chrome API при выделении текста создает пункт меню "Search on last.fm", по клику собирает поисковую ссылку с выделенным текстом и открывает новую вкладку с этим адресом. Код расширения написан, осталось только запаковать его на странице расширений в режиме разработчика.  Мне нравится Chrome API - оно довольно удобное, в нем много нужных плюшек, но в документации слишком скудные примеры, как по мне. Еще очень понравилась отладка расширений. Чтобы запустить гаджет Windows, его надо запаковать в архив, сменить расширение на .gadget и запустить, после внесения изменений эту процедуру надо произвести еще раз. В Хроме надо всего лишь указать папку с проектом и после внесения изменений нажать "Обновить расширение". Лентяй во мне доволен.  Как всегда, в комментариях приветствуются конструктивные замечания, особенно об ошибках. Если вам нужно, вы можете скачать мое расширение. Для установки перетащите файл на страницу с расширениями.       
14	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/WPaDj1BFiBY/silent-hill-revelation.html	Silent Hill: Revelation	2013-03-06T20:11:55.299+04:00	tag: фильмы endoftag 	   Этот фильм я ждал. Не то что бы с нетерпением, но ждал. Узнав, что он вышел в 3D, я даже хотел сходить на него в кинотеатр. К счастью, это у меня не получилось. Почему к счастью - расскажу дальше.    Сразу скажу, что не играл ни в одну из игр серии Silent Hill. Возможно поэтому фильм "Сайлент Хилл" - один из моих самых любимых. Конечно, это не шедевр, но я могу долго хвалить сюжет, персонажей, концовку, декорации и еще многое в этом фильме. Главное, что меня зацепило - это атмосфера. Город, созданный невинно замученной девочкой, стал еще одним персонажем фильма. Пепел, падающий с неба, туман, подземный пожар - все это впечатляет и захватывает.     Начиная смотреть фильм, я уже знал, что ничего хорошего меня не ждет. Позитивных отзывов о Silent Hill практически нет. Главная проблема фильма - он выглядит несерьезно. Начинается он как типичная драма о отношениях типичных американских школьников. Рассуждения главной героини о разных уровнях реальности в начале даже немного обманывают и заставляют ждать чего-то интересного, но потом персонажи попадают в, собственно, городок Сайлент Хилл. Вся атмосфера куда-то испарилась. Все это опять же похоже на набор разрозненных локаций из плохого фентези - главная героиня превозмогает одну неприятность за другой, при этом произнося пафосные речи о том, что она должна спасти своего отца. Режиссер зачем-то сделал ее выглядеть невероятно глупо - она кричит в пространство "Алесса, я нашла Кощееву смерть печать Метатрона, выходи" и вообще ведет себя странно. Момент, где главная героиня убегает от членов Братства, напомнил мне то ли фильм "Зомбилэнд", то ли дешевый ужастик про зомби-нацистов. Под конец становится абсолютно непонятно, какое отношение это все имеет к Сайлент-Хиллу.    Режиссер, от тебя требовался не сиквел. От тебя требовалось бережно перенести атмосферу Сайлент Хилла в свой фильм. Не надо было мучать старых героев, открытая концовка первого фильма была хороша и без продолжения. Помню, после просмотра я кинулся читать форумы, среди мнений о том, что случилось с героями, были настоящие жемчужины. Например, наиболее мне понравившаяся: персонажи погибают в аварии и попадают в ад. Режиссер второго фильма вывел все это на уровень плохого фентези: "Роуз смогла передать своему мужу Кристоферу Шэрон с помощью печати Метатрона".     В Сайлент Хилл нельзя просто войти и выйти. Ты обязательно оставишь там часть себя. И эти подростки со своим хэппи-эндом выглядят просто кощунственно. Это не тот город. Не тот Сайлент-Хилл, где Алесса стоит над плечом каждого и безмолвно говорит: "Ты страдаешь за мои мучения". Мы увидели довольно посредственный триллер, который ухитрился похоронить сюжет первого фильма.  Издатели фильма утверждают, что он основан на сюжете Silent Hill 3. Я из любопытства заглянул в Википедию и почитал сюжет, довольно впечатлило. Все, что осталось от него в фильме - имена персонажей. Ну и печать Метатрона там проходит, правда по другому поводу.  Единственное, что мне понравилось - актриса, которая играла главную героиню. Эделейд Клеменс играет просто замечательно. Как я писал в Твиттере, эмоциональные гримаски она корчит мастерски. Ей бы сниматься в школьных драмах о любви и драках между старшеклассниками.  Фильм вышел в 3D, но смотреть там не на что. Вообще. В нем нет ни красивых видов, ни хороших драк. Что-то мне кажется, что первый фильм был даже более зрелищным - эти пролеты камеры под землю, появление Алессы в церкви. Возможно, от осознания этого факта создатели фильма сделали довольно красивые финальные титры с Темными медсестрами в сло-мо. На это стоит глянуть:     Перечитывая пост, понимаю, что от возмущения слишком субъективен и непоследователен. Эх, что поделать.     
15	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/TvGXVyNQzjo/javascript-steam.html	[Javascript] Получение данных из профиля Steam	2013-03-08T23:18:05.599+04:00	tag: javascript endoftag tag: игры endoftag tag: программирование endoftag tag: софт endoftag tag: проекты endoftag 	  В прошлой записи я писал, что собираюсь доделать гаджет из этой статьи: Пишем гаджет Windows 7. И я наконец выполнил свое намерение, теперь гаджет выводит время, проведенное в игре. Результат можно увидеть на картинке выше.   Данные гаджет берет из Стима. Как указано в документации, Steam отдает данные о профиле в XML-формате по ссылкам вида http://steamcommunity.com/profiles/&lt;SteamID&gt;/?xml=1 или http://steamcommunity.com/id/&lt;CustomURL&gt;/?xml=1. Также мы можем получить статистику пользователя в конкретной игре по ссылкам вида http://steamcommunity.com/profiles/&lt;SteamID&gt;/stats/&lt;CommunityGameName&gt;/?xml=1 или http://steamcommunity.com/id/&lt;CustomURL&gt;/stats/&lt;CommunityGameName&gt;/?xml=1. Для большинства игр в статистике есть только информация по достижениям, но для некоторых игр указаны и другие данные. Так, у Counter-Strike: Source в статистике есть общее время, проведенное в игре. Для профиля данные по игре будут доступны только в том случае, если пользователь играл в нее в последние две недели, и игра отображается на странице его профиля. Поэтому XML профиля не годится как постоянный источник данных для гаджета.  У статистики другая проблема. В XML профиля указывается то количество часов, которое вы видите в своей библиотеке Steam, открывая страницу игры. В статистике же указывается другое время, и обычно оно меньше. Я не знаю, по каким принципам считается количество часов, могу сказать только, что разброс данных может быть большим. Для моего профиля разница составляет ~20 часов. У одного человека из моего списка друзей в профиле указано 600+ часов для CS:S, в статистике же только 90 часов. Исходя из этих соображений, я решил дать пользователю выбор источника данных. На этом сбор информации можно считать завершенным, переходим к написанию кода.  Страничка гаджета мной уже была написана, об этом можно почитать в статье "Пишем гаджет Windows 7". Добавим на нее никнейм пользователя, кнопку "Обновить" и место для вывода количества часов: &lt;p id="service"&gt; 	&lt;span id="nick"&gt;&lt;/span&gt; 	 |  	&lt;span id="refresh" onclick="work()"&gt; 	&lt;a href="#"&gt;Обновить&lt;/a&gt; 	&lt;/span&gt; &lt;/p&gt; &lt;h3 id="digits"&gt;&lt;/h3&gt; По клику на "Обновить" выполняется главная функция, в которой и будет происходить загрузка и обработка данных. Ее мы напишем чуть позже. Эти элементы абсолютно позиционированы с помощью стилей. Должен сказать, позиционирование в гаджете ведет себя странно. Надежнее всего указывать точные расстояния в пикселях, иначе вообще неизвестно, где окажутся ваши элементы. При этом, если открыть страничку в браузере и сравнить с гаджетом, они будут в разных местах. В начале я долго не мог понять, почему гаджет ничего не показывает, а потом оказалось, что он просто выводит данные за границами гаджета, так что их просто не было видно. В общем, значения расстояний я рассчитал подбором.  Для того, чтобы загружать данные, нужно знать никнейм пользователя и выбранный источник. Для этого создадим страницу настроек. Это тоже простая html-страничка, на которой я разместил текстовый инпут и выпадающий список:    &lt;form action="#"&gt; 	&lt;p class="settingsP"&gt; 		Никнейм или ID: 		&lt;input type="text" name="nickname" id="nickname"&gt; 	&lt;/p&gt; 	&lt;p class="settingsP"&gt; 		Источник данных: 		&lt;select name="source" id="source"&gt; 			&lt;option value="stats"&gt;Статистика&lt;/option&gt; 			&lt;option value="profile"&gt;Профиль&lt;/option&gt; 		&lt;/select&gt; 	&lt;/p&gt; &lt;/form&gt; Не забудьте в стилях указать точные размеры для окна настроек. Кнопки "ОК" и "Отмена" система создает сама. Теперь напишем скрипт для сохранения настроек. Сохранить настройки для гаджета можно с помощью специального метода System.Gadget.Settings.writeString('name', data), а потом прочитать с помощью System.Gadget.Settings.readString('name'). При закрытии гаджета настройки сбрасываются, чтобы этого избежать, для их сохранения можно использовать файлы. Я решил, что обойдусь без этого. Если пользователь нажимает "ОК", свойство .closeAction объекта event становится равным .Action.commit. Итак, создаем .js-файлик и подключаем к странице настроек:  // Выводим на страницу старые настройки nicknameOld = System.Gadget.Settings.readString('nickname'); selectedSourceOld = System.Gadget.Settings.readString('source'); document.getElementById('nickname').value = nicknameOld; if (selectedSourceOld == 'stats') { 	document.getElementById('source').selectedIndex = 0; } else { 	document.getElementById('source').selectedIndex = 1; } // Если пользователь нажал OK, сохраняем настройки function settingsClosing(event) { 	if (event.closeAction == event.Action.commit) { 		nickname = document.getElementsByName('nickname')[0].value; 		selectedSource = document.getElementsByName("source")[0].value; 		System.Gadget.Settings.writeString('nickname', nickname); 		System.Gadget.Settings.writeString('source', selectedSource); 	} 	event.cancel = false; }  System.Gadget.onSettingsClosing = settingsClosing;  При закрытии страницы настроек вызывается событие System.Gadget.onSettingsClosing, которому я присвоил функцию settingsClosing. Значение элементов формы я получаю методом .value, а устанавливаю пункт выпадающего списка методом .selectedIndex.  Теперь у нас есть настройки, можно загружать и обрабатывать данные. Создаем новый .js-файл и подключаем его к странице гаджета. Сначала объявим главную функцию и сразу сделаем автообновление данных повтором функции с интервалом в час:  (function work() { // Код setTimeout(work, 3600000) }) ();  Дальнейший код должен находиться внутри этой функции. Чтобы подключить настройки, нужно указать ссылку на соответствующую страницу, как указано в документации к гаджетам:  System.Gadget.settingsUI = 'settings.html';  При первом запуске гаджета настройки еще не указаны, поэтому следует установить настройки по умолчанию:  if (System.Gadget.Settings.readString('nickname') == '') { //Здесь можно указать свой ник для установки по умолчанию 	System.Gadget.Settings.writeString('nickname', ''); } if (System.Gadget.Settings.readString('source') == '') { 	System.Gadget.Settings.writeString('source', 'stats'); }  Теперь читаем и применяем настройки:  // Читаем настройки var nickname = System.Gadget.Settings.readString('nickname'); // Если введено ID, то тип переменной nickname будет числовым, необходимо привести ее к строковому типу nickname = nickname.toString(); var source = System.Gadget.Settings.readString('source'); // Собираем персональные ссылки на XML if (nickname.substring(0, 7) == '7656119') { // число 7656119 есть в начале всех ID 	urlStats = 'http://steamcommunity.com/profiles/' + nickname + '/stats/CS:S/?xml=1'; 	urlProfile = 'http://steamcommunity.com/profiles/' + nickname + '/?xml=1'; } else { // Никнейм 	urlStats = 'http://steamcommunity.com/id/' + nickname + '/stats/CS:S/?xml=1'; 	urlProfile = 'http://steamcommunity.com/id/' + nickname + '/?xml=1'; } // Выводим никнейм в гаджет outputNick = document.getElementById('nick'); outputNick.innerHTML = nickname; // В зависимости от настроек выбираем источник данных if (source == 'stats') { 	urlSteam = urlStats; } else { 	urlSteam = urlProfile; }  Теперь, когда мы применили настройки, можно загружать и парсить XML:  // Функция для загрузки XML function loading() { 	if (window.ActiveXObject) {  		xmlSteam = new ActiveXObject('Microsoft.XMLDOM'); 	} 	xmlSteam.onreadystatechange = XmlReady; 	xmlSteam.load(urlSteam); } // Если XML загрузился, парсим его, если не загрузился - загружаем еще раз function XmlReady() { 	if (xmlSteam.readyState == 4) { 		if (xmlSteam.childNodes.length == 0) { 			loading(); 		} 		else { 			if (source == 'stats') { 				time_string = xmlSteam.getElementsByTagName('timeplayedfmt')[0].firstChild.data; 				time = time_string.substring(0, time_string.lastIndexOf('m') + 1); 			} 			else { 				GamesList = xmlSteam.getElementsByTagName("gameName"); 				for (i = 0; i &lt; GamesList.length; i++) { 					GamesListItem = GamesList[i].childNodes[0].data; 					if(GamesListItem == "Counter-Strike: Source") { 						time = xmlSteam.getElementsByTagName("hoursOnRecord")[i].firstChild.data + ' hrs'; 						break; 					} 				} 			} 			if (time !== undefined) { 				output = document.getElementById('digits'); 				output.innerHTML = time; 			} 		} 	} }  loading();  В предыдущем написанном мной гаджете загрузка XML была синхронной. Но запрос к серверу Стима периодически отваливается, гаджет надолго зависает, часто файл загружается не полностью. Поэтому я выбрал асинхронную загрузку с проверкой статуса. Но даже если на запрос приходил ответ "Completed", иногда оказывалось, что файл загружен не полностью. Поэтому я дополнительно проверяю, есть ли в файле хоть что-то, и если нету, то запускаю функцию загрузки еще раз.  С парсингом XML статистики особых сложностей не возникло, берем строку из тега timeplayedfmt и обрезаем из нее секунды, точности до минут вполне хватит. В XML профиля данные о играх находятся в шести блоках mostPlayedGame, в каждом из них есть нужный нам тег hoursOnRecord, но неясно, в каком по счету из этих тегов данные для CS:S. Также в блоке mostPlayedGame находится название игры, поэтому проходимся циклом по тегам gameName и, когда находим значение "Counter-Strike: Source", берем тег hoursOnRecord с таким же номером. Если данные не найдены, в гаджет выводится undefined, поэтому я отсекаю это значение.  На этом функция work() заканчивается, остался один штрих. Когда закрывается окно настроек, их необходимо применить сразу, чтобы не ждать час до следующего обновления. Так что навешиваем на системное событие System.Gadget.onSettingsClosed функцию, которая запустит общую (это надо указать в том же файле после функции work()):  System.Gadget.onSettingsClosed = SettingsClosed; function SettingsClosed(event) { 	if (event.closeAction == event.Action.commit) { 		work(); 	} }  И еще, если после применения новых настроек данные не будут найдены (например, введен никнейм пользователя, который не играет в CS:S), в гаджет ничего не выведется, и в нем останутся старые значения времени. Поэтому в начале функции work() указываем:  var time = '';  Огромное спасибо Хикке и theaqua за помощь. Если вам что-то непонятно, можно почитать предыдущие статьи на эту тему:  Пишем гаджет Windows 7 Парсинг XML на JavaScript  В них я подробно рассказывал о аналогичных действиях. Также можно задать вопрос или высказать предложение/замечание в комментариях.  Вы можете скачать то, что у меня получилось, если вам нужно. Чтобы увидеть исходные файлы, распакуйте гаджет архиватором.        
16	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/H16g-bzOo9c/xml-javascript.html	Парсинг XML на JavaScript	2013-03-08T23:18:05.613+04:00	tag: javascript endoftag tag: программирование endoftag tag: софт endoftag tag: проекты endoftag 	   Всем привет! Это продолжение статьи Пишем гаджет Windows 7. Теперь мы напишем более сложный гаджет, чем просто кнопка для запуска игры. Он будет отображать текущую температуру на улице с четырех разных сайтов. Результат можно увидеть на скриншоте в начале статьи.   Вступление На самом деле, я терпеть не могу всевозможные виджеты для отображения погоды. Они кажутся мне бесполезными, потому что узнавать погоду мне требуется слишком редко, и я для этого просто выхожу на балкон. Но я не собираюсь пользоваться собственным произведением, написал его чисто ради интереса. (Because we can).  JavaScript - единственный из языков программирования, который оказался в программе первого семестра первого курса моей специальности в универе, так что мой гаджет работает именно на нем. Должен сказать, мне довольно нравится этот язык, потому что я люблю веб-дизайн и все с ним связанное, хоть и абсолютно не разбираюсь ни в джаваскрипте, ни в дизайне.  NB: это не мануал, я просто рассказываю о том, как решил задачу, поставленную в первом абзаце статьи. Более того, прошу высказывать ваши замечания и более элегантные решения в комментариях.  Брать температуру будем из XML-файлов, в которых погодные сайты отдают данные для разработчиков приложений. Это оказалось неожиданной проблемой - не так легко найти сайты, у которых можно скачать XML без регистрации бесплатно, я с трудом наскреб четыре штуки. Большинство для доступа к API требует оплату или регистрацию для получения индивидуального ключа доступа. Так что не удивляйтесь, что один из источников украинский :)  Кстати, я прикрутил к блогу подсветку кода, сейчас ее и опробую. Здесь посты подобного рода публикуются сравнительно часто, так что без нее было немного неудобно. В старых записях пока все будет по-старому, как-нибудь потом допилю отображение кода и там.   HTML Сначала напишем внешнее оформление гаджета, чтобы потом сразу привязать к нему javascript-код. Я создал четыре блока с двумя абзацами в каждом: для температуры и источника данных: &lt;div id="container"&gt;  &lt;div id="temp1"&gt;   &lt;p id="digit1"&gt;&lt;/p&gt;   &lt;p id="name1"&gt;Яндекс&lt;/p&gt;  &lt;/div&gt;  &lt;div id="temp2"&gt;   &lt;p id="digit2"&gt;&lt;/p&gt;   &lt;p id="name2"&gt;Yahoo&lt;/p&gt;  &lt;/div&gt;  &lt;div id="temp3"&gt;   &lt;p id="digit3"&gt;&lt;/p&gt;   &lt;p id="name3"&gt;Accuweather&lt;/p&gt;  &lt;/div&gt;  &lt;div id="temp4"&gt;   &lt;p id="digit4"&gt;&lt;/p&gt;   &lt;p id="name4"&gt;weather.co.ua&lt;/p&gt;  &lt;/div&gt; &lt;/div&gt;    CSS В файле CSS-стилей указываем размер и фон гаджета: body {   width: 260px;  height: 180px;  background-image: url("grass.jpg"); }  Вообще, указывать изображение для фона гаджета полагается с помощью специального элемента g:image, но у меня что-то не получилось.  Я попытался расположить эти четыре блока в сетку с помощью text-align: center у родительского блока, в браузере это сработало, а в самом гаджете блоки все равно встали вертикально друг за другом. Тогда я разозлился и прибил их гвоздями указал для них абсолютную позицию в углах гаджета: #temp1, #temp2, #temp3, #temp4 {  position: absolute;  width: 130px;  height: 90px;  margin: 0px; } #temp1 {  top: 0px;  left: 0px; } #temp2 {  top: 0px;  right: 0px; } #temp3 {  bottom: 0px;  left: 0px; } #temp4 {  bottom: 0px;  right: 0px; }  Весь CSS-код показывать не буду, больше ничего важного там нет.   JS Создаем .js-файлик и первым делом записываем в переменные источники данных: var url1 = 'http://export.yandex.ru/weather-ng/forecasts/27612.xml'; var url2 = 'http://xml.weather.yahoo.com/forecastrss?p=RSXX0063&amp;u=c'; var url3 = 'http://rss.accuweather.com/rss/liveweather_rss.asp?metric=1&amp;locCode=ASI|RU|RS052|MOSCOW'; var url4 = 'http://xml.weather.co.ua/1.2/forecast/27?dayf=1';  По этим ссылкам - погода в Москве, для других городов нужно изменить коды в URL.  Далее пишем функцию, которая будет загружать XML в переменную, используя ActiveX. Работать она будет только в Internet Explorer'е, но поддержка других браузеров нам не нужна, ибо гаджеты Windows работают именно через IE: function loading(name, url) {  if (window.ActiveXObject) {   name = new ActiveXObject('Microsoft.XMLDOM');  }  name.async = false;  name.load(url);  return name; }  Она проверяет, что браузер - IE, создает ActiveX-объект для XML и через метод .load загружает в него нужный файл. Вообще, обычно в подобных гаджетах это делают на jquery, но я написал все на чистом JS.  Теперь садимся и смотрим на каждый XML-файл. У Яндекса текущая температура хранится в fact → temperature. Теги &lt;temperature&gt;&lt;/temperature&gt; встречаются несколько раз, но нужный нам стоит первым сверху. Это все, что нужно было узнать, теперь можно писать код: temp1_xml = loading(xmlYa, url1); temp1 = temp1_xml.getElementsByTagName('temperature') [0].childNodes[0].nodeValue; output1 = document.getElementById('digit1'); output1.innerHTML = temp1 + '°';  Здесь мы с помощью специального метода .getElementsByTagName собираем коллекцию элементов с тегом temperature и берем значение первого из них, которое выводим в подобающее место нашего гаджета, прибавляя значок градуса, чтобы цифры не смотрелись слишком абстрактно.  В XML от Yahoo текущая температура хранится не в теге, а в атрибуте тега, вот так: &lt;yweather:condition text="Light Snow" code="14" temp="-15" date="Mon, 21 Jan 2013 7:57 pm MSK"/&gt;. Просто используем метод .getAttribute:  temp2_xml = loading(xmlYh, url2); temp2 = temp2_xml.getElementsByTagName('yweather:condition') [0].getAttribute('temp'); output2 = document.getElementById('digit2'); output2.innerHTML = temp2 + '°';  XML от accuweather.com оказался самым проблемным. Текущее состояние погоды хранится в первом сверху item → title, в строчке вида "Currently: Flurries: -13C". В зависимости от погоды второе слово может меняться, зато оба двоеточия будут всегда оставаться на месте (ну я надеюсь). Так что берем значение элемента как строку (метод .data) и обрезаем все до пробела после второго двоеточия, а также символ "C", он нам не нужен: temp3_xml = loading(xmlAcw, url3); var temp3_string = temp3_xml.getElementsByTagName('item') [0].getElementsByTagName('title')[0].childNodes[0].data; temp3 = temp3_string.substring ((temp3_string.lastIndexOf(': ')+2), (temp3_string.length-1)); output3 = document.getElementById('digit3'); output3.innerHTML = temp3 + '°';  Украинский сайт погоды сюрпризов не выдал, значение текущей температуры хранится в первом сверху теге &lt;t&gt;: temp4_xml = loading(xmlUkr, url4); temp4 = temp4_xml.getElementsByTagName('t') [0].childNodes[0].nodeValue; output4 = document.getElementById('digit4'); output4.innerHTML = temp4 + '°';  Осталось только сделать автообновление данных. Для этого я обернул весь вышеуказанный код вот так: (function work() { // весь код setTimeout(work, 900000) }) ();  Таким образом функция повторяет сама себя и данные обновляются каждые 15 минут. Где-то читал, что такой способ предпочтительнее, чем setInterval, а еще где-то вычитал, что оба этих метода в гаджетах Windows недопустимы, но ту статью я потерял :| Если есть лучший способ, прошу мне сообщить.   Завершение Теперь можно собирать исходники в гаджет, об этом я рассказывал в предыдущей статье. Не забудьте создать файл gadget.xml. Полный исходный код можно посмотреть, распаковав файл гаджета архиватором (ссылка в конце поста).   Послесловие Вообще, в этой статье я хотел доделать гаджет из предыдущей - выводить на кнопке количество часов, проведенных в игре. Я пытаюсь сделать это таким же способом - загрузка xml-данных своего профиля в Стиме методом .load, но в IE данные выводятся, а в гаджете - ни в какую. Я пока не разобрался, в чем проблема, так что ждите третьего поста на эту тему :) Задавайте вопросы в комментариях.   Скачать Вы можете скачать то, что у меня получилось, если вам нужно:        
17	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/XV082zNNqYs/itogigoda.html	Итоги года 2012	2013-03-08T23:56:23.819+04:00	tag: моя жизнь endoftag tag: Evanescence endoftag tag: итоги endoftag 	   Фотография со Дня Города в Москве этой осенью  Как и в прошлом году, расскажу об итогах года. Вам тоже советую написать такой пост, вот список пунктов для отчета: ItogiGoda.doc.  Надеюсь, что вспомнил все важные события. Обычно после таких постов у всех моих знакомых возникает куча претензий ко мне, я боюсь :D Итак, начнем по порядку:  Событие года: у меня появилась девушка, теперь учусь в институте, побывал на концерте Evanescence - больше особо крупных событий вроде не было.  Открытие года: По склонностям и способностям я что-то среднее между программистом и журналистом (ну или что-то такое). Несколько тестов показали, что у меня одинаковые наклонности к обоим сферам. Не особо доверяю тестам, но я и сам это чувствую, меня просто разрывает.  Разочарование года: я с трудом понимаю матанализ :(  Лучший день года: один из летних дней, прогулка среди сосен.     Блог года: О вещах, которые способствуют. Не то что бы мне особенно близка его тематика, просто нравится стиль изложения автора.  Программа года: Steam.     Игра года: Super Hexagon. Вообще по игровому времени Counter-Strike Source, конечно, но Super Hexagon это просто АыыаААА.  Фильм года: Ходил на фильм "Берсерк II" (и не волнует, что это аниме) в кинотеатр, понравилось даже немного больше, чем очень крутая первая часть. Отличные бои, саундтреки, неплохой сюжет и вообще.  Песня года: Digitalism – Idealistic.     В этом году со мной произошел забавный случай: я слушал новый альбом Linkin Park, потом забыл поставить AIMP на паузу и ушел из дома, а альбом так и крутился по кругу. Когда я вернулся, Линки уже занимали первую строчку по прослушиваниям в моем ластфм-профиле, мне теперь стыдно его показывать людям. Я не особо их люблю, хотя последний альбом понравился больше остальных.  Исполнитель года: все так же Evanescence.  Концерт года: Evanescence в Москве 27 июня. Это было безумно классно - ощущение, когда тебя пронизывают мощные рифы любимых песен, участники любимой группы на расстоянии вытянутой руки и вообще. Живой звук - это всегда очуменно.     Книга года: Эллрой Джеймс, "Черная орхидея". Спасибо Сарамаге за рекомендацию.  Человек года: Катя, моя девушка.  Настроение года: как бы это сформулировать... было весело, вот.  Лучшее путешествие года: не путешествовал :(  Город года: Москва.  Одежда года: красная футболка, джинсы, кеды, как и в прошлом году.  Времяпрепровождение года: прогулки с Катей, видеоигры.  Блюдо года: картошка, запеченная в майонезе, Катя отлично готовит.  Напиток года: Лаймон Фреш.  Сайт года: Твиттер.  Знакомство года: Увиделся вживую с Тангорном. Мы и раньше были знакомы по Твиттеру, а летом вместе cходили на второго Берсерка в кино.  Предмет года: Flystick Saitek Cyborg Evo Force. Я с ним даже сплю в обнимку. Вот этот:     Ностальгия года: RPG Star Wars Knights of the Old Republic. Я играл в нее несколько лет назад, она зависала на открытых пространствах, забросил. Теперь взялся пройти полностью. Отличная игра, лучшая во франшизе Star Wars.  Мечта года: написать роман.  Хобби года: собирание коллекции AMV, если это можно назвать хобби. Сам тоже делал видео, но дальше небольшого отрывка не пошло.  Покупка года: Телефон Nokia C3. Он мне страшно нравится из-за qwerty-клавиатуры. Вот на сенсорных экранах мне трудно набирать текст, а тут вообще удобно. Еще укупил на Озоне одноименный альбом Evanescence (диск, в смысле), там такой буклетик с фотографиями и текстами песен, просто вау.     Фраза года: "Ну как-то так". Универсальная фраза, которой можно объяснить что угодно.  Тусовка года: Хотел пойти на J-Fest, как в прошлом году, но посмотрел на программу, нашел ее унылой и провел эти выходные с девушкой. Ни разу не пожалел. В общем, тусовки в этом году обошли меня боком. Ну или я их. Несколько раз ходил с друзьями в кино, но это не считается, наверное.  Цель года: Хотел поступить в институт на программиста, поступил. Еще не знаю, нравится мне или нет. По крайней мере терпимо, бросить учебу не хочется. Еще круто, что ездить на пары не так далеко, меньше часа.  Итог года: Хороший год, лето было вообще лучшим в моей жизни. Я доволен. Рад, что наконец закончил школу.  Хочу передать привет Юниксу, Сарамаге, Маше, Лолке, Луи, Аозаке и Тангорну, а также Нару, Хикке и Семену. Ну и всем моим IRL-друзьям, конечно. Еще можно почитать итоги этого лета и итоги 2011-го года. Такие дела.     
18	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/40N5iMOd40A/super-hexagon.html	Super Hexagon	2013-03-06T20:11:55.217+04:00	tag: игры endoftag 	  Я ненавижу большинство инди-игр. Отвратительная графика, ужасный дизайн, примитивный геймплей, зубодробительный хардкор. Всеми этими качествами в полной мере обладает недавно вышедший на PC Super Hexagon. Эта игра стоит 59 рублей в Steam - хорошую игру за такую цену продавать не будут.  Не знаю, за что ее автор, Терри Кавана, так ненавидит человечество, что подарил миру эту ужасную игру. Она испортит вам зрение, сломает клавиатуру и понизит самооценку.  В Super Hexagon вы управляете треугольником, который вращается вокруг центра и должен уворачиваться от препятствий, летящих к этому центру. На каждом уровне сложности нужно продержаться минуту. Звучит просто, на деле - игра не прощает ошибок. Препятствия летят с большой скоростью, часто заставляя проделывать довольно сложные маневры. Задачу осложняет постоянное вращение камеры, изменение угла ее наклона, и мигание экрана разными цветами. Ваши глаза в опасности! После часа игры хочется плакать кровавыми слезами. В управлении используются только две стрелки - у меня они уже почти продавили ноутбук насквозь. Super Hexagon заставляет осознать, что у вас кривые руки и реакция как у жирафа; после этого хочется бросить видеоигры навсегда. Первый раз запустив ее, вы не сможете продержаться и десяти секунд на первом уровне сложности. Я наиграл в Super Hexagon уже 10 часов (и все это время ненавидел ее) и смог пройти только первые два уровня сложности, на третьем не могу набрать больше двадцати секунд. Вот вам спойлер: главный герой умирает. Постоянно. Фраза "Game over", произнесенная женским голосом, будет сниться вам по ночам.  Собственно, о геймплее лучше меня раскажет трейлер:     Милая девушка-музыкант Niamh Houston под ником Chipzel написала для Super Hexagon'а отличный саундтрек в стиле chip-tune. Возможно, именно он делает эту игру такой крутой (я все еще ненавижу ее):   &amp;lt;a href="http://chipzelmusic.bandcamp.com/album/super-hexagon-ep"&amp;gt;Super Hexagon EP by Chipzel&amp;lt;/a&amp;gt; Оценка? Super Hexagon - игра года. Среди худших инди-игр, конечно. На самом деле, я больше не могу обманывать себя. Черт подери, я просто влюблен в Super Hexagon! И хочу детей от ее автора &gt;_&gt;  Аддиктивность этой игры, безумно красивой и завораживающей, несмотря на примитивность графики, просто невероятна. Она идеальна в своей простоте. Хотя некоторых вещей ей не хватает - я бы хотел больше достижений, настроек и т.д.  Общая оценка: 9/10.  Скриншоты:                 
19	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/Mrwn-K5B0xQ/video.html	О видео и текстах	2013-03-06T20:16:11.913+04:00	tag: блог endoftag 	  В последнее время меня адово раздражает всеобщая мода в интернете на съемку видео. Каждый школьник, которому не дают покоя лавры Максима из +100500, снимает свои кривляния на видео и выкладывает это на бедный Ютуб. Но это ладно, оставим малолетних обзорщиков популярных видео Нифедову.  Видеоинструкции. Раньше было хорошо. Гуглишь какой-нибудь урок по Фотошопу, находишь подробную пошаговую статью со скриншотами, жизнь удалась. Теперь половина сайтов с уроками - это список видео. И это страшно неудобно. Например, нужно всего лишь посмотреть, какой инструмент используется на отдельно взятом конкретном шаге. Если читать статью, можно быстро пробежаться глазами по заголовкам и найти нужный момент. Видео же придется смотреть целиком, или пытаться найти нужное время: перемотать на несколько секунд вперед, послушать пару секунд, тот это момент или нет, перемотать еще на несколько секунд. Долго и хлопотно.  Вообще, в большинстве случаев текст удобнее, чем видео. Его можно быстро прочитать, быстро понять суть и основную мысль. Видео можно запустить в ускоренном режиме, но понять что-то таким образом трудно. Да и видеохостинги не позволяют так делать. В видео меня очень раздражают длинные вступления: "привет, я Ололоша, сегодня я расскажу вам о том, как дуть плюхе, это видео я не планировал, оно получилось спонтанным, а еще у меня тут за окном работают таджики, так что извините за шум, также извините, что на фоне нет ковра, его мама забрала в стирку". Всю эту чушь приходится прокручивать, постоянно промахиваясь и пропуская что-то нужное. И вообще в видео говорят много лишнего, а пропустить это труднее, чем в тексте. Например, однажды я искал решение одной из ошибок подключения интернета от Билайна. Один из первых результатов - видео. В нем парень снимает свой монитор на телефон и показывает, что надо сделать. Большую часть видео занимает примерно такой монолог: "А теперь перезагрузим компьютер. Немного подождем... таак... в последнее время мой компьютер стал грузиться гораздо дольше... о, еще немного... загрузился!". Ну это уже вовсе клинический случай, автор видео понятия не имеет о Фрапсе и элементарном монтаже видео. Но если в тексте подобные лишние элементы можно легко проскроллить, то в видео это труднее.  Обзоры на игры. Вы удивитесь, но я не очень люблю видеообзоры на игры. Часто бывает, что обзорщик уделяет механике игры мало внимания, а говорит о сюжете, персонажах, и большую часть времени на экране просто нарезка рандомных моментов из игры, не имеющих отношения к тому, что он рассказывает. А мне бывает лень смотреть видео целиком, из текста я мог бы легко вычленить интересные мысли глазами, а видео просто закрываю. Бывает, что я просто хочу узнать общую оценку игры. В тексте можно сразу посмотреть в конец, оценка обычно выделяется болдом, красным цветом и так далее. В видео же ее сразу не найдешь. Она может быть в середине, а после нее еще какие-нибудь "неудавшиеся моменты". И хорошо, если автор вставит оценку в видео как текст, а не просто произнесет ее вслух, что еще более усложнит ее нахождение.  В общем, моя основная мысль такова: в видео труднее найти нужную информацию, на это приходится тратить больше времени и вообще это неудобно. Бросайте свои видеоблоги и пишите статьи.     
20	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/yq79jHpBPaI/windows7-gadget.html	Пишем гаджет Windows 7	2013-03-08T23:18:05.578+04:00	tag: софт endoftag tag: проекты endoftag 	   Недавно в очередном альбоме с рабочими столами увидел у кого-то большую кнопку в центре экрана для запуска Dota 2 и понял, что хочу себе такую же, чтобы запускать любимую Counter-Strike Source, в которую играю больше всего. Обычно для этого используют лаунчеры для Rainmeter'а, я же не люблю использовать сторонние программы для оформления системы.  Так что я решил написать себе гаджет для рабочего стола, давно хотел это попробовать. Итак, что такое гаджет Windows 7? Это .zip-архив с расширением .gadget. Он обязательно должен содержать манифест - файл gadget.xml. А по сути гаджет является html-страничкой, к которой прикручиваются стили, скрипты и так далее. Мой гаджет будет самым простым - картинка с навешенной на нее ссылкой.  Сначала создаем файл gadget.xml:   &lt;?xml version="1.0" encoding="utf-8" ?&gt; &lt;gadget&gt; &lt;name&gt;CSS launcher&lt;/name&gt; &lt;!-- Название гаджета --&gt; &lt;version&gt;1.0&lt;/version&gt; &lt;!-- Версия гаджета --&gt; &lt;author name="John Spade"&gt; &lt;!-- Имя автора --&gt; &lt;info url="johnspade.ru" /&gt; &lt;!-- Ссылка на сайт --&gt; &lt;/author&gt; &lt;description&gt;Просто кнопка для запуска Counter-Strike Source&lt;/description&gt; &lt;!-- Описание --&gt; &lt;hosts&gt; &lt;host name="sidebar"&gt; &lt;base type="HTML" apiVersion="1.0.0" src="gadget.html" /&gt; &lt;!-- Ссылка на html-файл --&gt; &lt;permissions&gt;full&lt;/permissions&gt; &lt;platform minPlatformVersion="0.3" /&gt; &lt;/host&gt; &lt;/hosts&gt; &lt;/gadget&gt;   Permissions full, platform minPlatformVersion 0.3 и apiVersion 1.0.0 - обязательные параметры по спецификации. Название, имя автора и другая информация будут отображаться в центре управления гаджетами:     Еще можно указать логотип гаджета, я этого не сделал.  Теперь пишем сам гаджет, файл gadget.html:  &lt;html&gt; &lt;head&gt; &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt; &lt;style type="text/css"&gt; body {  margin: 0px; width: 230px; height: 108px; } a img { border: none; } &lt;/style&gt; &lt;/head&gt; &lt;body&gt; &lt;g:background opacity="0"&gt;&lt;/g:background&gt; &lt;div&gt;&lt;a href="steam://rungameid/240"&gt;&lt;img src="image.jpg" width="230"&gt;&lt;/a&gt;&lt;/div&gt; &lt;/body&gt; &lt;/html&gt;   Здесь я просто вставляю картинку, которая будет кнопкой и прикрепляю к ней ссылку. Ссылка не на ярлык игры, а на запуск приложения в Стиме. IE может спросить, действительно ли вы хотите запустить стороннее приложение для обработки ссылки, можно поставить галочку "Больше не спрашивать".  Некоторые моменты в коде требуют пояснения. Стилевые параметры margin и height для body надо выставить обязательно, это размер гаджета. Я сделал его равным размеру картинки. border: none для a img убирает рамку вокруг картинок с ссылками, которую автоматически отображает Internet Explorer. g:background - специальный тег для управления фоном гаджета, opacity="0" делает его прозрачным.  Далее запаковываем все файлы нашего гаджета в .zip-архив и изменяем его расширение на .gadget. Теперь запускаем этот файл и гаджет появится в Центре гаджетов и на рабочем столе:     Сначала я хотел использовать милую кругленькую png-кнопку с прозрачностью, но в гаджете края таких картинок становятся розовыми О_о Я не знаю, в какую сторону копать, так что отказался от этой затеи.    Если вам нужно, вы можете скачать мой гаджет:         
21	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/J-Ku9bUr0fE/films.html	Современная киноиндустрия	2013-03-06T20:11:55.187+04:00	tag: фильмы endoftag 	     Типичный современный фильм - это как покрашенный гроб. Хорошо снятый, набитый под завязку отличными спецэффектами, хорошими актерами и так далее. Вот только сюжета там не найти и под микроскопом. И в этом нет ничего хорошего.   Меня часто просят посоветовать какой-нибудь фильм, самые разные люди. Но все они говорят одно и то же: "Посоветуй какую-нибудь комедию/боевик, чтобы не грузило". Я бы посоветовал фильмы из списка своих любимых - "Матрица" (хотя ее все смотрели), "Авалон", "Святые из трущоб", "Город грехов", но неизменно получаю на это ответ: "Ой, это слишком мутно, слишком много драмы, не хочу такое смотреть, мне бы что-нибудь легкое".  Собственно, современная индустрия кино абсолютно подходит под этот запрос - "чтобы не грузило". Более того, лучшие продукты этой индустрии даже успешно скрывают отсутствие сюжета. Помню, я был в кино, смотрел "Трон: Наследие" в 3D. Я просто офигевал от того, как это все классно. А потом снял очки и осознал, что сюжет фильма просто жалок, и мне даже ничего не запомнилось, кроме пары визуально красивых моментов.  Может, это и нормально - посмотреть легкое кинцо, когда устал после работы/учебы, и ни о чем не хочется думать. Но... это ваше желание изменило индустрию фильмов, поздравляю. Теперь всем, кто будет просить посоветовать что-нибудь "чтобы не грузило", буду отвечать "Посмотри "Мстителей". А я сам давно думал, что надо составить список хороших старых фильмов и отсмотреть их, а не вестись на советы тех, кто говорит, что фильмы о Бэтмене хорошие.  Кстати, с комедиями сейчас тоже плохо - я не знаю ни одной хорошей за последние два года. А русские комедии вообще лучше обходить за несколько километров.  Итак, попробую подвести итог - о чем же все-таки этот пост. Мне не нравится, что в фильмах сейчас отсутствует сюжет, какая-то серьезная драма (а не как в Бэтмене). И я думал, что это должно возмущать всех. Но многим нужны именно такие фильмы. И это печально.     
22	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/0YIoHAMVqyI/metro.html	Объявление в метро и Маяковский	2013-03-08T19:47:56.612+04:00	tag: моя жизнь endoftag 	   Недавно ехал в метро, слушать музыку настроения не было, я думал о разном. И неожиданно для себя подумал, что одно из обычных объявлений в поезде как будто написано Маяковским:  Уважаемые пассажиры! Будьте         взаимно                   вежливы. Уступайте места Пожилым людям, пассажирам с детьми И     беременным              женщинам. Сравните, например, с этим его стихотворением:  Уважаемые         товарищи потомки! Роясь         в сегодняшнем                 окаменевшем г*не, наших дней изучая потемки, вы,         возможно,                 спросите и обо мне. Другого примера не нашлось, простите :(  Все это напомнило эпизод из Воспоминаний Вересаева:   Однажды помянул я по какому-то поводу Некрасова. Гаврила Иванович вытаращил на меня глаза. - Некрасов? Да кто же теперь Некрасова поэтом считает? - Как - кто считает? - Полноте, деточка моя! Рубленая капуста! Видали когда-нибудь, как капусту рубят? - Гаврила Иванович стал рубить вытянутою ладонью воздух. - Вот что такое ваш Некрасов. Вчера ехал я по Литейному - вывеска:    ПЕТЕРБУРГСКОГО ПАТРОННОГО ЗАВОДА    ЛИТЕЙНО-ГИЛЬЗОВЫЙ ОТДЕЛ А?! Чем, я вас спрашиваю, не Некрасов? По-моему, еще даже поэтичнее! А? Что? Кхх! Ха-ха-ха! Все смеялись, и я тоже, потому что, правда, очень было похоже на Некрасова.      
23	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/8fmpSkJTtPQ/phone.html	У меня зазвонил телефон...	2013-03-06T20:10:27.243+04:00	tag: телефон endoftag 	   Я прихожу домой после тяжелого учебного дня, дико уставший. В голове ни единой мысли, я забираю ноутбук со стола и ложусь с ним на диван, чтобы посмотреть очередную серию очередного аниме, ни на что другое настроения пока нет. Делаю себе чай, устраиваюсь на диване поудобнее... и тут начинает звонить телефон, как всегда забытый на столе.   Нет ничего неудобнее этой ситуации - я под ноутбуком, проводом от зарядки, проводом от мышки, проводом от наушников, в одной руке кружка с чаем, в другой пряник. И настойчиво звонящий, просто захлебывающийся от важности и срочности звонка телефон на столе. Каждый гребаный раз, когда я забываю положить телефон рядом с собой, кто-то обязательно позвонит! Причем просто так поболтать мне никто не звонит, это обязательно какое-то важное дело. Мне надо быстро локтем поставить видео на паузу, выпутаться из проводов, вылезти из-под ноутбука, поставить кружку с чаем на пол, так, чтобы не разлить и успеть ответить на вызов. Ну или хотя бы перезвонить, а это лишняя трата денег.  С домашним телефоном проще, он у нас неделями выключен, так как мама обычно выключает его на ночь и всегда забывает включить его обратно. Так что хотя бы не приходится постоянно дергаться, чтобы выслушивать предложения подключить двухмегабитный интернет или оплатить счета за связь.  Хотя меня опять обвинят в высасывании проблемы из ничего. Но я никак не могу справиться с забывчивостью. Телефон и ключи - это вещи, которые я кидаю не глядя куда угодно, потом полдня их ищу. Мне остается только привязать телефон к запястью, потому что из карманов я его тоже машинально выкладываю на любую подходящую поверхность. Ну и с законом подлости справиться тоже никак не получается, все неудобные ситуации настигают меня в самый неподходящий момент.  А на тему собственно разговоров по телефону я уже писал здесь: О разговорах по телефону.      
24	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/nKY0N-Zu91A/paranoid.html	Обо мне, параноике	2013-03-06T20:10:27.308+04:00	tag: паранойя endoftag 	   Меня часто посещают параноидальные мысли.  Например, я стою в метро с телефоном в руке, жду поезда, и тут на меня накатывает мысль, что я сейчас буду входить в вагон, споткнусь и уроню телефон в щель на рельсы. Эта мысль резко портит мне настроение, я убираю телефон в самый дальний карман и застегиваю его на молнию.   Еще в метро мне постоянно кажется, что если я буду стоять у края платформы, кто-нибудь неловко повернется и столкнет меня своим рюкзаком или плечом прямо под приближающийся поезд. Из-за этого я всегда стою у стенки.  Если я иду с ноутбуком в рюкзаке, я думаю, что буду снимать его с плеча и неудачно стукну об пол, или опять же меня кто-то толкнет. Из-за этого мне хочется нести рюкзак в обнимку.  Когда у меня был кот, я смотрел на него и думал, что он может упасть с балкона, представлял, как мне будет грустно и тоскливо из-за этого, как я перепугаюсь. После этого несся закрывать все окна.  Я начинаю представлять себе все эти ужасные события в красках, переживать эти впечатления. Эта паранойя часто портит мне жизнь и хорошее настроение =/  При этом я вовсе не боюсь, например, того, что кто-то вытащит у меня из кармана деньги, или украдет у меня с компьютера конфиденциальную информацию. Я не боюсь, того, что меня может кто-то преследовать, но боюсь преследования законом подлости. У меня странная паранойя.     
25	http://feedproxy.google.com/~r/JohnSpadeBlog/~3/Cnf20F3AD5I/pirate.html	Почему я пират?	2013-03-08T23:18:05.597+04:00	tag: игры endoftag tag: софт endoftag 	   Я подсчитал стоимость программ и игр, которые спиратил, т.е. не платил за них:       ПРОГРАММЫ   Windows 7 Профессиональная 7000р.   Microsoft Office 2010 2400р.   Photoshop CS5 27000р.   Total Commander 1500р.   WinRar 900р.   Xilisoft Video Converter Ultimate 1800р.   Pinnacle Studio 2100р.   Итого: 42700р.   ИГРЫ     Street Fighter X Tekken 400р.   Just Cause 2 300р.   Mass Effect 2 400р.   Burnout Paradise The Ultimate Box 300р.   Max Payne 3 600р.   Tom Clancy's H.A.W.X. 200р.   Итого: 2200р.     Фильмы и музыку даже считать не стал. Всего получается 45 тысяч рублей. Это только на моем ноутбуке, я не считал программы на стационарном компьютере и еще одном ноутбуке, т.е. стоимость Офиса и ВинРара можно умножать на три. Эта цифра и есть ответ на вопрос в заголовке. Даже если бы у меня была такая сумма, я бы на нее собрал еще один компьютер, например. Я понимаю, что труд программистов должен быть оплачен, но я не могу :(   P.S. Линуксоиды со своими убогими Гимпом и ОпенОфисом - можете даже не соваться в комментарии.     
