О стандартизации откровенного содержания

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

Проблема откровенности

"Откровенное" содержание (explicit content) отличается тем, что сильно влияет на психику читателя, меняя если не мировоззрение, то субъективное отношение к теме. Не всякий читатель готов к этому, не всякий готовый хочет это видеть. Поэтому необходимо предупреждение (discretion, content notice). Сейчас каждый сайт строит свой велосипед.

adult content notice livejournal

Cуществующие решения

1. SafeSurf - устарел, только для сайта или страницы

2. RTA - пожалуй самый используемый ныне стандарт на порно-сайтах.. достаточно заголовка

header("Rating: RTA-5042-1996-1400-1577-RTA");

Либо мета на странице

<meta name="RATING" content="RTA-5042-1996-1400-1577-RTA" />

Либо .htaccess правила для всего сайта

<ifmodule mod_headers.c> Header set Rating "RTA-5042-1996-1400-1577-RTA" </ifmodule>

3. ICRA - устарел, задавался для всей страницы используя довольно развёрнутую таблицу ICRA или RSAC-кодов.

<meta http-equiv="pics-label" content='(PICS-1.1 entries)' />

4. PICS - мигрировал в W3C POWDER. Последний основан на rdf что уже означает сложности в определении и понимании

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

Короче говоря, должен быть ступенчатый рейтинг, как у MPAA для фильмов или ESRB/PEGI для игр, только для любого web-содержания.

Новый микроформат / xrate 1.0

Я вижу этот микроформат очень просто - автор просто должен вешать на любой html элемент атрибут согласно рейтингу, а не на всю страницу. HTML5 даёт атрибут data- в свободное владение, поэтому предлагаю использовать расширяемое название xrate с целочисленными значениями (0-100) в зависимости от опасности (чем выше тем больше), которое упростит фильтрацию. ЭТО НЕ ВОЗРАСТ ЗРИТЕЛЯ. 

Для простоты - вы можете просто использовать общий параметр, скажем data-xrate="20", но лучше уточнить область:

data-xrate-lang  Ненормативная лексика
data-xrate-sex Романтические отношения, секс, порно
data-xrate-nude Степень обнажённости и эстетическая красота
data-xrate-disgust Может вызывать отвращение. Экскременты, насекомые, разложение.
data-xrate-violence Насилие и производное - оружие, раны, трупы, кровь
data-xrate-asocial Курение, алкоголь, наркотики, азартные игры, проституция
data-xrate-blink Присутсвует мигающая анимация, приводящая к эпилепсии 
data-xrate-spoiler Раскрывается сюжет
data-xrate-camera Если (flash/applet?) получают доступ к видеокамере
data-xrate-malware Если ресурс может привести к заражению компьютера вирусами, троянами и проч.

Насилие (xrate-violence)

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

<a href="http://meatvideo.com/" data-xrate-violence="100">жесть</a>
мультипликация и тп. открытые раны, драки кровавые раны, трупы
0-30 30-70  70-100
Jerryscousin1.jpeg Бокс Longfin pilot whales, Faroe Islands / GEORGIA MANNION The Passion of the Christ / Violence = 70

Секс (xrate-sex)

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

 Романтические отношения Эротика. Подчёркивается грудь, соски Порнография
0-30 30-70 70-100
romance-creative-family-beach-vacation.jpeg Nudity 30, sex 30 Nudity 50

Нагота (xrate-nude)

Одетые Частично обнажённое  Полностью обнажённое тело
0-30  30-70 70-100
forest_mystery_by_vvola-d4adnj9.jpeg   Nudity 50 Nudity 50   Nudity 80
<img src="http://www.tema.ru/jjj/tits/renuar.jpg" data-xrate-nude="60" data-xrate-sex="0" />

Антисоциальное поведение (xrate-asocial)

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

Kids smoking. Keystone/Epa Yuri Kadobnov Тайланд / fresher.ru Взлом банкомата Алкоголики

