<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xml:base="https://graker.ru/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Web</title>
    <link>https://graker.ru/</link>
    <description>RSS домовой страницы</description>
    <language>ru</language>
    
    <item>
  <title>Про запрет автопродления подписок</title>
  <link>https://graker.ru/news/2025/07/10/on-auto-subscriptions</link>
  <description>&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;Увидел тут хорошую новость &lt;a href=&quot;https://pikabu.ru/story/saytam_mogut_zapretit_avtomaticheski_snimat_dengi_za_prodlenie_podpisok_12932828&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;про запрет автопродления подписок&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Проблема с такими подписками, которые трудно отменить, между прочим, глобального свойства. Столкнулся с ней как-то раз несколько неожиданным образом. Вот как дело было.&lt;/p&gt;
&lt;p&gt;Когда-то давно меня интересовал вопрос учёта моих денег. Разочаровавшись в готовых решениях я взял и написал свое (laravel + angular.js). Основная претензия была — все решения, что мне попадались, заставляли яростно вбивать траты, это была основная (или даже единственная) механика учета. Вбивать, что куда я потратил вчера, чтобы потом увидеть общие суммы. А я и так знаю, что потратил вчера, и общую сумму в уме посчитать могу, мне хотелось бы видеть, что я потрачу завтра.&lt;/p&gt;
&lt;p&gt;Ну и в общем написал на коленке сервис планирования бюджетов. С рекуррентностью, планированием и возможностью самому определить уровень детализации. Никуда этот сервис не продвигал, пользовалось несколько человек, на главной висела надпись что идет тестирование, invite-only, и почта для вопросов. А назвал я его Budget Bear и домен купил budget-bear . com. Недорого было.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Название придумано в честь шутки из Flight of the Conchords: Let&#039;s go to a cheap zoo and watch budget bears (пойдём в дешёвый зоопарк смотреть бюджетных медведей). Что означает — пойдём смотреть на хомячков у витрины зоомагазина.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Но со временем, пока мой сервис висел и никому не отсвечивал, какие-то британские деятели сделали похожее решение и назвали его так же. И подвесили на такой же домен в другой зоне. И у них была такая фигня — подписка с автоплатежом. Причем автоплатеж был на грани скама: юзеры получали месяц подписки на сервис как подарок за что-то там, но в процессе получения подарка каким-то образом вбивали карту, и сами того не зная уже были обречены платить дальше.&lt;/p&gt;
&lt;p&gt;Видимо хитрые бриты решили, что это хороший способ поднять деньжат — не делать прозрачной отмены подписки и толком не объяснять людям что они вообще на что-то подписались. Потому что через пару месяцев мне на почту моего домена стали сыпаться письма с одним и тем же требованием: немедленно прекратить брать с них деньги. И даже вернуть что уже взяли. Причем в основном люди даже писали, что им неясно, что это за сервис и в какой момент так вышло, что они оказались подписаны.&lt;/p&gt;
&lt;p&gt;Первым N написавшим я как-то объяснил, что они ошиблись и куда им надо писать. Но потом конечно немного задрало и домен я прибил, тем более что использовать его всерьез особо и не собирался.&lt;/p&gt;
&lt;p&gt;А ведь будь у этих хитровыделанных бритов нормальная отмена подписки — может и не пришлось бы. Так что, хорошая новость.&lt;/p&gt;&lt;/div&gt;
</description>
  <pubDate>Thu, 10 Jul 2025 14:09:00 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">2124 at https://graker.ru</guid>
    </item>
<item>
  <title>Как сделать Telegram Instant View на своем сайте</title>
  <link>https://graker.ru/news/2025/06/14/telegram-instant-view-on-custom-site</link>
  <description>&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;Сегодня был хороший день, чтобы наконец сделать на домовой странице телеграмовский Instant View. И я сделал.&lt;/p&gt;
&lt;p&gt;Поначалу всё казалось просто. Выяснил, что нужно пройти на &lt;a href=&quot;https://instantview.telegram.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://instantview.telegram.org/&lt;/a&gt; и там добавить темплейт, вырезающий из html-кода страницы со статьей самое главное. Вот пример моего темплейта для &lt;a href=&quot;/&quot;&gt;Graker.ru&lt;/a&gt; — указываем шаблон пути к подходящим страницам, тег, содержащий всю статью целиком, тег с заголовком, с текстом, и дату публикации.&lt;/p&gt;&lt;/div&gt;
&lt;pre data-component-id=&quot;grakerru:code-block&quot; class=&quot;code-block language-none&quot;&gt;&lt;code class=&quot;language-none&quot;&gt;?path: /news/.+

