Очень древний код от Ю.Б., еще со времен медтеста. Пусть будет.
Continue Reading →
Author Archives: Sava
Группировка по датам Linq To Entity
.GroupBy(x => new { Year = x.Date.Year, Month = x.Date.Month, Day = x.Date.Day }).ToArray();
Варианты хранения настроек
1. Одна таблица с множеством колонок
Подходит для настроек, которые есть у всех пользователей в обязательном порядке (например, логин, пароль, почта).
В остальных случаях этот вариант плохой.
2. Таблицы: Пользователи, Настройки, Настройки_Пользователей. Последняя таблица включает в себя ссылки на две первые и поле Значение для настройки.
Плохо тем, что для миллиона пользователей с 50-ю настройками будет 50 миллионов записей в таблице.
3. Предыдущий вариант, только таблицы разделять по тематике. Тогда на миллион пользователей будет всего десять миллионов записей.
Эти варианты можно оптимизировать заданием настроек по умолчанию. Если записи о настройке в базе нет, применяется настройка по умолчанию. Таким образом, количество записей можно сократить.
4. Сериализация. Количество колонок/записей сокращается, но внутренняя структура становится менее прозрачной и более трудной для обработки и сортировки.
5. XML. Хранение пользовательских настроек в XML, с использованем значений по умолчанию.
Ну и наконец, самый лучший вариант — смешанный.
«Жесткие» настройки хранить в одной таблице, на каждую настройку по колонке (Аккаунт)
Разделить настройки тематически (сейчас выделены Приватность и Уведомления)
Использовать настройки по умолчанию
Использовать XML для тех настроек (вместо сериализации — имхо, лучше использовать существующие и проверенные технологии, чем городить свои), по которым не нужно выбирать списки (медленная пакетная обработка для статистики не в счет)
Записывать настройки в сессии
По каким настройкам выборки списков (напр., права доступа к альбуке), а что отн. только к конкретному пользователю
Оптимизация LINQ-запроса
var sw = Stopwatch.StartNew(); for (int i = 0; i new { Id = c.Id, UploadedDate = c.UploadedDate }) .Where(c => c.UploadedDate > this.monthAgo) .ToArray() .GroupBy(c => c.UploadedDate.Date) .Select(c => new { Date = c.Key, Count = c.Count() }) .OrderByDescending(c => c.Date) .ToDictionary(c => c.Date, c => c.Count); } sw.Stop(); System.Diagnostics.Trace.WriteLine("SW1: " + sw.ElapsedMilliseconds.ToString()); sw.Restart(); for (int i = 0; i c.UploadedDate > this.monthAgo) .ToArray() .GroupBy(c => c.UploadedDate.Date) .OrderByDescending(c => c.Key.Date) .ToDictionary(c => c.Key, c => c); } sw.Stop(); System.Diagnostics.Trace.WriteLine("SW2: " + sw.ElapsedMilliseconds.ToString());
Переключалка пунктов меню
var selectNavItem = { load: function(elem){ $(elem).addClass("active"); $(elem).siblings(".nav li").removeClass("active"); }, menuClick: function(){ $(".nav li").click(function () { $(this).toggleClass("active"); $(this).siblings().removeClass("active"); }); } }
Про компьютер для детей
Х Хасэгава Мир компьютеров
Зарецкий, Труханов, Зарецкая Энциклопедия профессора фортрана
Пример структуры сайта на ASP.Net
Базовый сервис
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Example.Data.Services { public abstract class BaseService : IDisposable { protected ExampleContext context; protected BaseService() { context = new ExampleContext(); } public void Dispose() { context.Dispose(); } } }
Мегафункция для тегов
Задача: в базе хранятся теги и теги к контенту (связь тег-контент).
Пользователь вводит свои теги (String[] tagTitles) к контенту.
Среди введенных пользователем тегов могут быть как совсем новые, так и уже существующие в базе.
Новые теги необходимо добавить в таблицу тегов и в таблицу связи тег-контент.
У уже существующих тегов необходимо увеличить поле количества использований на 1.
Continue Reading →
Почему я не люблю AJAX-автоподгрузку
https://habrahabr.ru/post/140781/
Почему я не люблю AJAX-автоподгрузку и предпочитаю ссылки с номерами страниц
Я не луддит. Я понимаю, что AJAX даёт возможность более быстро просмотреть большее количество контента экономя трафик и время. Но у большинства реализаций автоподгрузки с моей точки зрения есть ряд существенных недостатков.
В этом посте речь пойдёт в основном не о социальных сетях, а об обычных сайтах, которые можно просмотреть без регистрации и которые используют автоподгрузку новостей, обзоров, рецензий. На написание поста сподвиг этот сайт.
Я не люблю автоподгрузку новых элементов на страницу потому что:
1) Она не даёт понимания о количестве страниц сайта.
Примитивная манипуляция, чтобы человек смотрел и смотрел, не зная сколько ему ещё предстоит потратить на это времени. Как только ты досмотрел страницу и готов заняться другим делом, псевдодружелюбный сайт подгружает новую страницу.
Без автоподгрузки я всегда знаю сколько страниц я просмотрел, сколько хочу просмотреть и сколько их всего, а тут меня держат за осла перед которым привязана морковка. Передо мной неизвестность. Она создаёт ощущение, что просматривание этого сайта никогда не кончится. А я не настолько люблю сайты, чтобы смотреть их сутками. Даже социальные сети.
2) Нет никакой гарантии, что ссылки и новости доступные через автоподгрузку проиндексируются в поисковиках. Допустим на странице показывается 10 последних элементов, в перерыв между заходами робота было опубликовано ещё 20, робот увидит только последние 10 и предпоследние 10 не проиндексируются. Если ваш сайт не твиттер и не имеет специального договора с гуглом, то рассчитывать на 100%-ю индексацию не стоит. Некоторое увеличение шансов индексации даёт наличие RSS.
Применительно к сайту-примеру мы имеем проиндексированными 170 страниц из более чем 240, что составляет менее 71% страниц.
3) Если у сайта есть страницы, то кроме того, что дать прямую ссылку, я всегда могу сказать кому-то: ты там на N-странице, на M-месте. А если автоподгрузка: ты крути страницу и гляди внимательнее. Видимо поэтому в поисковой выдаче AJAX-автоподгрузка используется редко.
4) Для навигации наличие всего лишь одной автоподгрузки — это катастрофа. Вместо того, чтобы крупными прыжками попасть в интересующую тебя область приходится крутить и крутить. (спасибо за подсказку vk2)
Если провести аналогию с книгами, то вначале были свитки, потом книги с номерами страниц, а потом кто-то догадался к свитку прикрутить электромотор и типа номера уже не нужны. Хочешь попасть в ленте на 2 года назад — прикрути маленький моторчик к колесу мыши и иди попей кофе.
Итог: не стоит использовать технологию везде только потому что она модная. А если использовать, то лучше с активного одобрения пользователя, чтобы он видел сколько страниц он просмотрел и сколько их всего.
Подборка ссылок
Поработаем с MongoDb
http://habrahabr.ru/post/127290/
Experimenting with MongoDB from C#
http://odetocode.com/Blogs/scott/archive/2009/10/13/experimenting-with-mongodb-from-c.aspx
The NoSQL Movement, LINQ, and MongoDB – Oh My!
The NoSQL Movement, LINQ, and MongoDB – Oh My!
NoSQL Data Modeling Techniques
NoSQL Data Modeling Techniques
Куда идет NoSQL с MongoDB
http://msdn.microsoft.com/ru-ru/magazine/ee310029.aspx
MongoDB vs. SQL Server 2008 Performance Showdown
MongoDB vs. SQL Server 2008 Performance Showdown
PTOM: The Dependency Inversion Principle
http://lostechies.com/jimmybogard/2008/03/31/ptom-the-dependency-inversion-principle/
StructureMap — краткий справочник для работы (1/3)
http://habrahabr.ru/post/125613/
Феерическая расстановка точек над DI/IOC (контейнерами)
http://www.codehelper.ru/questions/352/феерическая-расстановка-точек-над-diioc-контейнерами
История одного маппера
http://gandjustas.blogspot.com/2010/01/blog-post.html
Ajax отправка данных из формы
http://itfound.ru/45-ajax-otpravka-dannih-formi.html
Backbone.js для «чайников»
http://habrahabr.ru/post/127049/
Javascript for Bootstrap — tabs
http://twitter.github.com/bootstrap/javascript.html#tabs
Написание сложных интерфейсов с Backbone.js
http://habrahabr.ru/post/118782/
Backbone Tutorials
http://backbonetutorials.com/
Backbone Todos
http://documentcloud.github.com/backbone/#examples-todos
jQuery.post()
http://api.jquery.com/jQuery.post/
Tag Cloud in ASP.NET MVC using Clickable HTML 5 Canvas Elements
http://www.dotnetcurry.com/ShowArticle.aspx?ID=785
Creating tag cloud using ASP.NET MVC and Entity Framework
http://weblogs.asp.net/gunnarpeipman/archive/2011/04/28/creating-tag-cloud-using-asp-net-mvc-and-entity-framework.aspx
Creating a Tag Cloud using ASP.NET MVC and the Entity Framework
http://www.mikesdotnetting.com/Article/107/Creating-a-Tag-Cloud-using-ASP.NET-MVC-and-the-Entity-Framework
Визуализация графов. Метод связывания ребер
http://habrahabr.ru/post/116758/
Эксперимент с голографическим кодированием и декодированием информации
http://habrahabr.ru/post/120051/
Z̩̣̫̗̙͇̯̣̓̔̆ͭA̳͔̖̔̆͡L̨̤̖͖̃ͫͧ͂ͨ̿̚͢G͓̭̦̺̗̱̲͙ͪ́Ơ̤̝̣̜͕̖̇̄!̼͎̰͔̽ͦ̍ͩ̏̾
http://textozor.com/zalgo-text/