Мат (xrate-lang)


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

Хуй на Литейном мосту, акция арт-группы "Война". Cyanide

<blockquote data-xrate-lang="30">Когда на улице -50, а под рукой нет центрального водоснабжения в теплом помещении, жопу можно протереть салфетками типа "Я сама". И жопу, и хуй, и пизду, и что там у вас еще есть, о чем говорить не принято, но мыть надо.<cite>Артемий Лебедев</cite></blockquote> 

Спойлеры

Формат спойлеров разнится на разных сайтах - от обычных текстовых предупреждений, до картинок и скрываемых (и разъезжающихся при нажатии) блоков. data-xrate-spoiler отлично подходит для этого - вы можете сами привязать поведение в зависимости от этого аргумента.. например я сделал так..

Luke, I am your father

Обработка и анализ

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

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

Вот я на параграф с антисоциумом выше поставил data-xrate-asocial=30.. теперь по умолчанию я могу его спрятать, а потом простым jquery-запросом, найти и показать уже в зависимости от настроек пользователя, либо заменить предупреждением, картинкой, наконец связать с хитрым UI.

$('#show_sensitive').click(function(){   $.each($('p[data-xrate-asocial]'), function(i,v){     if($(v).data('xrate-asocial')>10 ) $(v).show();   }) });

Стилизовать довольно проблематично, если значения атрибута сильно различаются - есть только селектор сравнения по значению, поэтому имеет смысл устанавливать ступенчатые значения, например 30 и 70 - таким образом весь диапазон поделён на 3 части и css прост:

p[data-xrate-asocial='30']:before{ content: "Warning - stupid behaviour detected"; }

Общественный рейтинг

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

Понятно что это микроформат. Он не в состоянии полноценно описать нюансы той или иной опасности. Нельзя например сказать "на 30й секунде этого видео вас испугает внезапный крик и страшное лицо, наслаждайтесь". Нельзя сказать что эта статья была проверена независимыми аудиторами и "безопасна" для детей младше 10 лет. Нет и какой-то равноценной градации между разными сайтами. Вы может посчитаете ссылку на библию опасной в районе 10, а кому-то покажется все 100. Все эти умные выводы по прежнему оставляю монстрам типа Quatro. Надеюсь этого должно хватить

Страх цензуры

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

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

Мини-шпаргалка по Unix

С  юниксом я до некоторых пор был в достаточно прохладных отношениях - мы встречались довольно редко, каждый раз у него были новые дистрибутивы и формы. То в университете Солярис удивлял своим UI, то на хостинге каком-то надо покопаться через ssh. В какой-то момент я стал пристальней посматривать за его возможностями, удивляясь популярности. Наконец я поставил все основные дистрибутивы на виртуальные машины. Ленивый Slackware сопротивлялся больше всех. На этом казалось можно было бы и поставить точку в нашем романе. Но теперь я работаю на маке и приходится разбираться основательней. Основное преимущество *никсов это конечно консоль и гибкая обработка файлов и текста из неё.

Итак, есть много основанных на unix систем - Solaris, MacOSX, FreeBSD и в частности Linux, у которого основные дистрибутивы: Debian - Ubuntu, Fedora - Red Hat, Slackware - Suse, Gentoo, Mandriva

Debian 5 / Linux 2.6.26 Fedora 2.6.35 Slackware 2.6.33 Ubuntu 11.10 / Linux 3.0 Mandriva / Linux 2.6.38

Первое с чем столкнётся пользователь терминала это его интерфейс, hotkeys для быстрой работы
Tab Автодополнение пути (для папок и файлов) при навигации
Предыдущая комманда
CtrlC Убить исполняемую программу (Cancel)
CtrlZ Временно выйти из программы. Комманда fg восстанавливает работу.
Q Выход из некоторых программ (как например man - помощи)

Windows 8 screenshots

