Года два назад сделал на Silverlight для личного пользования вэб-приложение для ведения личного дневника. Для тех кому это нужно — хочу поделиться своим решением.
На личном опыте знаю, что основная функция дневника — это быстрое добавление небольшой новой записи (перечитывание дневника случается раз в пару лет). Ну и, конечно, крайне важно обеспечить конфиденциальность.
Приложение имеет только клиентскую часть, сами данные в интернете не хранятся. По сути, приложение является специализированным редактором локальных файлов с возможностью автоматического шифрования и добавления к записям метаданных.
Попробовать в действии можно тут: www.kalantyr.ru/Diary без каких-либо регистраций.
Синхронизацию данных между компьютерами (велосипед) решил не изобретать и синхронизирую файл данных просто через DropBox. Или можно носить его с собой на флэшке — кому как удобнее.
Предваряя сомнения: возможно, кто-то скажет, что вот сейчас приложение ничего никуда не отправляет, а через пару месяцев тихо начнет… Если кому нужно — я могу выслать исходники, мне не жалко. Или просто готовый скомпилированный xap-модуль — выкладывайте на свой хостинг и пользуйтесь на здоровье.
Вот скриншоты для тех кто не хочет устанавливать Silverlight:
dl.dropbox.com/u/5681766/Habr/Diary/01.PNG
dl.dropbox.com/u/5681766/Habr/Diary/02.PNG
dl.dropbox.com/u/5681766/Habr/Diary/03.PNG
dl.dropbox.com/u/5681766/Habr/Diary/04.PNG
dl.dropbox.com/u/5681766/Habr/Diary/05.PNG
dl.dropbox.com/u/5681766/Habr/Diary/06.PNG
Одна из фич, которые для меня были важны — это теги. Причем тэг у меня — это не просто слово, а Название+Описание. Например, тэгом можно описать человека, а в Описание добавить его контактную информацию.
Время идет, технологии меняются, чтобы была возможность попроще перейти с Silverlight на что-нибудь более актуальное — реализованы функции экспорта/импорта данных через обычные xml-файлы.
Если нужно что-то найти в тысячах записей — есть фильтрация записей по тэгам/подстроке/дате.
Есть еще одна неочевидная фича — когда кто-нибудь стоит за спиной, можно, нажимая кнопки «плюс» или «минус» на цифровой клавиатуре, менять контрастность текста, делая его неудобочитаемым через плечо :)
Про конфиденциальность: данные из браузера никуда не передаются, при сохранении в файл данные шифруются AES:
Update:
Вот скомпилированное приложение для запуска на локальном компьютере (без Интернета): dl.dropbox.com/u/5681766/Habr/Diary/Diary.zip
Update 2:
А вот исходники: dl.dropbox.com/u/5681766/Habr/Diary/Diary_SourceCode.zip
На личном опыте знаю, что основная функция дневника — это быстрое добавление небольшой новой записи (перечитывание дневника случается раз в пару лет). Ну и, конечно, крайне важно обеспечить конфиденциальность.
Приложение имеет только клиентскую часть, сами данные в интернете не хранятся. По сути, приложение является специализированным редактором локальных файлов с возможностью автоматического шифрования и добавления к записям метаданных.
Попробовать в действии можно тут: www.kalantyr.ru/Diary без каких-либо регистраций.
Синхронизацию данных между компьютерами (велосипед) решил не изобретать и синхронизирую файл данных просто через DropBox. Или можно носить его с собой на флэшке — кому как удобнее.
Предваряя сомнения: возможно, кто-то скажет, что вот сейчас приложение ничего никуда не отправляет, а через пару месяцев тихо начнет… Если кому нужно — я могу выслать исходники, мне не жалко. Или просто готовый скомпилированный xap-модуль — выкладывайте на свой хостинг и пользуйтесь на здоровье.
Вот скриншоты для тех кто не хочет устанавливать Silverlight:
dl.dropbox.com/u/5681766/Habr/Diary/01.PNG
dl.dropbox.com/u/5681766/Habr/Diary/02.PNG
dl.dropbox.com/u/5681766/Habr/Diary/03.PNG
dl.dropbox.com/u/5681766/Habr/Diary/04.PNG
dl.dropbox.com/u/5681766/Habr/Diary/05.PNG
dl.dropbox.com/u/5681766/Habr/Diary/06.PNG
Одна из фич, которые для меня были важны — это теги. Причем тэг у меня — это не просто слово, а Название+Описание. Например, тэгом можно описать человека, а в Описание добавить его контактную информацию.
Время идет, технологии меняются, чтобы была возможность попроще перейти с Silverlight на что-нибудь более актуальное — реализованы функции экспорта/импорта данных через обычные xml-файлы.
Если нужно что-то найти в тысячах записей — есть фильтрация записей по тэгам/подстроке/дате.
Есть еще одна неочевидная фича — когда кто-нибудь стоит за спиной, можно, нажимая кнопки «плюс» или «минус» на цифровой клавиатуре, менять контрастность текста, делая его неудобочитаемым через плечо :)
Про конфиденциальность: данные из браузера никуда не передаются, при сохранении в файл данные шифруются AES:
private static byte[] Encrypt(IList<byte> key, byte[] data) { using (var encryptor = new AesManaged()) { encryptor.GenerateIV(); encryptor.IV = GetKey(key, encryptor.IV.Length); encryptor.GenerateKey(); encryptor.Key = GetKey(key, encryptor.Key.Length); using (var encryptionStream = new MemoryStream()) using (var encrypt = new CryptoStream(encryptionStream, encryptor.CreateEncryptor(), CryptoStreamMode.Write)) { encrypt.Write(data, 0, data.Length); encrypt.FlushFinalBlock(); encrypt.Close(); return encryptionStream.ToArray(); } } } private static byte[] Decrypt(IList<byte> key, byte[] data) { try { using (var decryptor = new AesManaged()) { decryptor.GenerateIV(); decryptor.IV = GetKey(key, decryptor.IV.Length); decryptor.GenerateKey(); decryptor.Key = GetKey(key, decryptor.Key.Length); using (var decryptionStream = new MemoryStream()) using (var decrypt = new CryptoStream(decryptionStream, decryptor.CreateDecryptor(), CryptoStreamMode.Write)) { decrypt.Write(data, 0, data.Length); decrypt.Flush(); decrypt.Close(); return decryptionStream.ToArray(); } } } catch (CryptographicException) { throw new InvalidOperationException("Неправильный пароль."); } } private static byte[] GetKey(IList<byte> value, int keyLength) { var data = new byte[value.Count * keyLength]; for (var i = 0; i < data.Length; i++) data[i] = value[i % value.Count]; var key = new byte[keyLength]; for (var i = 0; i < key.Length; i++) key[i] = data[i]; return key; }
Update:
Вот скомпилированное приложение для запуска на локальном компьютере (без Интернета): dl.dropbox.com/u/5681766/Habr/Diary/Diary.zip
Update 2:
А вот исходники: dl.dropbox.com/u/5681766/Habr/Diary/Diary_SourceCode.zip