$main: //div[@class=&amp;quot;post post-wrapper&amp;quot;]

title: $main//h1[1]
body: //div[@class=&amp;quot;post-body&amp;quot;]

published_date: //div[@class=&amp;quot;date&amp;quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;Этого достаточно, чтобы сделать instant view вручную, а именно — добавить страницу в список страниц для своего шаблона в My Templates. После чего появится ссылка «View in Telegram», вставив которую в свой канал можно получить на мобильниках Instant View.&lt;/p&gt;
&lt;p&gt;Однако это во-первых придется делать вручную для каждой статьи. И во-вторых, при просмотре не с мобильника, а через веб-версию или десктопное приложение, ссылка будет работать странно. В вебке вообще не открываться, а в приложении — открываться через предупреждение что это «ссылка для тестирования instant view». Что как-то не солидно выглядит.&lt;/p&gt;
&lt;p&gt;Хотелось бы конечно получить автоматическую генерацию Instant View, как у телетайпа например. В правилах подачи шаблонов сказано, что нужно добавить не менее 10 статей и отправить темплейт на проверку. Я это сделал месяц назад где-то, тишина. При этом последнее обновление в сервисе было лет пять назад, и непонятно, работает ли он сейчас вообще.&lt;/p&gt;
&lt;p&gt;Погуглил на эту тему, и оказалось, что таки да, сервис видимо не работает. Люди постят темплейты и годами их не добавляют. Однако где наша не пропадала. Эти же люди обнаружили, что можно внаглую использовать темплейт того же телетайпа (teletype.in). Для этого нужно страницу, просматриваемую ботом, привести к шаблону телетайпа, а также рендерить на странице мета-тег &lt;code&gt;tg:site-verification&lt;/code&gt; с указанием айдишника телетайпа. Тогда Instant View будет формироваться для произвольного сайта. При простой вставке ссылки, без всяких режимов тестирования через &lt;code&gt;/iv?url=&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Вот шаблон, в соответствие которому надо привести страницу: &lt;a href=&quot;https://gist.github.com/fishchev/ed2ca15d5ffd9594d41498a4bf9ba12e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gist&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;И несколько моих комментариев:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Предположительно, все незакомментированные теги должны быть, хотя я и закомментированные добавил.&lt;/li&gt;
&lt;li&gt;В шаблоне говорится про ключ верификации, что @content could be empty, но в данный момент это не так. Проверил с указанием ключа и с пустым атрибутом без ключа. С ключом работает, без — нет.&lt;/li&gt;
&lt;li&gt;Разметка статьи довольно простая (body → div → article → содержимое), может показаться, что нужно чтобы была только такая разметка и больше ничего. Но это не так. Я обернул в &lt;code&gt;&amp;lt;div class=&quot;article&quot;&amp;gt;&amp;lt;article class=&quot;article__content&quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/article&amp;gt;&lt;/code&gt; иллюстрацию и контент заметки, но между body и этим дивом у меня еще несколько оберток и телеграм это не волнует. Можете посмотреть в коде любой заметки здесь, я сделал разметку безусловной, поскольку добавление этих тегов ничего не поменяло.&lt;/li&gt;
&lt;li&gt;Также заметил, что нельзя оставлять внутри &lt;code&gt;article&lt;/code&gt; заголовок, дату, теги — тогда бот сбоит и instant view не генерирует.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В подтверждение публикую ссылку на эту заметку в канал &lt;a href=&quot;https://t.me/graker_coding&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://t.me/graker_coding&lt;/a&gt;. Должна превратиться в instant view.&lt;/p&gt;&lt;/div&gt;
</description>
  <pubDate>Sat, 14 Jun 2025 15:45:00 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">2111 at https://graker.ru</guid>
    </item>
<item>
  <title>Куки-баннер по-быстрому</title>
  <link>https://graker.ru/news/2025/06/01/cookie-banner-quick-solution</link>
  <description>&lt;p&gt;Для приведения сайтов в соответствие с обновленным законом о персональных данных внедрил куки-баннер, один на все сайты. Вот, делюсь кодом. &lt;/p&gt;