Microsoft выпустили версию Windows 8 developers preview, и наверняка многим будет лень самим пробовать насколько она ещё сырая, поэтому я поставил, попробовал и выкладываю скриншоты.. Как можно заметить вместе с обычным Windows-7 подобным интерфейсом где-то справа существует всегда по-детскому простой интерфейс Metro, который так же стоит в Windows phone. "Старый" рабочий стол, и такие же "старая" и новые контрольные панели доступны через тайлы.

Что не понравилось -  половина программ не работало (в основном игры, remote desktop, магазин). Красивых тайлов где было бы показано их удобство, тоже небыло. В некоторых местах скролл был как-то слишком близко к содержанию (см. первые скриншоты). Аватар был обрезан посередине а не сверху (без возможности выбрать). Как выйти из контрольной панели в metro-стиле пришлось гадать (Escape не работал, додумался нажать на windows-клавишу). Ну и конечно напрягает что ОС существует с двумя параллельными интерфейсами (а если ещё и учитывать возможность консоли то с тремя) и это добавляет некоторую сложность. Основанные на Javascript приложения меня тоже не сильно радуют, потому что это не совсем стабильный стандарт

Впрочем есть и позитив — Microsoft явно задумывается о пользовательском touch-интерфейсе и копирует андроидовские виджеты. Обещают поддержку ARM-архитектуры (и boot в 3 секунды), NFC. Наконец, что весь GUI ускоряется через GPU.

Установка виртуальной Mac OS 10.4 с VMWare

step_1_vmware.pngКак я уже писал, к тестированию веб-приложений надо подходить основательно и учитывание разнообразия платформ немаловажный фактор. Selenium Grid работает на разных ОС, но не всегда есть возможность под каждую ОС иметь отдельную тестовую машину. Выручают программы виртуализации - всевозможные Virtual PC, Parallels и в частности, VMware Workstation 7 (кстати покупка этой компании принесла кое-кому прибыль в 9 млрд).

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

  • Дистрибутив оси (iso, можно dmg переконвертировать с помощью PowerISO)
  • 17-мегабайтовый darwin_snow.iso файлик
  • VMware Workstation 7

Создаём новую виртуальную машину..

step_2_vmware.png step_3_vmware.png step_4_vmware.png

В настройках виртуальной машины добавляем поддержку USB-контроллера, память можно тоже поднять с 256 мб. Теперь редактируем сгенерированный vmx-файл настроек и что-бы не получать "Invalid front-side bus frequency 6600000 Hz" ошибки при загрузке заменяем там guestOS на "darwin10". В CD ставим файл-загрузчик и запускаем.

Leopard-2011-04-05-23-12-25.png Leopard-2011-04-05-23-18-08.png Leopard-2011-04-05-23-26-25.png

Загрузчик предлагает подгрузить двд, поскольку на виртуальном жёстком диске ничего нет, всё правильно. Жмём в статусной строке на CD-диск и меняем вставленный диск на дистрибутив. Жмём C что диск готов и практически сразу же F8 - теперь можно написать "-v" что-бы видеть консоль загрузки.

После загрузки графического интерфейса надо отформатировать виртуальный жёсткий диск. Без поддержки принтеров ОС займёт в районе 10 ГБ.

Leopard-2011-04-05-22-38-06.png Leopard-2011-04-05-23-34-24.png Leopard-2011-04-05-23-35-00.png

Теперь если надо увеличить размер экрана с 1024x768 на что-либо существенное, откройте в терминале или в TextEdit файл /Library/Preferences/SystemConfiguration/com.apple.Boot.plist и как админ перезапишите его с добавленными настройками (можно сохранить на рабочий стол а потом перетащить если нет прав)

<key>Graphics Mode</key>
<string>1280x1024x32</string>

Если у вас не найдена виртуальная Bridged интернет-связь, попробуйте добавить в vmx-файл ethernet0.virtualDev = "e1000"

Для включения звука - установите ниже прикреплённый драйвер. Если вы получаете "error 1021" при установке VMware Workstation на Windows 7 x64, то смените системный язык на английский.

