Мысли о программировании, жизни и христианстве.

Позднее Ctrl + ↑

Time Machine на Tomato by Shibby для Asus RT-AC68U

Озадачился вот своим роутером. Надоела нестабильность стоковой прошивки и решил попробовать что-то новое. Решил поставить Tomato by Shibby. Про установку из под Windows достаточно подробно написано в публикации «ASUS RT-AC68U — How to flash TomatoUSB for RT-AC68U». Но у меня уже стояла прошивка от Merlin с открытым Telnet, поэтому все ограничилось подключением к роутеру и командами nvram erase, затем nvram commit, выбором файла с последней (131) прошивкой на её сайте и установкой.
В отличии от стоковой, у этой прошивки нет встроенной поддержки Time Machine, поэтому её пришлось добавить. Операция проходила в два этапа.

Этап первый: Установка репозитория Entware

Раньше нужно было сделать много манипуляций, но сейчас репозитории для моего роутера устанавливается достаточно просто. Проверьте доступ по SSH в роутере Administration → Admin Access и в путь.
Для флешки отформатированной в ext2/ext3 с меткой ENTWARE делаем следующие настройки роутера в USB and NAS → USB Support:
В поле Run after mounting вносим:

#!/bin/sh
/opt/etc/init.d/rc.unslung start

и в поле Run before unmounting следующее:

#!/bin/sh
/opt/etc/init.d/rc.unslung stop
sleep 15
for i in `cat /proc/mounts | awk '/ext3/{print($1)}'` ; do
  mount -o remount,ro $i
done

Не забываем сохранить изменения. Переходим в Administration → Scripts → Init page, вводим

echo "LABEL=ENTWARE /opt ext3 defaults 1 1" >> /etc/fstab

и вновь сохраняем. Перегружаем роутер и устанавливаем Entware. В текущей прошивке он устанавливается простой командой через Telnet.

entware-install.sh

Дополнительно об установке можно почитать в статье «Устанавливаем Entware.arm на маршрутизатор с прошивкой tomato от Shibby»

Этап второй: Настройка Time Machine

Приступим к настройке Time Machine и начнём с установки нужных пакетов. Может они не все нужны, поэтому комментарии экспертов приветствуются!
Устанавливаем netatalk для реализации протокола AppleTalk нужного для Time Machine и  avahi-daemon с утилитами, для имитации сервиса Bonjour. Bonjour нужен для наглядного представления Time Machine в Mac OS. Слухи ходят, что netatalk сам это умеет и он не нужен
Пакет busybox даст нам возможность использовать некоторые недоступные Unix команды. Например, добавлять пользователей.

opkg install netatalk avahi-daemon avahi-utils busybox

Создаём файл S00setup с первой строкой #!/bin/sh для загрузки настроек нужных для Time Machine при перезагрузке роутера и кладём его в /opt/etc/init.d/S00setup
Теперь сделайте его исполняемым

chmod +x /opt/etc/init.d/S00setup

Настраиваем avahi

Настройку avahi начинаем с создания файла afpd.service со следующем содержанием

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">%h</name>
    <service>
    <type>_afpovertcp._tcp</type>
    <port>548</port>
  </service>
  <service>
    <type>_device-info._tcp</type>
    <port>0</port>
    <txt-record>model=TimeCapsule6</txt-record>
  </service>
</service-group>

который кладём по следующему пути /opt/etc/avahi/services/afpd.service
Редактируем /opt/etc/avahi/avahi-daemon.conf, раскомментировав линию host-name и дав имя:

host-name=TimeCapsule

Чтобы TimeCapsule показывалась в Finder всем, нужно добавить группу nogroup для всех пользователей.

addgroup nogroup

Делаем автосоздание группы при перезапуске пользователя.

echo "addgroup nogroup" >> /opt/etc/init.d/S00setup

Запускаем avahi

/opt/etc/init.d/S42avahi-daemon start

и в боковой панели Finder должена появиться TimeCapsule.

Настраиваем netatalk

Приступаем к самому важному. Настраиваем netatalk начиная с редактирования файла /opt/etc/netatalk/AppleVolumes.default. Добавляем в конце следующую строку:

/mnt/LABELDISK/TimeMachine "TimeMachine" volsizelimit:300000 
veto:"/lost+found/Network Trash Folder/Temporary Items/" cnidscheme:dbd options:usedots,upriv,tm allow:USER

