Permalink
Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
1729 lines (943 sloc) 86.5 KB
sociopathy:
RestKit
https://github.com/AFNetworking/AFNetworking/
Custom UI
сохранять мб что-нибудь в SQLite
многопоточность
в архиве - шрифт warnock pro
math jax:
<script type="text/x-mathjax-config">
// <![CDATA[
MathJax.Hub.Config({
TeX: {extensions: ["AMSmath.js", "AMSsymbols.js"]},
extensions: ["tex2jax.js"],
jax: ["input/TeX", "output/HTML-CSS"],
showProcessingMessages : false,
messageStyle : "none" ,
showMathMenu: false ,
tex2jax: {
processEnvironments: true,
inlineMath: [ ['$','$'], ["\(","\)"] ],
displayMath: [ ['$$','$$'], ["\[","\]"] ],
preview : "none",
processEscapes: true
},
"HTML-CSS": { linebreaks: { automatic:true, width: "latex-container"} }
});
// ]]>
</script>
<script type="text/javascript" src="https://c328740.ssl.cf1.rackcdn.com/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"></script>
on scroll:
throttle, 250 ms
переписать on scroll без jquery
кешировать аватары, фотки:
http://habrahabr.ru/post/179349/
- (BOOL) application:(UIApplication*) application didFinishLaunchingWithOptions: (NSDictionary*) launchOptions
{
NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity: 4 * 1024 * 1024
diskCapacity: 20 * 1024 * 1024
diskPath:nil];
[NSURLCache setSharedURLCache:URLCache];
}
- (NSCachedURLResponse*) connection: (NSURLConnection*) connection
willCacheResponse: (NSCachedURLResponse*) cachedResponse
{
protocol = http, https
url starts with "site.com"
if location ~ ^/(compressed|international|javascripts|plugins|звуки|картинки|начертания|облик|страницы|загруженное)/ {
return cachedResponse;
return nil;
}
@interface LoginViewController : UIViewController {
UIImageView* logoView;
}
// self.imageView.contentMode = UIViewContentModeScaleAspectFit
// add placeholder image
UIImage *placeholderImage = [UIImage imageNamed:@"placeholder.png"];
cell.imageView.image = placeholderImage;
- (void)viewDidLoad {
[super viewDidLoad];
// Create Circle View
UIImageView logo =
// Create Circle Layer
CircleLayer *circle_layer = [[CircleLayer alloc] init];
circle_layer.needsDisplayOnBoundsChange = YES;
circle_layer.frame = circle_view.bounds;
[circle_view.layer addSublayer:circle_layer];
// Enable Auto Layout
[circle_view setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:circle_view];
// Center Vertically
NSLayoutConstraint *centerYConstraint =
[NSLayoutConstraint constraintWithItem:circle_view
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeCenterY
multiplier:1.0
constant:0.0];
[self.view addConstraint:centerYConstraint];
// Center Horizontally
NSLayoutConstraint *centerXConstraint =
[NSLayoutConstraint constraintWithItem:circle_view
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:0.0];
[self.view addConstraint:centerXConstraint];
}
в landscape - прятать лого
проследить, чтобы на показ клавиатуры отвечало адекватно в обоих случаях
https://github.com/rs/SDWebImage
#import <SDWebImage/UIImageView+WebCache.h>
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *MyIdentifier = @"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:MyIdentifier] autorelease];
}
// Here we use the new provided setImageWithURL: method to load the web image
[cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
cell.textLabel.text = @"My Text";
return cell;
}
четыре таба: болталка, беседы, обсуждения, архив
в болталке:
table view, в нём - web view
раньше - потянуть и отпустить (загрузчик)
ниже - endless scroll
правка - двойной тап, отменить правку - потрясти акселерометром, сохранить правку - нажать на кнопку "сохранить" в правом верхнем углу
в архиве:
navigation controller, в нём - collection view, и две секции:
список разделов - список, иконки генерить обычные и для ретины
список заметок - просто список
заметка - web view
в беседах и обсуждениях:
navigation controller, в нём - table view
список названий, и аватары пользователей, и время последнего сообщения - table view
при долгом нажатии на беседу - контекстное меню "выйти из беседы"
вычленить стиль мобильных в один закомпрешенный файл
ios uiwebview contenteditable:
http://stackoverflow.com/questions/9835956/show-keyboard-in-contenteditable-uiwebview-programmatically
убрать conditional'ы
скриншотить предыдущую страницу перед выводом следующей (чтобы не было мигания при смене страниц)
document.body.addEventListener("paste", function(e)
{
var text = event.clipboardData.getData("text/plain")
})
сделать автоматическую загрузку скопированного изображения (скриншота)
http://habrahabr.ru/company/cackle/blog/201190/
прочитанность сообщений:
сразу после отправки, приходит как "непрочитанное".
после появления сообщения на экране, перепроверяется статус прочитанности по эфиру.
при получении сообщений по web api, они приходят также со статусом прочитанности.
статус прочитанности - только у своих сообщений.
при прочтении - через эфир всем отправляется статус прочитанности.
при новом сообщении таком - прочитано: no
при добавлении в беседу третьего, или при удалении второго - удалять это поле из базы
сеть должна иметь возможность разворачиваться в качестве реплики к уже существующей (скриптом).
для этого достаточно будет адреса сервака, имени и пароля системного пользователя.
запасной выступает в качестве read-only реплики.
когда основной сервер ложится более чем на 5 минут - можно переключаться на запасной.
при этом в "новостях" видно соответствующее оповещение.
при переключении обратно - показывать всем сообщение, переводить базы в режим чтения, и синхронизовать базы данных.
черновик сообщения (статьи и т.п.) удаляется только после того, как сообщение (статья и т.п.) будет записано в базу.
вроде бы не удаляется пустая цитата в конце заметки
в настройках, если переходить на другую страницу - сначала убираются значения настроек
структуру папок переделать:
(везде _id)
архив
пользователи -> картинки, альбомы
временное
в болталке не показывается полоска внизу, типа скроллинг по сообщениям
UX, Usability
java
javascript
скрипты (мб игровые)
var RedisStore = require('socket.io/lib/stores/redis')
, redis = require('socket.io/node_modules/redis')
, pub = redis.createClient()
, sub = redis.createClient()
, client = redis.createClient();
io.set('store', new RedisStore({
redisPub : pub
, redisSub : sub
, redisClient : client
}));
Здравствуйте.
Не имею аккаунта в AppStore; если вам понадобятся примеры написанного кода, то можете посмотреть здесь:
https://github.com/kuchumovn/wheely-ios-test
https://github.com/kuchumovn/sociopathy.ios
AFNetworking
ARC, GCD, blocks, push уведомления, keychains, JSON/XML, сокеты, SSL
хорошее знание Си, умение работать с сишными библиотеками в obj-c проекта
опыт разработки от 2х лет
знание sqlite, понимание ее особенностей и принципиальных отличий от mysql
умение работать с большими объемами данных, оптимизация процессов синхронизации информации
знание IMAP/SMTP, понимание SOAP, работа с Exchange сервером через EWS
понимание SIP, работы с высоко нагруженными сервисами обнаружения и присутствия
хорошее понимание модели и принципов взаимодействия клиент-сервер
многопоточное программирование в iOS, работа с очередями (в том числе отложенные очереди с кэшированием)
общее понимание о защите информации и алгоритмов хэширования и шифрования в iOS
есть собственные приложения в AppStore
есть приложения, сделанные за заказ
технический английский для чтения документации
перенести всё из whenServerResponds в serverResponds
Core Animation
Core Location
MapKit
создавать индикатор программно
убрать отступы
animateWithDuration layoutIfNeeded для текста
активатор
офис
xcom
korra
iOS 5: storyboards
iOS 6: collection views, state preservation, auto layout
iOS 7: NSURLSession, TextKit, Multitasking, UIKit Dynamics, Custom View Controller Transitions, JavaScriptCore, MapKit (3d, tint), Core Location
http://www.objc.io/issue-5/getting-to-know-textkit.html
quartz ios tutorial
core animation tutorial
Core Data tutorial
gcd
ios version differences developer
breakpoints (back from exception)
memory leaks
// изначально в архиве иконка папки появляется, пока картинка не подгрузилась - делать пустоту
user session security:
http://habrahabr.ru/company/dsec/blog/209042/
// если в абзаце одна картинка - убирать отступ сверху
// если развернуть видео на полную, потом повернуть, потом закрыть видео - ячейки белые
соединиться по вебсокету и проверить получение новых сообщений (или ещё чего)
для чата сделать "потянуть и отпустить" для подгрузки предыдущих сообщений
шрифты в разметке стилями не подгружать, а использовать системные
сделать прочитывание сообщений
кешировать содержимое сообщения в webview (мб картинкой), чтобы при получении ячейки не перезагружать каждый раз html в web view
если картинкой, то перерисовывать её при повороте экрана
// переделать на нормальную давность типа: минутой ранее, часом ранее и т.п.
// instancetype
// если грузит чат, и ошибка, то когда в следующий раз заходит на вкладку - не перезагружает
// тюнинг под размеры осуществлять на стороне айфона, потому что может меняться ориентация
// при нажатии на аватар - показывать имя пользователя
// при повторном нажатии, или при двойном нажатии сразу - идти на профиль
// при нажатии на дату - показывать полную дату
видео ютуба в чате делать ещё меньше
показывать чат только после того, как все web view догрузятся и отрендерятся
// если ошибка при получении раздела или заметки - переводить на предыдущий экран в navigation controller'е (unwind segue)
проверить, что кешируются стилевые файлы (шрифты, и прочее)
кешировать иконки разделов
загружать данные архива каждый раз, когда переход на вкладку, а не во view did load
// в чате сообщение чтобы всплывало анимированно
в чате наверху - потянуть и отпустить, чтобы подгрузить более ранние
кешировать аватарки в чате
из чата можно зайти в профиль пользователя
запустить на своём айпеде
// на айфоне в лендскейпе не видно поля пароля - закрыто клавиатурой
// на айпеде тоже пофиксить, чтобы опустить поля эти пониже
// запоминать имя и пароль и перелогиниваться при входе
// сделать логаут: вверху, в navigation controller'е, справа показывать аватарку, и там, при нажатии, менюшку "выйти", после чего переводить на экран логина
у img в маркапе максимальный размер сделать не width и height (потому что при правке они слетят), а как-то по-другому, мб через max-width и max-height
// делать аватары (и картинки в читальне) двойного размера для ретины
// у иконки папки для раздела без картинки - мазня
/// сеть должна устанавливаться (простой exe'шник) на компах любых желающих,
/// разворачиваться по ключу, который можно получить в консоли, и который действует только один раз,
/// и работать как read-only бекап.
/// если основной сервак недоступен, то запросы будут отправляться на эти запасные ip-шники.
/// все сообщения должны шифроваться, но даже так будет вероятность того, что из прочих данных можно будет что-то извлечь
убирать рамку поля, когда введён какой-нибудь текст (или когда свойство текст не nil и не "")
показывать рамку поля, когда текст очищен
центровать не поле логина, а место между двумя полями
img {
max-width: 100%;
height: auto;
}
убрать page.preload (закомментировать кое-где мб)
оформить навигацию в отдельный фреймворк и залить на гитхаб: navigation, history, ajaxify internal, scroll_to (запоминание скроллинга)
фреймворк должен быть ненавязывающим: пути к стилям и яваскриптам можно делать любыми
пути могут быть как файлами, так и своим кастомным классом-геттером (в качестве примера, мой оптимайзер сделать)
на страницах общений (беседы, обсуждения) и новостей, если на первой странице — автоматически обновлять при изменениях
для новостей: добавление и правка
для общений: создание, переименование, добавление (в беседу), вывод (из беседы), новое сообщение
при unwatch'е элемента нужно unbind'ить всех его слушателей типа 'appears_on_bottom
если выделить первую часть готового текста, сделать её ссылкой, потом нажать пробел - появится пробел, но при сохранении - исчезнет
заголовок_2 -> подзаголовок
вычленить decorate в отдельный decorator
simplify - оформить как decorator
сообщение.simplified - также вычислять на сервере, а не передавать с клиента
перенести генерацию html'я заметок и сообщений на Scala
в болталке мотать в конец, если последнее сообщение - последнее прочитанное > 100, например
при правом клике на сообщении - пункт "Ответить в личной беседе" (чтобы не оффтопили в теме)
когда загружаешь сообщения, и их больше, чем total - запросить новый total.
если отошёл - то сохранять это на сервере, чтобы когда другой зашёл - в who is online выдалось бы сразу, что отошёл
после внесения правок - обновлять сообщения заново перепаршенными
внедрить контексты, сделать страницу контекстом
начинать подгружать новое не когда уже в конце, а когда близко к концу
(таким образом, не нужен скролл детектор - просто вешать на третье снизу сообщение, или на любое (потом снимать))
нажал на Раньше - загружать раньше, а потом на первое сообщение вешать загрузку автоматически на bottom appears on top (и убирать после загрузки)
проверить это с ресетом при переходе на страницу
новый человек - сразу мотать болталку в конец
проверить: отправлять "сообщения" самому себе тоже, но не именно этому соединению (в broadcast настройку)
сделать math jax нормально (статически кешируемо)
после этого раскомментировать: //warning(text('math.temporarily unavailable'))
math jax:
https://github.com/mathjax/MathJax/issues/513
если копится пять минут неактивности - убирать из списка "здесь"
когда появляется активность - ставить "на сайте", и добавлять в список "здесь"
когда loader отправляет запрос, должен отправлять total и before тоже, и если полученные результаты + before > total - возвращать также новый total.
(при засечении total'а в ответе - обновлять его и ползунок)
текст в уведомлении-попапе всё-равно в две строки
сделать консоль
в ней можно будет менять пароль, менять id, и прочее
показывать консоль по F4
добавить клавишу консоли в настройки
не хранить пароль в чистом виде
// внедрить TextSecure
// http://habrahabr.ru/post/206724/
если напечатал что-то в сообщении, и случайно перешёл на другую страницу, то потом при заходе - показывать писарь и восстанавливать в нём это сообщение
не показывать "загружаем ..." и "догружаем ..." сразу, а при долгой загрузке (скажем, только если дольше секунды)
сделать также подгрузку сообщений (и переход по страницам) в either_way без fading'а
при просмотре фоток и видео - мб показывать прогресс-бар (мб внизу) кружками (как модно)
// возможность комментировать разделы и заметки древовидно
если жмёшь делит в "hint" - убирать его сразу (Проверить на пустом только что созданном предыдущем параграфе)
чтобы писарь убирался, когда появляется листалка
если выделить части двух абзацев и нажать букву, то она вставится в конце
кусочек кода не вставляет (и из готового тоже)
упразднить кусочек кода и много кода - выбирать самостоятельно в зависимости от кол-ва строк
enter в кусочке кода - новый абзац
при undo и redo появляются троеточия
если общение без уведомлений - только тогда делать вручную значок и пук
жирный нежирным по клику и по выделению
курсив некурсивом
в чате - уведомление с попапом, и ещё это:
Inter_tab_communication.on('убрать_уведомление', function(data)
{
if (data.what === 'Discussion')
убрать_уведомления_о_сообщениях(data.общение, data.сообщение)
})
// можно проставлять в сообщениях "пишет" и "сообщение" timestamp, чтобы если старое "пишет" пришло после нового "сообщение", то не появлялось бы "... пишет"
/// отклонено, т.к. такое половинчатое решение смутит пользователей:
///
/// если текущая страница - беседы, то при получении "новых сообщений" выдвигать эти беседы наверх и раскрашивать
/// проверить, что это работает с новыми созданными беседами
// возможность комментировать разделы и заметки
//// в interactive messages: подгружать сами сообщения по http и соединение по websocket - параллельно (пока так вроде бы не сделать, т.к. для websocket'а требуется _id, а его получаем из http запроса)
// письмо с уведомлением о сообщении делать в виде html, чтобы была прямо аватарка, сообщение и все дела
// в письме вставлять ссылку на беседу
// ctrl + колесо вверх - увеличивает масштаб фотки (макс 100%), оставляя точку указателя на месте (расширяя от неё)
// ctrl + колесо вниз - уменьшает (мин, когда влезает полностью)
// при отмене правок - говорить (подсказкой, с возможностью "больше не показывать"), что черновик был выброшен в вашу личную мусорку (пока можно только в заметке)
// при восстановлении черновика из личной мусорки - загружать страницу и применять правки (черновик сам не удалять, пока не будет сохранено)
добавить локи на всё: везде, где есть генерация id (там нужно на создание ставить лок)
при смене почты - лочить изменения на почту
при правке сообщений - полноценный редактор (панель взять из читальни)
сделать lock на переименование/перемещение/добавление - всё вместе как "изменение"
переименование и перемещение - старый путь удаляется
если не найдено по paths, искать пошагово, и при нахождении - перенаправлять на нужный путь
для этого писать историю переименований, но не для путей, а для имён
в истории: _id, раздел, старое название
при клике с контролом на баббл сообщения от пользователя - 5 минут не показывать бабблы и не пукать при сообщениях от этого пользователя
при ответе - забан снимается
(описать это в доках)
сделать две мусорки - общую и личную
при доступе к личной - проверять, что пользователь - тот самый
переименовывать обсуждения и беседы можно прямо из просмотра списка
сделать collection "transactions"
создавать папки при первом запуске (initialize) (в зависимости от языка + в коде писать их через перевод):
загруженное/книги
загруженное/читальня/разделы
загруженное/временное
загруженное/люди
в gitignore папку загруженное
проверить, что скрипт вставки в nginx.conf проверяет, не вставлено ли уже
новости можно комментировать
в ленте проверить, что правки пушатся
для всех сообщений и новостей сделать "подписку на правки".
она включается каждый раз перед загрузкой данных с сервера, и применяются накопленные правки по завершению этой загрузки
сделать в профиле "личную ленту", в которую можно писать на странице "ленты" (и ссылка на которую будет из профиля), и это будет в "ленте" в новостях
статусы "онлайн" и "оффлайн" чтобы пушились, и на любой пуш можно подписаться до загрузки, и проверить после.
в профиле - перепроверяет пусть раз в минуту.
в сообщениях сделать прогресс: для тех, кто участвует - прогресс от последнего прочитанного до последнего, для тех, кто не участвует - от начала до конца
в сообщениях сделать действие "Перейти к последнему сообщению"
проверить, чтобы прогресс всегда был в рамках от 0 до 100
когда печатаешь после высокой картинки - скроллит вниз
картинка кривовато вставляется в пустой абзац, потому что indent применяется только к первой строке
поэтому при вставке в абзац нужно его триммить
а также при парсинге в вики
сделать действия "перейти в конец" и "перейти в начало", а для новых вообще - показывать последние сообщения
// в списке людей сделать "активность", и сортировать людей по ней (активность: кол-во сообщений, правок, создания контента, и т.п.)
// сделать умную вставку аудио по url (чтобы при засечении ссылки на аудио сразу становилась плеером)
// в писаре автоматически первую букву делать заглавной
// сделать рисунок клавиатуры с назначением кнопок
если выровнять картинку по середине, и попробовать добавить после неё текст, то новый абзац будет выровнен по середине
кусочек кода вставляется как-то отдельно (как из выделения, так и просто)
из кусочка кода не работает enter
кусочек кода должно быть нельзя вставить не непосредственно в абзаце
если сделать subscript сразу после ещё одного subscript-а, то кидает в новый абазац
не делает много кода из выделения
разрывный пробел на новый абзац не должен ставить пробел (например, из "много кода")
не ставить кавычки-ёлки внутри code и pre
список людей сортировать как по дате активности, так и по недавнести прописки
в хлебных крошках к статье путь - ненастоящий
отражать в новостях факт написания заметки
каменты к статьям
вставка картинки с диска drag'n'drop'ом (в то место, где курсор)
ввести действия "подписаться и отписаться" (как в акшенс, так и в контекстном меню)
если у человека есть непрочтённые здесь сообщения, и нет активности спустя полминуты - статус away
потом, по появлении активности - снимать away
socket.io: redis store
https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO
если в чате добавили сообщение сразу после твоего - уведомление в окне (иконка) и пук
если не нажал "Раньше" - все сообщения считаются начиная с "последнего прочитанного"
иначе - все сообщения будут в изначальном смысле слова
проверить прогресс бар в людях
+ что грузит норм не с первой страницы
+ номер страницы в сообщениях
###
man =
{
"имя": "Тест",
"откуда": "123",
"пол": "мужской",
"приглашение": "",
"язык": "ru",
"_id": "518d470ecf175e9c18000005",
"id": "Тест",
"когда был здесь": new Date()
}
люди = []
люди.add(man)
люди.add(man)
люди.add(man)
люди.add(man)
люди.add(man)
люди.add(man)
люди.add(man)
люди.add(man)
люди.add(man)
люди.add(man)
люди.add(man)
ответ = { "люди": люди, "всего": 100, "есть ещё?": yes }
###
иногда, при вводе текста статьи, есть дрожание прокрутки - туда-сюда
при нажатии на отмену отправлять черновик в личную корзину
в чате, если иконка загорелась, и я прочёл - убирать её в других вкладках (например, на работе в открытом тоже чате) через серверные сообщения
// после фокусаута по ссылке из сообщения другого человека - съедается первый символ (это глюк хрома)
npm install nodemailer
npm install mootools --save
// когда отправляешь сообщение - сразу его добавлять в список, чтобы не отправляли его второй раз
// перевести весь validation.js, throw'ы
// сделать отключаемость уведомлений на email
// иконка новых сообщений в хроме зависает
// сделать так, чтобы гугл индексировал
// у всплывающего окошка online status делать position: absolute, иначе перекрывается соседним
//
// временный fix:
//
// #id_cards li:nth-child(odd)
// {
// position: relative;
// z-index: 1;
// }
// жесты: удерживать правую кнопку при клике левой, удерживать левую кнопку при клике правой, левая кнопка и колесо, правая кнопка и колесо
// сохранять картинки по контрол-клику
// сделать статусы и микроблог
// доставку писем перенести в отдельное приложение на scala
// возможность комментировать разделы и заметки (древовидно)
// firefox: в выдержке вставка не работает
// в правке выдержки, при tab'е на тексте - переходить к автору
// из текста выдержки переходить по tab'у к автору
// сделать плавную загрузку аватаров поверх совы
// если зареган - на главной выводить, что-нибудь информативное
// базу данных сохраняет не в папку database (порт занят, не запускается, использует системную)
// удаление разделов и заметок - не только выбрасыванием, но и через контекстное меню
// если делаешь выделенное степенью - вставляет после степени пробел
// звуки - перевести на web api (фух, пук)
// писать лог node.js в файл
// forever -l forever.log -o node.js.log -e node.js.errors.log
// если сайт обновляется, то вместо "нет связи с сервером" выводить страницу "ведутся технические работы"
// сливать автоматически с сервера бекапы конфига и бд
// github.com/doofdoofsf/purgeFiles
// бекапить базу и картинки
// backup to google drive
// http://tech.rgou.net/en/linux-2/backup-script-on-google-drive-for-linux/?utm_source=rss&utm_medium=rss&utm_campaign=backup-script-on-google-drive-for-linux
// определять просто текст, и затем его можно: жирнить, курсивить, нежирнить, некурсивить
// просто текст - может содержать только <b> и <i> первого порядка
// в книгах не показывать контекстное меню гостю
// автоматически скроллить вниз при печатании
// в фаерфоксе тени чуть темнее
// замерить, что ест время при переключении страниц
// less.js, перевод сайта, переводы плагинов - запихать в everything, скины кнопок - склеить
// при вставке видео ссылкой (а также с помощью окошка) - проверять, существует ли такое видео (с помощью api)
// у каждого пользователя делать раздел "навыки", "оборудование"
// совать в everything скрипты и стили только выбранных плагинов
// сделать бесшовный музон, как вконтакте
// при навигации иконка загорается не сразу
// сделать имя пользователя case insensitive (проверка при входе, проверка при создании, при изменении)
// перевести снасти писаря
// сделать автозапуск сайта после перезагрузки сервера
////// правка читальни по образу проводника в винде
//состояние (не режим) "не беспокоить" (alt + shift + 0) - без звуков, без попапов о новых сообщениях (ставится на все вкладки)
//при переходе в этот режим не мигать иконкой (просто оставить её красной), при выходе из этого режима - снова мигать
//// при загрузке статики плагинов - подставлять версию плагина, а не версию приложения
//// пользователь может сам себе отключать лишние плагины
//// можно было бы сжимать в один файл все скрипты, стили и картинки,
//// но этим должны заниматься браузеры (за одно TCPшное соединение), а не сайты
// загрузку картинок в писаре с диска
// в bubble сделать "подробнее"
// свой math jax, потому что он может упасть, и не прочитаешь сообщения
// проставлять новую страницу (в either way) не когда выезжает следующее, а когда следующее выезжает за половину экрана
// uncomment '/ошибка'
// Наведя на любой участок текста, вы сможете (в будущем) увидеть, кто и когда его написал.
// Вы сможете (в будущем) подписаться на правки заметок, и узнавать о них в вашей <a href="/сеть/новости">новостной ленте</a>.
личные проекты - там, помог бедным или сиротам, построил то-то, посадил то-то
как законченные (с фотками), так и намеченные
возможны общие проекты
называться будут "дела"
в читальне если набрать что-нибудь в поиске, вылезут варианты совпаюащих разделов и заметок
плагинная система, то есть каждый участник может написать свой plugin
"статусы", места, маршруты путешествий
при совместном разговоре можно отпочковывать "1 на 1" (типа на ухо), втроём и т.п.
есть "статусы" (уехал туда-то до такого-то), "объявления" (продам, отдам, куплю, помогу), события (акции, конференции, встречи): кто участвовал.
есть частные фотоальбомы - видно лишь явно прописанным группам и близости уровня такого-то или выше, а есть всеобщий альбом - связность отметками (например, встречи, люди и т.п.)
отношения с людьми можно разделять на подгруппы.
есть слабые связи, и есть тесные связи (шкала), а есть вообще "одноразовые" связи (не имеют "привелегий" в области видимости).
видео - то же самое.
сообщения имеют пометку о срочности: неважное, обычное, важное
википедия (+ новости), где можно оценивать каждую статью, и на основе этого - находить близких по увлечениям (потом: возможно вам понравится то-то, новости)
возможность создавать "кланы" (как в mmorpg) с особыми "разделами" кланов, доступа в которые другие могут не иметь
оценка настроения от 0 до 5, но без цифр - цветом мб, или погодой даже (0 - конец света, суицидальное, полная апатия, 1 - депрессия, лёгкая апатия, 2 - без чувств, устал, 3 - нормально, как обычно, жить можно, 4 - хорошо, приятно, одухотворённо, умиротворение, 5 - отлично (перевозбуждённость))
постоянно можно менять.
потом строить график смены.
по графику - находить близких людей. мб определять психотип.
можно отмечаться на карте и находить близких по месту
можно гулять и отмечать GPS путь.
соответственно, можно смотреть интерактивную карту, во сколько кто где ходил или ходит (постепенно, во времени).
можно общаться как 1 на 1, так и втроём и т.д.
при этом слышимость голоса: непрозрачность шрифта (если далеко - не слышно), соответственно, следует вставать в место в комнате, и разговаривать
всё общение - на одной временной шкале
обсуждения можно делать стенографными
можно отпочковывать высказыванием новое обсуждение, и связывать его с неким ранешным
фотоальбом, видеоальбом, отмечать друзей, дату и время, место на карте, связывать с другими фотографиями, темами разговоров, видеосъёмками и заметками (поставив "силу связи" ("имеющесть отношения") от 1 до 5)
можно знакомиться - состояние (ищет ли полового партнёра, ищет ли друзей, ищет ли просто знакомых, ищет ли совместного времяпровождения)
можно scrobbl-ить музыку
можно бросить "offtop" - не будет стенографироваться
спроецировать людей отрезками на шкалу психического состояния, и на основе этого подбирать "друзей"
общественная сеть знаний:
различные заметки, можно оценивать только по прочтении: понятность, занятность
таким образом можно найти людей, увлекающихся схожими областями знаний
заметки разнесены по карте знаний
психологические изпытания можно проходить - составлять личный профиль (интроверт, экстраверт)
вычислять склонности к психическим болезням, давать советы по адекватному поведению каждый день ("сегодня вам стоит успокоиться")
искусственный интеллект (для каждого свой экземпляр) обучается и предсказывает настроение
человеку не нужно иметь заполненные поля: о себе, увлечения и т.п. - это нужно собирать косвенно
медленный фокус на полях и ссылках
подсветка фокуса - плавная
подсветка ссылок - плавная
// визуальный tex-редактор
// на картинках сделать крутилку (background: white url(images/loading.gif) no-repeat center center)
Читальня:
Музыка
Дизайн
Фотография
Видеосъёмка
Живопись
Экономика
Военное дело
География
Философия
Религия
Химия (Биохимия, Органика, Неорганика)
Биология (Генетика, Молекуряная биология, Биофизика)
Медицина
Археология
Информатика
Физика (Астрономия, Геофизика, ...)
Математика (Теория чисел, Мат. анализ, Лин.алг., Теория множеств, Рег.выр.)
сделать раздел "мои черновики"
при заходе на страницу просто, если есть черновик, выдавать вверху предупреждение: "вы видите перед собой черновик", и показывать черновик
сделать контроль версий и merge
если конфликт - выдавать пользователю ошибку, и не сохранять, пока не устранятся конфликты.
сохранять историю изменений (изменение, удаление, создание) за три дня (от вандалов).
каждое слово оборачивать тегом: <span author="id того, кто написал его или поправил">...</span>
в заметках: режим истории (кто какие строки написал (разделение по цвету), и когда (разделение))
можно управлять размером шрифта в заметках в настройках.
меняя размер текста - менять и межстрочное разстояние.
и вообще, можно вставлять последним свой личный кусок стиля css.
wiki (статьи: гистограмма авторов по процентам, diff, нравится от 0 до 5)
гистограмма настроения (от 0 до 5)
беседа: можно пригласить третьего, отображать не сплошным текстом, а комиксом, а под ним - log
статьи - по категориям (id, name, version, latest order change time), с историей изменения порядков (переименования - не критичны)
вам возможно понравятся заметки: по категориям. вычисляются по планировщику, через map reduce мб. по алгоритму схожести интересов.
memcache
два вида поиска записей:
1) иерархический
2) по индексу (начать печатать)
3) смысловой (поиск по содержимому, теги, показать самые новые, недавно правленные)
возможность вывода заметки на печать (и вообще, экспорта в PDF, возможно)
беседы могут вестись: только в кругу приглашённых, только в определённых группах "друзей", только в кругу знакомых знакомых, всеобщие (присоединиться и высказать своё мнение может каждый)
(можно создать беседу для всех друзей с коэффициентом > x)
можно создавать союзы (это будут отдельные read-only группы друзей)
// у заметки и раздела выводить реальный путь
// в заметке, вместо tools - график изменения статьи, диаграмма участия пользователей
// при вставке элемента (нажатии на tools) - плавная прокрутка к этому элементу, если он не виден
// хоткей перехода к курсору (если прокрутил куда-нибудь вверх или вниз)
// каждую страницу (+ помощь, ...) можно править (с версионностью, как у статей)
//очищать значения в полях ввода от подставляемых
// undo и redo на заголовке
// обновлять пользователя в сессии при его изменении (какой-нибудь trigger поставить на save)
// сбрасывать страницу пользователя в мемкеше, при обновлении пользователя
// при смене address_name у раздела читальни - переименовывать и картинку
// при смене address_name у раздела читальни - обновлять путь к ней и пути у всех дочерних разделов и заметок
// при смене address_name у статьи - обновлять путь к ней
// при смене address_name у пользователя - переименовывать и картинку
// если не найдена статья - писать, что раньше она была там-то и "поищите по названию такому-то"
// категория не может называться "[обложка]"
// в супервайзоре: если сервер заваливается - слать email с куском лога
// кешировать мемкешем страницы (и аяксовые данные), и отдавать непосредственно нжинексом
// оповещать о статусе online человека по websocket (когда смотрят профиль или в поиске людей)
// на странице людей убирать лишних сверху при листании вниз (скажем, если больше ста уже есть). вместо них вставлять (и ещё ХХ новых). при этом прокрутку скроллить.
// сделать детектор подбора пароля: пять раз неправильно, и блок.
// хром не поддерживает отлов ctrl c / ctrl v
// на server side: преобразовать дефисы в тире, точки в троеточия, и кавычки - в ёлочки.
// на server side: убирать пустые теги <p></p> и прочие
// ссылку можно ставить только на текст внутри p и на заголовок
// у сессии сделать флаг "модифаед" через "сет дейта"
// возможность настройки горячих клавиш для режимов (и прочего)
// в чате сделать "стёр"
//на фотках - премодерация
//на аватарах - модерация
// у кнопки сделать только один frame в данный момент, а не поверх
// в блоге сделать cut'ы
// в болталке править сообщения - в правке
// добавлять - в действиях
// сделать "ответить" в чате: вставлять цитату вида: пользователь, время, содержимое (мб на сероватом фоне)
// кнопка html -> source
// иконки вверху вдавленные
// панель мб с текстурой
// скрипт, очищающий папку /загруженное/временное от старых файлов (больше недели)
// у окошка можно: box shadow: 0px 5px 80px #505050
// если будут уведомления белым текстом на чёрном фоне, то текст делать болдом, делать ему чёрную тень, а сам фон - серым, и фону чёрную границу в один пиксель
// переделать прописку без кнопок и на своей странице
// удаление - жест мышью
// при прокрутке людей делать одновременное продвижение progress bar'а (для каждого человека)
// для читальни - выделение (мышь, клава с ктрл и c шифтом) и перемещение разделов и заметок
// тащишь, наводишь на раздел сверху, ждёшь - он открывается.
// дальше можно тащить на раздел иконистый, ждать - он откроется.
// если просто отпустить - будут помещены в текущий раздел.
// порядок также меняется: иконистые через css transition ('left'), статьи тоже ('top'). (position: relative)
// по enter в одном поле - переходить к другому полю, если оно пустое, а не жать кнопку
// возможность добавления камента к картинке (явного или всплывающего) в заметке читальни
// хешировать secret_id и приглашение через Скалу
// сделать анимированную иконку на случай новых сообщений
// сделать защиту от перехвата пароля: с каждого отдельного компа нужно для первого входа вводить код из email (или жать ссылку из email)
// websocket for user online statuses: send 'action' updates for all users along with writing 'action' time to the DB
// sociopathy tex - set up height (in url)
// в болталке и где человек "вызвать" - единая проверка (на сервере), что auth required, чтобы не спамили звуками
// на странице друзей - орбитали, овальные, размером к монитору
// можно друзей будет фасовать по группам и дальности
// изначально - в центре, и близость = 1
// в конце - близость = 0
// ограничивать область драг-н-дропа
// общие друзья - выводить большими тех, у кого перемножение близостей большое.
// маленькими - у кого маленькое
// просто списком ссылок (ul), с font-size и размерами аватарок
// можно создать круг "близких людей", или круг "интересных людей".
// новости: все или круги, где вверху галки стоят по каждому кругу (разворачивается слайдингом)
// fade out старую фотку при переходе к новой
// проверить работу ссылок "войти" и войти в сообщениях
// у разделов и заметок - журнальные заметки
// каменты к: журнальным заметкам, заметкам, разделам.
// можно следить за разделом или заметкой читальни, чтобы получать обновления, когда там что-то правится, или что-то связывается с ними.
// в круги можно добавить "все пользователи"
// круги можно объединять в один
// круг по умолчанию - ...
// ещё есть круг - все
// запретить шаринг ссылок на книги: http://ru.wikipedia.org/wiki/%D0%A5%D0%BE%D1%82%D0%BB%D0%B8%D0%BD%D0%BA
// для книг можно писать каменты
// в firefox нажатие на more_tools убирает каретку
// сделать "отменить правки"
// привязывать книги к разделу или заметке
// на каждый вид оповещения - свой звук
// звуки можно настраивать
// когда не в фокусе - звук резче
// переименование кругов
// создание и правка заметок в журнале и дневнике
// черновики у них тоже
// каменты в дневниках и журналах
//в заметке ссылки на разделы и заметки - по id-шникам, чтобы потом подставлять переименованные пути
//в заметке: вставка ссылки на раздел или заметку: начинаешь печатать, и выпадают возможные варианты
//(те, которые начинаются со введённого значения)
//отлавливать backspace и delete, сделать у editor метод erase, и у time machine can_erase()
//Можно подписаться на правки заметок, и узнавать о них в новостной ленте.
// в новостях - лента такая же, как и в сообщениях
//экспорт раздела - воссоздание структуры папок, и там текстовые файлы (и всё)
//папка /export_requests
//туда на scala всё генерится
// сделать загрузку картинок в галерею
// сделать добавление видео в галерею
// id картинки или видео не может быть "обложка"
// полнотекстовый поиск по книгам (lucene).
// синтаксис lucene вывесить в FAQ: http://www.dataart.ru/downloads/lucene.pdf
// с синонимами, правкой опечаток, NIOFSDirectory, SpellChecker (мб)
// при нажатии на загрузку обложки книги - проверять, есть ли эта книга в базе
// загрузку книг (небольших)
// в списке людей: пушить новых людей
// комментарии - так же, как и сообщения: с пушем правок и с пушем новых (выезжают вниз новые), со ссылкой "раньше" и последними прочитанными
/// пушить не всё подряд, а в зависимости от того, на какой странице находится пользователь (при коннекте сообщение 'страница', и при навигации тоже)
/// если так делать, то образуется область неопределённости во время переключения страниц, когда новая страница уже загружена, а пуши на неё ещё не идут. можно решить предварительной переменной "следующая страница" на сервере, для которой тоже пушить всё
// подсветка синтаксиса при вставке кода
////в обсуждениях и беседах:
////если новая беседа или обсуждение - пушить и добавлять (беседа - если участником добавили)
// если в беседе два человека - отправлять notification по почте (по истечению 15 min, мб, или умнее) не тому, который отправил сообщение
// для аватара - делать пуш, чтобы на открытых страницах видно было изменение своего аватара
// version обложки для книг и т.п.
// volume control для jouele, и mute / unmute (как в flowplayer)
// jouele в firefox зависает, при отмене правки сообщений
// http://cs5069.userapi.com/u23765867/audio/d94c0d9d034b.mp3
// фотку в профиле и беседы - не просто hide/remove, а fadeOut, slide out, remove
// прятать писарь по какой-нибудь правой кнопке мыши на снастях
//свой smtp сервер, и от него слать письма.
// при обновлении и создании книг - проверять уникальность названия и автора (пара)
//// поставить свой MathJax на сервере
// хоткеи для снастей, при которых диалоговые окна не открываются,
// а просто печатаешь (или вставляешь) там же.
// завершение - энтер, или какая-нибудь другая комбинация клавиш
// сделать историю версий читальни (мб в виде diff-ов)
// "бесшовный" переход от создания беседы/обсуждения до самой созданной беседы/обсуждения
// хоткеи для снастей (+ настройка, + описать в помощи)
// сделать плавное добавление - сначала fade_out, потом slide_out
// session.последняя_прочитанная_новость
// когда новость поступает на той же странице - добавлять класс unread (с транзишеном)
// enter в начале абзаца - не даёт вставить новый абзац
// видео наезжает на position: fixed (tools)
// делать так, чтобы при change курсор всегда был на экране (в писаре)
//если из беседы выходит последний человек - она удаляется (идёт в мусорку вместе с сообщениями)
//// ставить инвайт сначала на locked, а потом уже либо unlock, либо used
/*
не нужно передавать на клиент все непрочитанные сообщения из всех бесед и обсуждений.
достаточно просто передать то, что есть непрочитанности в беседах и обсуждениях.
ответ на сообщение "прочитано" - обновление этого статуса непрочитанности разделов "беседы", "обсуждения" и т.п.
при получении списка бесед и обсуждений - проставлять непрочитанность на сервере
*/
/*
сделать новости (+ push, + получить пропущенные новости):
новое обсуждение
прописался новый пользователь
добавлена заметка
правлена заметка - сохранять в новости diff
в новостях ссылка на правку заметки - в виде diff'а, с подсветкой
// новостям: [class=new и наверху подсвечивать]
*/
// мб не грузить все шаблоны и кусочки сразу, а только по запросу (в обёртке)
// для всех правок - черновики (самосохраняющиеся)
/*
черновик создаётся сразу после нажатия кнопки правки
самосохранять каждые 10 секунд, если есть изменения.
при загрузке страницы, если есть черновик - показывать вверху, что "есть черновик", и ссылку "перейти к черновику" (переходить в правку и применять его).
при сохранении - удалять черновик в корзину.
черновики при нажатии "отмена" - удаляются в корзину
черновик самосохраняется только если стало больше символов, чем было на предыдущем сохранении.
можно сохранить вручную черновик (в середине кнопка)
она становится неактивной, когда черновик сохраняется, и пишет "черновик сохранён".
при изменении - опять активна (keypress, cut, copy, paste).
*/
// у удаляемых разделов - удалять подразделы и заметки (в корзину)
// (и пути к этому разделу, к его подразделам, и к его заметкам)
// (и черновики для всех заметок, которые в этом разделе)
// * всё удалять рекурсивно
/*
читальня:
каждый тег статьи помечается uid-ом (uid generator in google, or последовательность на сервере, мб, или timestamp + random)
при нажатии кнопки сохранить:
новые id, вытянутые с сервера, вставляются куда нужно, и зелёные
изменённые - жёлтые
удалённые - серые и зачёркнутые
конфликты - красные
(всё скруглённое)
нажимает пользователь на красный конфликт, и вылазит окошко: до, после, и contenteditable с итогом
экраны: "их правки", "мои правки", "слияние"
заметки хранить в collection article_backups, индекс по _id заметки
при сохранении мержа: проверять { and version === Version }
*/
// отображать авторов (и даты) в особом режиме
// путь к разделу показывать в breadcrumbs не из url, а нормальный
// при переименовании заметки - пробовать создавать новый путь к ней (оставляя старый)
// проставлять date и author при Wiki_processor.parse() - только для заметок в читальне (мб убрать это из wiki parser - attr('author'))
//// мб это не делать, а делать при мерже - при изменении элемента (с помощью tool или просто в тексте) = менять автора на себя
// при переносе раздела - создавать новые пути для него и его потомков
// черновик для создания новой заметки тоже
// при восстановлении заметок и разделов из корзины - пересоздавать пути
// при сохранении заметки - проверять, что действительно сохранилось, перед удалением черновика (чтобы данные не терялись)
// с не самых новых путей разделов и заметок - редирект на самые новые пути
// нельзя перенести раздел в себя или потомков
// \n в именах разделов и заметок заменять на пробел, или не заменять
// при переименовании и перемещении разделов - картинки менять (или картинки хранить без путей, по _id)
// при удалении разделов и заметок - мб удалять картинки (или в корзину помещать)
// скинирование
// установщик: скачал, запустил скрипт sh и поставилось
//// эфир - одно соединение в shared worker.
//// голосовой чат и видеочат (WebRTC)
//// минифицировать js и мб склеивать в один файл.
//// мб склеивать в один файл css.
// jMetronome - ритм в читальне при вставке media
// http://www.fortes.com/2008/jmetronome-using-jquery-to-keep-typographic-rhythm
// сделать хоткеи для инструментов писаря, чтобы можно было писать вообще без мышки (и клик на клавишу мб повесить, а мб и не вешать)
// при наведении на каждую - кто читает (иконкой)
// при добавлении книги - поиск по подстроке
//в книжном шкафу - можно только удалять (потрясти) /и переупорядочивать
//в книгах - можно искать (сверху два поля - автор и название) и добавлять
// создать обсуждение "выдача приглашений"
//// проверить сценарий с пропущенными сообщениями: доходят ли они после реконнекта, и ждут ли новые сообщения этих пропущенных
//// уведомление: в явном виде показывать мб только первое сообщение сеанса общения, а дальше - как-то менее навязчиво
//// предусмотреть случай, когда кто-то жмёт энтер часто, и уведомления о сообщениях надоедают
// аудиозаписи
// видеозаписи
// журнал - возможность полноценного журнала, как новостного и аналитического. плиткой статьи с картинками, как в норм журнале. самые популярные заметки - на обложку.
// книги: популярные, новые
//// по кнопке "назад" не загружать страницу, а показывать спрятанный div. количество таких назадов - около пяти
// ссылка "в конец", которая прочитывает все сообщения и обновляет страницу
// если в общении пришло сообщение от пользователя, и был "пук", то при сразу последующих сообщениях от него же не делать "пук", если они идут друг за другом менее чем через 10 секунд, скажем (и при этом первое сообщение так и не было прочитано)
у книг "формат" = escape_filesystem (только буквы, не пропускать кавычки)
удаление книг - действие
восстановление книг из корзины (контекстное меню)
восстановление разделов и заметок
упорядочивание и удаление книг в профиле
при удалении книги из личного шкафа - не перезагружать страницу, а просто удалять книгу,
сделав после этого refresh (написать этот refresh)
////// предоставить пользователям возможность самим менять пароль
// проверить бекапилку
// при заливке хранилища - параметром передавать данные админа (в английской версии - английские)
// при автосохранении черновика статьи - сразу его проверять на валидность (не сохранять, если не валиден)
// книги переделать:
// в data_store сделать model, у которой есть getter для каждого свойства
// она сама проходится по всем свойствам и делает get, и те, которые изменились, помещаются в data_store.edited
// anything changed, если edited непустой, и там что-нибудь отличается
// при сохранении - edited само отправляется на сервер (мб)
// те свойства, которые immutable - просто переносятся неизменными из режима в режим
// добавить drag_over для книг
при поиске книги, если она уже есть в data_store.edited - брать данные оттуда
blur:
http://jsfiddle.net/SvH6w/2057/
<div id="myDiv">
Normal
<div id="color">
Blurred
</div>
</div>
<p>Hover the picture</p>
#color
{
width: 100px;
height: 25px;
margin-top: 15px;
padding: 10px;
background-color: lightblue;
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
-ms-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
}
#color:hover
{
-webkit-filter: blur(1px);
-moz-filter: blur(1px);
-o-filter: blur(1px);
-ms-filter: blur(1px);
filter: blur(1px);
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
-ms-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
}
запостить картинок
http://cs9448.vk.me/u3059822/-6/y_f446a512.jpg
http://cs419716.vk.me/v419716014/824e/ajNH2D2qV7E.jpg
http://cs303503.vk.me/v303503598/598a/ASIxn3SvtUQ.jpg
http://cs411121.vk.me/v411121598/5207/hxeJNNqEs_s.jpg
http://cs416817.vk.me/v416817777/a9d2/hfBL0yZ5nyw.jpg
http://cs315516.vk.me/v315516791/3113/48SdFbs7sOQ.jpg
демо:
! перед этим добиться нормального качества записанного видео !
Иннокентий заходит в ff (с экраном логина)
Создаёт обсуждение "Раковый тред стартует здесь"
Геннадий заходит с айфона (с экраном логина)
Видит обсуждение, пишет "Все в машину!"
Первый - регается (имя: Викентий, м, москва, пароль)
Заходит в свой профиль.
Правит себе описание на "всемогущий".
Загружает фотку и аватар.
Добавляет пару сведений о себе: "вероисповедание" "дзен-буддизм", "отношение к наркотикам" "нейтральное"
Сохраняет.
Заходит и смотрит список людей
Находит поиском Иннокентия
Видит его статус, что он в сети
(подождать, пока зритель воткнёт)
Заходит в его профиль
Пишет ему "ё"
Видит, что у сообщения статус - "непрочитанное"
Викентий смотрит обсуждения
отвечает в обсуждении Иннокентию и Геннадию
Иннокентий смотрит новости и видит там, что зарегался Викентий
Смотрит его профиль
Иннокентий видит уведомления
читает беседу
Викентий смотрит - статус с непрочитанного сменился на "прочитанное"
(подождать, чтобы дошло до зрителя)
Викентий переходит в режим правки и исправляет "ё" на "йоу!".
Иннокентий смотрит на беседу и видит, как сообщение исправилось.
(подождать, чтобы дошло до зрителя)
Иннокентий отвечает картинкой ниггера "ё"
У сообщения статус - "непрочитанное"
Викентий читает беседу
Иннокентий смотрит - статус с непрочитанного сменился на "прочитанное"
(подождать, чтобы дошло до зрителя)
Иннокентий читает обсуждение
Геннадий видит уведомление в айфоне
Заходит, читает тоже
Викентий видит уведомление в беседе
Викентий заходит с айфона в беседы, и видит, что там трое
(обвести мышкой)
Читает
Добавляет в беседу Геннадия
Геннадий видит уведомление о беседе, читает
Иннокентий выходит из беседы
Показать, что она исчезла из списка бесед
Иннокентий пишет в обсуждении "tl;dr", вставляет двачовую картинку и отписывается от обсуждения
Викентий заходит с айфона в беседы, и видит, что там остались только двое
(обвести мышкой)
Тоже делает "выход из беседы"
Викентий заходит с айфона в читальню, видит список разделов
Иннокентий создаёт в читальне раздел "Философия древних шумеров" с картинкой философии
а в нём создаёт заметку "IV—III тысячелетия до Рождества Христова"
http://upload.wikimedia.org/wikipedia/commons/c/ca/Cuneiform_script2.jpg
Владыка Урука Гильгамеш был на две трети бог и лишь на треть человек. Силой он обладал неимоверной, но и буйный характер его был неудержим. Жаловались отцы Урука, что не оставляет им славный герой их сыновей, держит их на работах и в походах постоянных. Стенали матери Урука, что забирает Гильгамеш их дочерей для своих утех. Услышала этот плач богиня Аруру и вняла просьбам жителей города. Вылепила она из глины существо, равное по силе своенравному Гильгамешу - пусть-де соревнуются друг с другом, а “Урук пусть отдыхает”. Звали ее творение Энкиду. Это был абсолютно дикий человек. Тело его покрыто шерстью, волосы его длинны и нечесаны, знается он лишь со зверьем, люди во всем чужды ему.</p>
Иннокентий заходит в читальню, видит новую заметку, и добавляет видео
http://www.youtube.com/watch?v=ONTxFC4hPF4
Геннадий обновляет страницу в айфоне и видит новый раздел, и в нём статью
докручивает вниз, смотрит видео
Викентий идёт в чат, пишет цитату "Все с детства знают, что то-то и то-то невозможно. Но всегда находится невежда, который этого не знает." "Альберт Эйнштейн"
Геннадий идёт в чат и видит это
Викентий идёт в чат и добавляет в цитате в правке "Он-то и делает открытие."
Геннадий видит поправленное сообщение и пишет "+1"
У Викентия уведомление в болталке
Викентий видит это сообщение
Геннадий правит на айфоне на "Согласен"
Викентий видит эту правку
(обвести мышкой)
Викентий постит картинку эйнштейна и видео про ОТО
Геннадий на айфоне это видит, и смотрит видео
Викентий создаёт раздел "На выброс", и перемещает раздел про шумеров туда.
Геннадий на айфоне видит, что раздел перемещён
Викентий удаляет раздел про шумеров
идёт в мусорку и видит, что он там (и заметка там)
и что есть кнопка "восстановить"
В конце Иннокентий заходит в помощь, в настройки, в админку, в ошибки