Основы Android-приложения

google-andorid-toy-3.jpg Android - основанная на linux платформа для мобильных устройств использующая изменённую виртуальную машину Java построенную для учёта компактности файлов и энергоэффективности Dalvik. Из-за этого используется не Mobile Edition и тем более не Java SE, а свои библиотеки.

Приложения соответсвенно пишутся на Java, либо же через обходные пути — Titanium, AppInventor, Adobe AIR. Интересно что из библиотек есть SQLite и OpenGL - не прийдётся изобретать велосипеды. Кроме того в системе есть менеджеры для обмена данными между приложениями, сенсорами и тп.

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

Обучающий материал для андроида пишется в двух разных мирах — для игр и для приложений.

Я рассматриваю именно приложения.   Итак - скачиваем и устанавливаем JRE, JDK, SDK, Eclipse + plugin и открываем новый Android-проект. Я думаю до этого вы сами дойдёте. Типичное приложение может  состоять из 4 основных мега-блоков — Activity, Intent Receiver, Service, Content Provider которые описываются в AndroidManifest.xml, вместе с запрашиваемыми привилегиями.

Делаем страницу (Activity)

Страница делается просто наследованием Activity класса и использовании менеджера ресурсов указывающем на внешний вид

public class MyKillerActivity extends Activity { //моя убийственная страничка
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);        //использует шаблон main.xml через менеджер ресурсов
}}

Unity3d

Unity3D это игровой движок 3D-игр в основном стрелялок и аркад, но при большой сноровке можно реализовать и RPG, RTS, квесты, 2D-игры, встраиваемые в браузер, iPhone и с использованием сети. Движок понимает множество разные форматы файлов

  • 3д модели и анимация из Maya, Cinema 4D, 3ds Max, Cheetah3D, Modo, Lightwave, Blender. Форматы 3ds, fbx и dae
  • практически все растровые изображения для маск и текстур
  • звуковые mp3, wav форматы для эффектов и фона

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

IDE

Внешний вид Unity IDE

Графическая оболочка разработчика (IDE) состоит из 4 основных панелей

  1. Графическое поле, переключающееся / вид игры (Game & Scene)
  2. Иерархия объектов (Hierarchy)
  3. Инспектор объекта (Inspector)
  4. Библиотека доступных ресурсов (Assets)
По используемости самое важное место это Инспектор, потому что именно в нём видны внутренности объекта (GameObject).

Создание карты

Карта (Terrain) создаётся очень просто из меню и по умолчанию уже есть. Курсором как в фотошопе можно изменять высоту рельефа (в том числе используя Shift). Более продвинутые господа придумали как импортировать карты из реального мира с помощью google earth, openTDD, делая так называемые heightmaps. Встроенный импорт работает только с raw форматами, надо использовать хак. Недавно вышел генератор карт.

Игровой объект Unity

Игровой объект может состоять из скриптов-компонентов, некоторые из них встроенные, некоторые надо писать самому, тоесть:

Свои скрипты добавляются очень легко перетаскиванием в инспектор и публичные переменные сразу переводятся в названия с пробелами и значением по умолчанию. Для игрового объекта добавленные компоненты и с точки зрения ООП являются инкапсулированными объектами, хотя и играют в большинстве своём роль свойств (т.е. прилагательных - движущийся, крутящийся, выбираемый и тп.). По синтаксису скрипты пишутся на Javascript, C# или Boo скриптах со своими прибамбасами - глобальными объектами Unity, некоторыми своими ключевыми словами..

Drag-n-drop file upload

В продолжение статьи о новинках в html5, вот нашёл демо где уже работает загрузка файлов обычным перетаскиванием в браузер Firefox 3.6. Обычный drag-n-drop файлов пока в стабильных браузерах максимально что могут — создать события аналогичные перетаскиванию dom-элементов в определённые контейнеры.

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