, где /mnt/LABELDISK/TimeMachine — путь к папке, где будут хранится бекапы;
«TimeMachine» — имя расшаренного ресурса, которое появится в настройках Time Machine в Mac OS;
volsizelimit:300000 — максимальный размер бекапов (~314GB);
veto:«/lost+found/Network Trash Folder/Temporary Items/» — прячем не нужные папки;
cnidscheme:dbd — уменьшаем количество ошибок (может влиять на скорость создания бекапа);
options:usedots,upriv,tm — показываем что можно использовать для создания Time Machine и кто может это делать;
allow:USER — пользователь имеющий доступ к папке для бекапов, которого мы сейчас создадим.

Поменяем конфигурацию netatalk по следующему пути /opt/etc/netatalk/afpd.conf удалив или закомментировав старую и вставив новую

- -tcp -noddp -uamlist -uams_dhx.so,uams_dhx2_passwd.so -nosavepassword

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

Создаём пользователя USER с паролем PASS (это пример, пароль какой вы хотите) и даём ему права на папку для бекапов.

adduser USER
chown -R USER /mnt/LABELDISK/TimeMachine/

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

echo 'adduser USER' >> /opt/etc/init.d/S00setup
echo 'echo -e "PASS\PASS" | passwd USER' >> /opt/etc/init.d/S00setup

Вот тут загвоздка! Пользователь создаётся, но пароль ему не присваивается. Может кто подскажет?

В результате у нас получается следующее содержимое файла /opt/etc/init.d/S00setup

#!/bin/sh
addgroup nogroup
adduser USER
echo -e "PASS\PASS" | passwd USER

Перезапускаем netatalk

/opt/etc/init.d/S27afpd restart

Или просто перезагрузите роутер целиком. Теперь вы должны подключиться к TimeCapsule как созданный выше пользователь и настроить Time Machine на Mac OS.

P.S. Я ещё не достаточно долго тестировал работу Time Machine на Tomato by Shibby и мог что-то забыть, поэтому возможны неточности.
P.S.S. Дополнительно можно почитать «Using an ASUS router as a Time Capsule», «Concisest guide to setting up Time Machine server on Ubuntu Server 12.04, 14.04 & Debian» и «Time Capsule on OpenWRT (Apple File Protocol Server with Time Machine Support)».

Церковный сайт: веб-мастер и команда

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

Люблю советы по существу. Нравится публикация «70+ tips for effective church sites». Привожу часть советов в вольном переводе. К ним буду добавлять другие советы и комментарии. Чтобы не громоздить в одну публикацию, разобью советы по темам. Потом соберу эти публикации в отдельный проект.

  1. Церковный веб-мастер или команда нуждается в чёткой должностной инструкции.
    Руководство церковью должно чётко обозначать обязанности людей участвующих в работе сайта. Если руководитель команды или веб-мастер не входит в руководство церкви, то он помещается в зону прямой ответственности перед церковными лидерами. Тем не менее те, кто не разбирается в вопросах связанных с сайтом, не навязывают веб-мастеру собственными представлениями о веб-дизайне! Церковь поощряет веб-мастера или команду сайта стоя за кулисами.
  2. Церковному веб-мастеру (или команде) необходимо составить план предстоящей работы.
    Церковь обозначает какого вида труд ожидается от тех, кто участвует в проекте. Это выражается в тех задачах, которые решает сайт в контексте видения церкви. Для команды, полезные инструменты — это системы совместной работы над проектами типа Битрикс24, Мегаплан, Asana, Basecamp или любые другие.
  3. Крупный церковный сайт желательно создать на системе управления контентом (CMS). В CMS удобно структурировать и управлять содержимым сайта и предоставлять разным людям доступ к его редактированию без участия веб-мастера. В многочисленной церкви она позволит служениям оперативно размещать последние новости и править информацию, используя только интерфейс браузера и доступ по паролю. Это удобное решение для командной работы и для поддержания сайта в актуальном состоянии.
    Существует много CMS. Поищите подходящую вам на CMSmatrix или OpenSourceCMS. Потратьте время, чтобы найти CMS подходящую вам лучше других. Рекомендую воспользоваться рейтингами Ruward или CMSmagazine.
  4. Что делать, если в вашей церкви нет никого технически подготовленных на роль веб-мастера? Используйте готовые шаблоны сайтов церкви. Это также ответ к вопросам возникающим если создатель сайта покидает церковь не подготовив себе замену. При этом никто не представляет, как обновить или изменить на сайте информацию.
    Существуют конструкторы сайтов (даже христианские) предлагающие готовые шаблоны церковных сайтов на платной или бесплатной основе. Об них в этой статье «Церковный сайт: Конструкторы сайтов». Содержимое добавляется и меняется с помощью визуальных редакторов в браузере. Перед выбором потратьте некоторое времени, чтобы сравнить предложения.
    Другой вариант это шаблон для CMS или HTML. Поискать можно здесь или в Яндексе или Google по запросу «church themes».
  5. Команда — это не всегда люди рядом. Учитесь у других. Общайтесь с другими христианскими веб-мастерами. Сделайте ряд манипуляций мышкой для поиска помощи.
    Существуют форумы и другие ресурсы, где церковные веб-мастера общаются на интересующие их вопросы. Используйте Google или Яндекс для поиска решения технических проблем. Вдохновитесь на обновления дизайна сайта просматривая и изучая другие церковные сайты. Даже один верный в малом человек, достигнет многого.
  6. Привлекайте членов церкви к молитве и поддержке администраторов сайта, модераторов и новых церковных веб-проектов. Это и их сайт!
    Ваша церковь — это уже команда! Проясняйте для них цели сайта и нужды, просите молиться за эффективность охвата аудитории и о том, чтобы он стал известен новым людям. Члены церкви, у которых есть блоги или другие типы сайтов, могут использовать их, чтобы придать сайту церкви более высокий рейтинг в сети.

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

