Года два назад сделал на 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