&lt;p&gt;Баннер совместим с Bootstrap 5 и почти совместим с Bootstrap 4 (нужно только скопировать стили для &lt;code&gt;.fixed-bottom&lt;/code&gt; и явным образом задать цвет бэкграунда). &lt;/p&gt;
&lt;p&gt;Судя по различным источникам, реальных манипуляций с куками в зависимости от ответа пользователя делать не нужно, во всяком случае пока. Хранить в табличке каждый факт пользовательского согласия с возможностью отозвать — тоже. Так что баннер просто рассказывает, что у нас тут на сайте куки есть, и по кнопке «Согласен» сохраняет факт нажатия в куку. Что позволяет еще год не показывать этот баннер. Ну и ссылку на политику обработки персональных данных даёт.&lt;/p&gt;
&lt;p&gt;Выглядит примерно вот так:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/storage/app/uploads/public/683/c71/d1e/683c71d1eb8ba939234106.png&quot; alt=&quot;cookie-banner.png&quot; class=&quot;img-responsive&quot;&gt;&lt;/p&gt;
&lt;p&gt;Код почти целиком написан чатом жопотэ — сейчас бы еще самому кодить во имя такой благородной цели. Так что я лишь внес одно небольшое уточнение.&lt;/p&gt;</description>
  <pubDate>Sun, 01 Jun 2025 15:35:00 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">2106 at https://graker.ru</guid>
    </item>
<item>
  <title>Комментарии на сайте отключены</title>
  <link>https://graker.ru/news/2025/05/31/comments-disabled</link>
  <description>&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;Когда-то домовая страница &lt;a href=&quot;/news/2016/08/05/grakerru-octobercms&quot;&gt;мигрировала с Drupal на OctoberCMS&lt;/a&gt;, и в ходе данной миграции все нативные комментарии были импортированы в Disqus. И в целом это было клёво, меньше суеты с отловом ботов и удалением спама, премодерация удобная, регистрация не нужна и все такое.&lt;/p&gt;
&lt;p&gt;Так или иначе, в связи с усилением сохранности персональных данных в нашей стране и недопустимостью их трансграничной передачи, комментарии на сайте теперь отключены. Весь архив (экспорт с Disqus) у меня сохранился, возможно когда-нибудь его восстановлю, но это очень сильно не первостепенная задача.&lt;/p&gt;
&lt;p&gt;В общем, всем кто писал, обсуждал, говорил спасибо за те или иные штуки, или говорил что-то другое — вам всем самим огромное спасибо за участие! Заметки обсуждать по-прежнему будет можно: прямо там, где были комментарии, написано где. Заходите в телеграм, или другие соцсети. Там и спишемся!&lt;/p&gt;
&lt;p&gt;P.S. Чуть позже поделюсь кодом для куки-предупреждения, если кому еще надо.&lt;/p&gt;&lt;/div&gt;
</description>
  <pubDate>Sat, 31 May 2025 11:20:00 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">2105 at https://graker.ru</guid>
    </item>
<item>
  <title>GDPR и бережное хранение персональных данных</title>
  <link>https://graker.ru/news/2025/05/13/gdpr-and-keeping-personal-data-safe</link>
  <description>&lt;p&gt;Сейчас много обсуждают, как срочно надо отправить уведомление об обработке персональных данных в Роскомнадзор, какой толщины создать папку документов на страже этих данных, какую форму согласия подвесить на сайт, и нужно ли отключать с него Гугл-аналитику. Для разнообразия предлагаю ознакомиться, какие технические меры в связи с аналогичными регуляциями предпринимают в Евросоюзе. У них, как известно, есть свой GDPR, вот и посмотрим, с чем они его едят.&lt;/p&gt;

&lt;blockquote&gt;GDPR — это General Data Protection Regulation, то есть общий регламент защиты (персональных) данных, утверждённый в Евросоюзе.&lt;/blockquote&gt;

&lt;p&gt;Я около 7 лет работаю с иностранными проектами. С теми или иными проявлениями требований GDPR сталкивался на десятках сайтов. Набралось чем поделиться с позиции технического специалиста.&lt;/p&gt;