Администратор — человек любящий сроки и способный объединить разных людей над одной задачей.
Иллюстратор — человек умеющий рисовать и знающий слова Photoshop, Corel, Illustrator.
Фотограф — тот, кто не мыслит себя без камеры, Instragram и интересных ракурсов.
Корректор — виртуоз, владеющий знаками орфографии и чувствующий великий и могучий русский язык.
Интервьюер — тот, кто может задавать правильные вопросы и затем перенести ответы в прозу.
Корреспондент — тот, кто появляется в нужном месте и в нужное время и способен описать происходящее.
Редактор — человек способный мыслить глобально и понимать, что люди ищут на сайте о вашей церкви.
Разнорабочий — верный человек не боящийся повторяющихся действий и нужной, но простой работы.
Кодер — человек которого не пугают непонятные символы и знающий тайны php, html, css и js.

Битрикс: Выводим адреса элементов инфоблока на одной Яндекс карте

Столкнулся в Битрикс с задачей вывода на одной карте расположения всех офисов компаний. Данные о расположении офиса хранились в переменной «MAP» типа «Привязка к Яндекс. Карте» свойств элемента инфоблока «Офисы». В процессе решения родился следующий код:

// Берём все значения инфоблока с ID равным 10. Вам нужно подставить свой ID.
$mas = CIBlockElement::GetList(array(), array( "IBLOCK_ID" => 10 )); 

while ( $oElement = $mas->GetNextElement() ) {
  $aElement['PROPERTIES'] = $oElement->GetProperties(); // Берём значения элемента инфоблока

  // Координаты хранятся в переменной MAP (подставьте вашу переменную) через запятую, разделим их
  $arTmp = explode(',', $aElement['PROPERTIES']['MAP']['VALUE']); 
  //Подготовка карты
  $arResult['POSITION']['yandex_scale'] = "5"; // Подбираем размер карты, чтобы поместились все маркеры
  // В yandex_lat и yandex_lon заносим координаты центральной точки карты
  $arResult['POSITION']['yandex_lat'] = $arTmp[0]; // В нашем случае координаты первого элемента инфоблока
  $arResult['POSITION']['yandex_lon'] = $arTmp[1];
  //Собираем маркеры
  $arResult['POSITION']['PLACEMARKS'][] = array(
    'LON' => $arTmp[1], // LON и LAT - координаты маркера
    'LAT' => $arTmp[0],
  );
}
// Выводим карту с метками через компонент Битрикса для карт Яндекса (Яндекс.Карты: настраиваемая карта)
$APPLICATION->IncludeComponent(
  "bitrix:map.yandex.view",
  "",
  Array(
    "INIT_MAP_TYPE" => "MAP",
    "MAP_DATA" => serialize($arResult['POSITION']),
    "MAP_WIDTH" => "978", // Ширина карты
    "MAP_HEIGHT" => "400", // Высота карты
    "CONTROLS" => array("ZOOM", "TYPECONTROL", "SCALELINE"),
    "OPTIONS" => array("ENABLE_SCROLL_ZOOM", "ENABLE_DBLCLICK_ZOOM", "ENABLE_DRAGGING"),
  )
);

P.S. Настройки компонента карт Яндекса можно посмотреть вот здесь.

Сейфинг или псевдоанглицизм в русском языке

Встретил слово «сейфинг» и воспротивилась русская душа. Возмутился во мне разум! И узнал я о псевдоанглицизме. Что это за явление?

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

Людинг простинг восхитинг вашинг уминг!

Пример текста с псевдоанглицизмами.

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

P.S. Как вы относитесь к псевдоанглицизму?

Финансовый фильтр для мозга

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

Как вставить картинку в README.md на GitHub

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