event.dataTransfer.files event.dataTransfer.mozTypesAt(0) event.dataTransfer.files[0].getAsBinary()

А для отсылки файла используется обычный аяксный объект у которого появляется метод sendAsBinary(). Вобщем пока это выглядит как хак и видимо что надо больше внимания уделить спецификации html5, что-бы пользователь случайно не загрузил весь C:\Windows, что-бы можно было временно отложить загрузку или отфильтровать что конкретно надо загружать, или до какой глубины надо структуру подгружать и как обрабатывать.

Jquery dnd-upload

Написал два jquery-плагина - один для поддержки Firefox 3.6 (Namoroka) HTML5 загрузки, другой для поддержки Google gears. Можно использовать оба вместе..

Самый простой вариант для gears:

$('#drop_area').uploadg({gate:'http://somesite.com/upload_here_path/'});

Заметьте что ключ получаемого у сервера файла будет "file" (в пхп соответсвенно $_FILES['file']). А вот расширенный пример кода инициализации..

var dragndropConfig={ beforeLoad:function(){ this.gate=some_dynamic_file_upload_url+'?parentID='+SomeOtherDynamicObject.ID; if(SomeDisableReason){ this.can_proceed=false; } }, onProgress:function(event) { if (event.lengthComputable) { var percentage = Math.round((event.loaded * 100) / event.total); if (percentage &lt; 100) { $('#some_progress_div').html('Uploading file..'+percentage+'%'); } } }, onComplete:function(event,txt) { $('#some_progress_div').html('done'); } }; if (window.google && google.gears){ $('#drop_area').uploadg(dragndropConfig); } else{ $('#drop_area').upload5(dragndropConfig); }

Осторожно, Google gears всё ещё имеют баги связанные с такой загрузкой.

Silverlight, JavaFX и Flex

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

Сертификаты для HTTPS (SSL)

Небольшая заметка про SSL-сертификаты. Кто не знает - это такие удостоверения о том что сайт действительно тот кого вы ожидаете увидеть. Тут размывчивое немного понятие, но главная цель - безопасность от фишинга. Выдаются сертификаты за приличные деньги (100 - 400 $) от разных компаний, среди которых Verisign одна из самых известных.

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

См. по теме

Хостинги Эстонии

Набрёл на интересную табличку эстонских хостингов при поиске каких-то данных о поддержке InnoDB и ценах в общем, думаю может быть многим полезна даже за границей. Впрочем слухи ходят что облачное вычисление типа Amazon elastic compute cloud или Aptana cloud или Mosso - будущее хостинга, где приложение дублируется в разных data-центрах что-бы приблизить к получателю, а гибкая масштабируемость позволяет избежать slashdot-эффекта.

Название Доля рынка Число доменов
NETPOINT.EE 26.3017 % 3,445
ZONE.EE 14.5976 % 1,912
DATANET.EE 8.8792 % 1,163
ESTHOST.COM 7.1614 % 938
ELKDATA.EE 4.0159 % 526
VIRTUAAL.COM 3.3669 % 441
ELION.EE 1.7865 % 234
MYBANS.COM 1.7255 % 226
COMPIC.EE 1.3819 % 181
UNINET.EE 1.0536 % 138
ALFANET.EE 0.9238 % 121
STARLINE.EE 0.8856 % 116
NSS.EE 0.878 % 115
INFINIT.EE 0.8627 % 113
CLIHOST.NET 0.7787 %

102

NBNPEXTREME.COM 0.7329 % 96
EUNET.EE 0.7024 % 92
EXPOKEY.COM 0.6413 % 84
KODULEHT.NET 0.5955 % 78
BEESERVER.NET 0.5879 % 77
DATA.EE 0.5268 % 69
EML.EE 0.5192 % 68
DESIGNERSLAB.NET 0.5039 % 66
RPTHOSTING.COM 0.4657 % 61
BALTHOST.EE 0.4352 % 57
HOSTOP.COM 0.4352 % 57