&lt;em&gt;Нервным, впечатлительным и беременным дальше лучше не читать. Как минимум один Анатолий на днях пострадал, выбежал из машины в шоке и трепете, когда я изложил ему тезисно перечисленные ниже моменты, так сказать в порядке частной беседы.&lt;/em&gt;</description>
  <pubDate>Tue, 13 May 2025 10:45:00 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">2101 at https://graker.ru</guid>
    </item>
<item>
  <title>Продление услуги</title>
  <link>https://graker.ru/news/2018/07/15/service-prolongation</link>
  <description>&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;Интересный способ навязывания услуги. Берется что-нибудь ненужное — например защита whois-данных для доменов, зарегистрированных на юрлицо. В качестве «акции» дается годик бесплатной услуги. А через год приходят уведомления (хорошо еще приходят), что деньги на продление этой чудесной услуги зарезервированы. Услуга недорогая, если тебе не лень — иди, ищи, отменяй.&lt;/p&gt;
&lt;p&gt;Я, правда, был возмущен, поэтому не лень — отменил.&lt;/p&gt;&lt;/div&gt;
</description>
  <pubDate>Sun, 15 Jul 2018 19:50:00 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">1986 at https://graker.ru</guid>
    </item>
<item>
  <title>Про рассылки</title>
  <link>https://graker.ru/news/2018/06/14/on-subscriptions</link>
  <description>&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;Еще недавно каждый сайт, сервис и утюг норовил сообщить по почте, как здорово он подготовился к введению европейского GDPR. Что было удобно даже — можно было оптом от массы бесполезного отписаться. И срабатывало: отписали все. Не сдался только паб «Роза и корона» из окрестностей Лондона. Очень, видимо, хотят, чтобы я к ним зашел снова. Почему-то.&lt;/p&gt;
&lt;p&gt;А теперь вот начинается чемпионат мира — и каждая едальня, каждый спортивный, или детский магазин, каждый, кто может нарисовать мяч, или хотя бы сказать вслух «футбол», сообщает мне о своей готовности к мероприятию. Имейлами, смсками, и даже пуш-апами.&lt;/p&gt;
&lt;p&gt;В связи с чем имею сказать следующее. Имейл-рассылки в современном мире — это такой наглядный пример равновесия Нэша. Ну или трагедии общин, если хотите. Когда каждый делает себе рассылочку, потому что у всех есть. Но всем от этого только хуже — потому что невозможно их читать в таком количестве. &lt;/p&gt;
&lt;p&gt;Когда-то прикольно было получить письмо о чем-нибудь интересном, раз-другой в неделю. Но, блин, когда это всё приходит десятками в день, даже то, на что ты специально подписался, потому что интересно — не приносит радости и порой машинально удаляется вместе с остальным.&lt;/p&gt;
&lt;p&gt;Задрали, в общем, ваши рассылки. Пока писал эту заметку — еще два письма пришло. Караул.&lt;/p&gt;&lt;/div&gt;
</description>
  <pubDate>Thu, 14 Jun 2018 12:40:00 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">1978 at https://graker.ru</guid>
    </item>