![Image alt](https://github.com/{username}/{repository}/raw/{branch}/{path}/image.png)

Где,

{username} — ваш ник на ГитХабе;
{repository} — репозиторий где хранятся картинки;
{branch} — ветка репозитория;
{path} — путь к месту нахождения картинки.

Пример:

![Иллюстрация к проекту](https://github.com/jon/coolproject/raw/master/image/image.png)

P.S. Если ветка отличается от «master», то вписываем её. Например, для генерируемого ГитХабом из репозитория сайта — это «gh-pages».

Церковный сайт: Советы для программистов

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

Люблю советы по существу. Нравится публикация «70+ tips for effective church sites». Привожу часть советов в вольном переводе. К ним буду добавлять другие советы и комментарии. Чтобы не громоздить в одну публикацию, разобью советы по темам. Потом соберу эти публикации в отдельный проект.

  1. Если вы используете Javascript, убедитесь, что весь функционал сайта работает у тех, кто этот язык программирования не использует.
    Убедитесь в следующем. Всё что использует и работает только с Javascript на самом деле невидимо (а не в нерабочем состоянии и мешает пользоваться сайтом) если в браузере отключена поддержка этого языка. При необходимости обеспечьте альтернативные варианты работы заключённые в теги <noscript>. 10% веб-пользователей пользуются браузерами с отключённым Javascript. Это достаточно много посетителей в течение года. Рассмотрите возможность получить то, что реализовано с Javascript, с помощью других средств, например, используя CSS и PHP.
  2. Не используйте фреймы для дизайна сайта.
    Хотя встречаются специализированные ситуации, когда можно эффективно использовать фреймы, стандартный церковный сайт не относится к ним. У фреймов ряд недостатков, которые не преодолеет даже эксперт в программировании и дизайне.
  3. Узнайте, как использовать «подключаемые» файлы — это отличный способ сэкономить время загрузки страницы.
    Если вы ещё не обнаружили преимущества экономии времени при включении кода на стороне сервера попробуйте «подключаемые» файлы (где один файл генерирует колонтитулы, другой — меню и т. д. в пределах страницы) для ускорения работы сайта. Поищите в Google информацию по SSI.
  4. Кроме того, узнайте, как использовать CSS.
    CSS (таблицы стилей) — это формальный язык программирования, помогающий устанавливать и изменять внешний вид страниц и элементов сайта. Изучение CSS поможет вам потом легко менять вид сайта.
  5. Не включайте адреса электронной почты на сайте в явном виде через ссылку на «mailto».
    Указанные так почтовые адреса будут со временем «собраны» спамерами. Создайте вместо этого контактную форму. Или «скройте» адреса, используя Javascript.
  6. Подготовьте страницы сайта к печати.
    Сделайте это автоматически, с использованием CSS стилей для печати.
    CSS Design: Going to Print
  7. Пишите как можно больше комментариев к коду.
    Это поможет читать код, находить ошибки и вносить изменения. Видеть где заканчиваются функции, блочные и другие элементы кода.
  8. Придумывайте понятные названия структурных блоков кода.
    Используйте стандартные названия для шапки сайта, подвала, контента и боковых панелей. Избегайте названий, которые понятны только вам — это создаст трудности для командной работы.
  9. Ищите простые решения для поставленных задач.
    Если вы пишите сайт сами, то кода должно быть как можно меньше. Возможно, вам достаточно популярной CMS или нескольких скриптов собранных для решения поставленной задачи. Не изобретайте велосипед. Опыта наберётесь, но потратите время и неизбежно столкнётесь с проблемами, которые давно уже решены.
  10. Определитесь со стандартами написания кода и используйте их при программировании.
    Уже опубликованы стандарты написания кода GitHub, Google и ряда других проектов с мировым уровнем. Выберите стандарт и это поможет вам в командной работе над сайтом.

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

Apple ну зачем мне приложение Apple Watch?

Я рад успехам купертиновцев, но вот скажите зачем мне теперь неудаляемое приложение Apple Watch на телефоне?

P.S. Эх, что-то захотелось ноутбук обновить. Вроде понимаешь, что прошка конца 2013 ещё послужит и ждешь новый их монитор, но показывают новую модель и ... Магия!

Простимся с хлебными крошками в дизайне?

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

Хлебные крошкиНавигационная цепочка (Дублирующее меню, «Хлебные крошки», англ. Breadcrumbs) — элемент навигации, представляющий собой путь от главной страницы до текущей.

Не изжили ли себя хлебные крошки как элемент навигации и дизайна?

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

Несколько интересных ссылок:
(en) Breadcrumbs In Web Design: Examples And Best Practices
(en) Дискуссия на вопрос — Are breadcrumbs outdated in website design?

Ранее Ctrl + ↓