<item>
  <title>Привет от Друпагеддона</title>
  <link>https://graker.ru/news/2017/02/17/privet-ot-drupageddona</link>
  <description>&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;На днях принесли пару сайтов на восстановление — взлом, дефейс, рассылка спама, блокировка хостером. В общем, все прелести Друпагеддона (он же &lt;a href=&quot;https://www.drupal.org/SA-CORE-2014-005&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;уязвимость SA-CORE-2014-005&lt;/a&gt;). Сайты сделали мы года 4 назад, версия у обоих так и осталась — Drupal 7.17.&lt;/p&gt;
&lt;p&gt;Ребята, ну сайты-то надо обновлять, хоть иногда. Даже если они маленькие и незаметные, их рано или поздно поиском старых Друпал-версий найдут. И сделают с ними вот такое, да, а жениться потом не будут.&lt;/p&gt;
&lt;p&gt;Почистить сайты, когда файловую структуру Друпала помнишь наизусть, не очень трудно. Поудалял руками (бэкдоры в каждой второй папке), прибил левых юзеров, блоки и ноды в формате PHP, фильтр потом конечно отключил. Провел все обновления, на всякий случай прогнал через &lt;a href=&quot;http://drupal.org/project/hacked&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Hacked!&lt;/a&gt; и &lt;a href=&quot;https://www.drupal.org/project/drupalgeddon&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Drupalgeddon&lt;/a&gt;. Хотя конечно авторы последнего правильно говорят: в идеале надо не что-то там пытаться почистить, а брать бэкап от 14 октября 2014 года и восстанавливаться с него.&lt;/p&gt;
&lt;p&gt;В целом процесс унылый и рутинный. Но вот что действительно порадовало, так это то что &lt;code&gt;drush up&lt;/code&gt; протащил все модули и ядро с 7.17 на 7.54 — и ни разу не ругнулся, и ничего не поломал. Что лишний раз напоминает: Drupal — это, все-таки, хорошо.&lt;/p&gt;&lt;/div&gt;
</description>
  <pubDate>Fri, 17 Feb 2017 08:10:00 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">1869 at https://graker.ru</guid>
    </item>
<item>
  <title>Disqus и HTTPS</title>
  <link>https://graker.ru/news/2017/02/02/disqus-vs-https</link>
  <description>&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;На днях переводил оставшиеся сайты на HTTPS, в том числе перевод коснулся и домовой страницы. С &lt;a href=&quot;https://letsencrypt.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Let&#039;s Encrypt&lt;/a&gt; это супер-просто, а в случае &lt;a href=&quot;/octobercms&quot;&gt;OctoberCMS&lt;/a&gt; даже &lt;code&gt;.htaccess&lt;/code&gt; править не нужно — принудительный редирект сам заработает.&lt;/p&gt;
&lt;p&gt;Без сюрпризов однако не обошлось. Оказывается, Disqus, на котором здесь работают комментарии, привязывает комментарии к полным урлам материалов. Включая протокол. В результате 50 комментов, ранее написанных к заметке, превращаются в 0 комментов к той же заметке, полученной по протоколу HTTPS. Зачем, почему — загадка. Это ведь, блин, одна и та же заметка, как ее ни грузи! Само собой, все комментарии на домовой странице моментально исчезли.&lt;/p&gt;
&lt;p&gt;К счастью, проблему оказалось можно победить в полуручном режиме. В админке Disqus &lt;a href=&quot;https://disqus.com/admin/discussions/migrate/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;есть&lt;/a&gt; возможность отмаппировать урлы (Upload a URL map). Жмем туда, скачиваем все сохраненные урлы в CSV, открываем, добавляем второй столбец, в котором те же урлы, но уже с https. Сохраняем (обязательно с разделением запятой) и загружаем в обратно в дискас.&lt;/p&gt;
&lt;p&gt;Дискас скажет, что будет обрабатывать файл до 24 часов, но на деле у меня уже минут через 15 все вернулось.&lt;/p&gt;&lt;/div&gt;
</description>
  <pubDate>Thu, 02 Feb 2017 09:45:00 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">1867 at https://graker.ru</guid>
    </item>
<item>
  <title>Микросовет — не указывайте протокол</title>
  <link>https://graker.ru/news/2016/11/11/mikrosovet-ne-ukazyvajte-protokol</link>
  <description>&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;При вставке в HTML ассетов, например стилей или скриптов со сторонних ресурсов, имеет смысл воздержаться от указания протокола. Не все знают, но вместо&lt;/p&gt;&lt;/div&gt;
&lt;pre data-component-id=&quot;grakerru:code-block&quot; class=&quot;code-block language-none&quot;&gt;&lt;code class=&quot;language-none&quot;&gt;&amp;lt;link href=&amp;#039;http://fonts.googleapis.com/...&amp;#039; rel=&amp;#039;stylesheet&amp;#039; type=&amp;#039;text/css&amp;#039;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;можно сделать вот так:&lt;/p&gt;&lt;/div&gt;
&lt;pre data-component-id=&quot;grakerru:code-block&quot; class=&quot;code-block language-none&quot;&gt;&lt;code class=&quot;language-none&quot;&gt;&amp;lt;link href=&amp;#039;//fonts.googleapis.com/...&amp;#039; rel=&amp;#039;stylesheet&amp;#039; type=&amp;#039;text/css&amp;#039;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;Тогда протокол будет подставлен автоматически. Это пригодится в случае перехода на https и вредный Фаерфокс не будет показывать иконку «заблокировано небезопасное содержимое», если какой-нибудь шрифт грузится по http.&lt;/p&gt;&lt;/div&gt;
</description>
  <pubDate>Fri, 11 Nov 2016 20:46:00 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">1853 at https://graker.ru</guid>
    </item>
<item>
  <title>Adobe Assets</title>
  <link>https://graker.ru/news/2016/05/21/adobe_assets</link>
  <description>&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;Когда нет под рукой фотошопа, Gimp-а не хватает (тени плохо отображаются), а верстать надо&amp;nbsp;— есть неплохой инструмент, &lt;a href=&quot;http://assets.adobe.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Adobe Assets&lt;/a&gt;. Он и картинки из слоев нарезает, и CSS для текста, цвета, теней и скругленных уголков генерирует. Сам пользуюсь давно и с точки зрения «посмотреть как верстать» этот браузерный инструмент легко заменяет фотошоп.&lt;/p&gt;
&lt;p&gt;Но блин, как же раздражает, когда в двух соседних вкладках открыты assets и верстаемый сайт, и ты нажимаешь «Обновить» не в той вкладке.&lt;/p&gt;&lt;/div&gt;
</description>
  <pubDate>Fri, 20 May 2016 22:33:06 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">948 at https://graker.ru</guid>
    </item>
<item>
  <title>AngularJS и $scope.$apply()</title>
  <link>https://graker.ru/news/2015/04/07/angularjs_i_scopeapply</link>
  <description>&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;blockquote&gt;&lt;p&gt;If you’ve written a non-trivial amount of code in AngularJS, you may have come across the $scope.$apply() method. On the surface, it may seem like just a method you call to get your bindings to update. But why does it exist? And when do you need to use it?&lt;br&gt;
To really understand when to use $apply, it’s good to know exactly why we need to use it, so let’s dive in!&lt;br&gt;&lt;strong&gt;&lt;a href=&quot;http://jimhoskins.com/2012/12/17/angularjs-and-apply.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AngularJS and scope.$apply&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Отличные разъяснения.&lt;/p&gt;&lt;/div&gt;
</description>
  <pubDate>Mon, 06 Apr 2015 21:54:37 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">997 at https://graker.ru</guid>
    </item>
<item>
  <title>Laravel и AngularJS</title>
  <link>https://graker.ru/news/2015/03/10/laravel_i_angularjs</link>
  <description>&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;Изучаю всякое про прогрессивные технологии. Нашел вот туториал, не сохранить невозможно&amp;nbsp;— хорошо и доходчиво излагает человек.&lt;br&gt;&lt;strong&gt;&lt;a href=&quot;https://scotch.io/tutorials/create-a-laravel-and-angular-single-page-comment-application&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Create a Laravel and Angular Single Page Comment Application&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;
</description>
  <pubDate>Mon, 09 Mar 2015 23:14:27 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">998 at https://graker.ru</guid>
    </item>
<item>
  <title>Рынок труда веб-разработчиков</title>
  <link>https://graker.ru/news/2014/03/14/rynok_truda_veb_razrabotchikov</link>
  <description>&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;blockquote&gt;&lt;p&gt;В рамках исследования был проведен анализ почти 400 анкет представителей компаний из сегмента веб-разработок, а также проведен мониторинг популярности вакансий на крупных порталах по трудоустройству.&lt;br&gt;
Мы уже не первый год регулярно слышим от менеджеров и директоров вопрос: «где взять программистов?». Поэтому мы решили взяться за дело и приступить к решению этого вопроса. Для начала нам пришлось разобраться, какие вообще программисты нужны — и в каких количествах — именно для этого мы запустили открытый опрос в ноябре 2013 года.&lt;br&gt;
Методика проведения исследования: онлайн-анкетирование представителей компаний из сегмента веб-разработок, собственный анализ профильных открытых вакансий на крупных порталах по трудоустройству.&lt;br&gt;
По итогам четырех месяцев исследования, разбавленных месяцем новогодних каникул и месяцем олимпиады, мы, наконец-то, публикуем результаты.&lt;br&gt;&lt;strong&gt;&lt;a href=&quot;http://habrahabr.ru/company/ruward/blog/215629/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Исследование рынка труда веб-разработчиков&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Про деньги конечно мало написано. Но познавательно.&lt;/p&gt;&lt;/div&gt;
</description>
  <pubDate>Fri, 14 Mar 2014 18:53:10 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">1054 at https://graker.ru</guid>
    </item>
<item>
  <title>Микросовет — телефоны в шапке</title>
  <link>https://graker.ru/news/2013/12/10/mikrosovet_telefony_v_shapke</link>
  <description>&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;Дорогие дизайнеры и разработчики сайтов. Когда я с мобильника захожу на страницу какой-нибудь компании, мне обычно хочется скопировать из шапки телефон&amp;nbsp;— и позвонить по нему. В 90 случаях из 100 я только для этого и захожу с мобильника на страницы каких-нибудь компаний. Чтоб скопировать номер и позвонить. И в 0 случаях из 100 я захожу чтобы посмотреть, каким красивым шрифтом вы нарисовали телефонные номера. Еще раз: в 90 случаях&amp;nbsp;— чтобы скопировать и позвонить. И в 0 случаев&amp;nbsp;— чтоб посмотреть на красивый шрифт.&lt;/p&gt;
&lt;p&gt;Подумайте об этом.&lt;/p&gt;
&lt;p&gt;И если картинка с красивыми телефонными номерами все же очень нужна&amp;nbsp;— продублируйте нормальную текстовую запись номеров хотя бы в подвале. Это нетрудно.&lt;/p&gt;&lt;/div&gt;
</description>
  <pubDate>Tue, 10 Dec 2013 17:54:21 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">1059 at https://graker.ru</guid>
    </item>
<item>
  <title>Про вредные платежные системы</title>
  <link>https://graker.ru/news/2013/05/22/pro_vrednye_platezhnye_sistemy</link>
  <description>&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;Ставил тут на один портал разные платежные системы. Для каких-то взял готовые модули, для других&amp;nbsp;— написал, для третьих&amp;nbsp;— переделал чужие, четвертые без меня поставили. Что их все объединяет?&lt;/p&gt;
&lt;p&gt;Да то, что ни у одной из установленных платежных систем (русских и украинских) нет на сайте в форме оплаты кнопки или ссылки «Назад в магазин». Появляется только если ввести что-нибудь неправильно&amp;nbsp;— номер кредитки там, или ID кошелька.&lt;/p&gt;
&lt;p&gt;Эй вы, Яндекс.Деньги, Webmoney, Мастербанк, Интеркасса! Не будьте врединами, сделайте ссылку «Обратно в магазин» в дефолтной форме оплаты. Я может по ошибке вашу систему в списке выбрал&amp;nbsp;— и мне нафиг не упало заводить у вас аккаунт, мне надо вернуться и выбрать то, что я хотел. &lt;/p&gt;
&lt;p&gt;Посмотрите на PayPal&amp;nbsp;— ссылка на месте, а по популярности фору вам всем вместе взятым даст. Стыдно должно быть.&lt;/p&gt;&lt;/div&gt;
</description>
  <pubDate>Wed, 22 May 2013 13:57:46 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">1090 at https://graker.ru</guid>
    </item>
<item>
  <title>Рукопожатный марш</title>
  <link>https://graker.ru/news/2012/08/18/rukopozhatnyi_marsh</link>
  <description>&lt;div data-component-id=&quot;grakerru:video&quot; class=&quot;video-embed&quot;&gt;
  &lt;div class=&quot;ratio ratio-16x9&quot;&gt;
&lt;div class=&quot;video-embed__unavailable&quot;&gt;Видео недоступно&lt;a href=&quot;https://www.youtube.com/watch?v=pBS0EEblLtw&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;Ссылка на оригинал&lt;/a&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
</description>
  <pubDate>Sat, 18 Aug 2012 17:28:35 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">1171 at https://graker.ru</guid>
    </item>
<item>
  <title>Drupal и Вконтактик</title>
  <link>https://graker.ru/news/2011/12/07/drupal_i_vkontaktik</link>
  <description>&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;Когда-то давно хотел сделать кросспостинг в &lt;a href=&quot;http://vkontakte.ru/id811661&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;контактик&lt;/a&gt;, но решений не было. А тут вдруг внезапно заметил&amp;nbsp;— оказывается, &lt;a href=&quot;http://drupal.org/project/vkxp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;модуль&lt;/a&gt; появился. Немедленно схватил и настроил. Работает!&lt;/p&gt;
&lt;p&gt;Автору&amp;nbsp;— большое спасибо! Вот, кстати, &lt;a href=&quot;http://drupalace.ru/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;его страница&lt;/a&gt;. На ней еще и дизайн, я смотрю, поменялся. Блин, как я от жизни-то отстал.&lt;/p&gt;&lt;/div&gt;
</description>
  <pubDate>Wed, 07 Dec 2011 07:16:45 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">1236 at https://graker.ru</guid>
    </item>
<item>
  <title>Правила русского языка</title>
  <link>https://graker.ru/news/2011/11/28/pravila_russkogo_yazyka</link>
  <description>&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;А вот глумеж над всякими правилами русского языка:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;&lt;li&gt;Подлежащее, оно не нуждается в уточнении местоимением.&lt;/li&gt;
&lt;li&gt;Тире между подлежащим и сказуемым – не ставится.&lt;/li&gt;
&lt;li&gt;Помните о том, что в большинстве случаев связку &quot;о том&quot; можно исключить.&lt;/li&gt;
&lt;li&gt;Кое-кто стали забывать правила согласования главных членов предложения.&lt;/li&gt;
&lt;li&gt;Если хочете использовать глагол, то спрягать его нужно правильно, а не как того захотит автор.&lt;/li&gt;
&lt;li&gt;И так далее.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.umopit.ru/jokes/Russian.htm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Правила русского языка&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;За наводку спасибо &lt;strong&gt;cynicus&lt;/strong&gt;.&lt;/p&gt;&lt;/div&gt;
</description>
  <pubDate>Mon, 28 Nov 2011 15:55:17 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">1242 at https://graker.ru</guid>
    </item>
<item>
  <title>Новости интернетов</title>
  <link>https://graker.ru/news/2011/11/03/novosti_internetov</link>
  <description>&lt;div class=&quot;paragraph paragraph--text&quot;&gt;&lt;p&gt;О пользе записей в Facebook:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Ранее неоднократно сообщалось о проблемах с работой, возникавших у людей в связи с активностью в Facebook. Так, в июле 2009 года полицейского из Флориды понизили в должности за то, что он хвастался в Интернете умением избивать задержанных. Чуть раньше был уволен работник ткацкой фабрики из Южной Африки, который назвал своего начальника в Facebook &quot;серийным онанистом&quot;. В 2008 году своей работы лишились 13 членов экипажа британской авиакомпании Virgin Atlantic. В комментариях в одной из групп в социальной сети они называли пассажиров &quot;быдлом&quot; и предполагали, что в лайнерах есть тараканы.&lt;br&gt;&lt;strong&gt;&lt;a href=&quot;http://lenta.ru/news/2011/11/02/apple/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Увольнение работника Apple за комментарии в Facebook признали законным&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Вот такая она, демократическая свобода слова. Но пока непуганые и ни о чем не подозревающие россияне продолжают писать вконтактик про все подряд.&lt;/p&gt;
&lt;p&gt;А Twitter предложил пользователям рассказать, какой он клевый и полезный:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Пользователи могут поделиться своими историями. Для этого нужно опубликовать запись с хештегом #twitterstories, либо написать сообщение на аккаунт @TwitterStories. К заметке необходимо прикрепить фотографию или видеозапись, которые помогут проиллюстрировать историю. Каждый месяц представители Twitter будут отбирать пользователей, чьи истории появятся на сайте.&lt;br&gt;&lt;strong&gt;&lt;a href=&quot;http://lenta.ru/news/2011/11/02/stories/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Микроблогеры рассказали о пользе Twitter&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;От организаторов революций в Африке пока ничего не слышно.&lt;br&gt;
Зато я вот нашел &lt;a href=&quot;http://www.pidjin.net/2011/02/21/pidjin-parodies-3-batman/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;историю&lt;/a&gt; про Twitter. Классный, кстати, комикс, рекомендую.&lt;/p&gt;&lt;/div&gt;
</description>
  <pubDate>Thu, 03 Nov 2011 06:37:10 +0000</pubDate>
    <dc:creator>graker</dc:creator>
    <guid isPermaLink="false">1253 at https://graker.ru</guid>
    </item>

  </channel>
</rss>
