.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/
Не будите программиста
http://yarland.ru/u/Denis/blog/post_1967/
Автор этой записи очень точно описал работу программистов…
Взято отсюда: http://alexthunder.livejournal.com/290612.html
Вот что пишет:
Вот в отпуске побывал впервые в жизни… а некоторые так за всю жизнь ни разу там и не бывают как я подозреваю.
Не знаю полезно это или нет — отвлечься вот так от работы на почти целый месяц. Я пока не понял какой это возъимеет эффект на производительность труда. Зато во время отпуска я понял кое что о чём много раньше думал и никак не мог осознать…
Меня всегда мучал вопрос — как объяснить людям никогда не занимавшимся такого рода трудом, каким занимаюсь я то что вот происходит у меня и у таких как я в голове когда мы работаем. Как НЕ программисту представить себе работу программиста и понять наконец чего же происходит и как вообще с этим быть.
И вот я кажется понял. Наверное именно благодаря тому что почти на целый месяц выключился из этого процесса, но помнил что скоро придётся вернуться у нему опять.
Ну вобщем хватит предъистории. Как работает программист.
Работа программиста — это СОН.
Звучит нелепо, правда?
Если вы хотите представить что именно делает программист во время работы, то легче всего это представить именно так. Он спит!
Продукт труда программиста это продукт сна — химера. Сновидение записанное специальным языком и переданное электронному устройству для того чтобы продолжаться там когда программист уже проснулся или просто сменил один сон на другой.
Это вы думаете что программист взял задачу, написал программу и задача решилась. Всё не так.
Если взять к примеру задачу нахождения пути выхода из лабиринта. Программист в решении этой задачи не перст который ведёт воображаемую маленькую заблудившуюся девочку незнакомой тропой к выходу. Он и не эта девочка тоже. И не стены лабиринта. Он не выход который надо найти. Он всё это вместе разом.
Для решения задачи программисту приходится стать в своём сознании и лабиринтом, и искомым выходом, и заблудившейся девочкой, и тем перстом что ведёт её куда-то, и теми камушками которые она разбрасывает по дороге чтобы узнавать уже пройденные места. Всё это СНИТСЯ программисту во время работы.
Я не фигурально выражаюсь. Это БУКВАЛЬНО снится. Программист при решении задачи виртуально живёт в создаваемом мире химер, похожих каким-то образом на условия решаемой задачи.
Внешне наблюдение за работающим программистом это тоже самое что наблюдение за спящим человеком. Вы вот сразу засыпаете когда решаете отойти ко сну?
Большинство людей процесс засыпания воспринимают как определённый ритуал. У кого-то он довольно короткий, а у кого-то довольно сложный и длинный. У кого что. Кому-то надо непременно почитать перед сном, кто-то не засыпает если тридцать приседаний не выполнит перед тем как лечь. Так или иначе отход ко сну у каждого происходит по своему и это не просто ЧИК — и заснул. Хотя бывает у некоторых и так.
Вот тоже самое и в работе программиста. Процесс начала работы это тоже самое. Программист не может просто сесть и начать работать точно также как вот вы не можете сказать себе «СПИ УЖЕ СКОРЕЙ!» и отключиться. И общего какого-то способа тоже нет, как нет его в ритуале засыпания.
Кто-то вот считает баранов, которые будучи вызваны к жизни этим вот самым процессом счёта вынуждены потом как-то дальше жить у нас здесь в Новой Зеландии. А кто-то фантазирует. Кто-то следит за своим дыханием, а кто-то просто прилепит чаю с ромашкой и готов.
Это ведь ещё и меняется со временем. Сегодня вот вы легли спать и всё — уже сладкие грёзы. А завтра ворочаетесь час, два, три и ну никак. Тоже самое и в работе программиста. буквально тоже самое.
Ну и что делать всвязи с этим?
Ну скажем так. Если вы НЕ программист и вы каким-то образом заинтересованы впрямую или косвено в том чтобы он производил-таки продукт своего труда, то вам надлежит понять вот это всё хоть в какой-то более-менее мере.
Вот представьте что от вашего сна зависит ваша жизнь, жизнь выших детей и вообще всё. Представьте что от того как вы спите зависит будут-ли ваши дети учиться в университете или пойдут улицы мести. Представьте что от того насколько красивы, успешны, живучи и полны ваши сновидения зависит жизнь пассажиров в самолётах и качество обслуживания в супермаркетах, а главное от этого зависит содержимое вашего кармана в день зарплаты.
Представили?
Вот это именно так выглядит для нас — программистов. БУКВАЛЬНО ТАК.
Это вам со стороны кажется что вы просто подошли и спросили который час.
А давайте я вас подойду и спрошу в три часа ночи который час?
Чего страшного-то? Ну и что такого что вы только что заснули?
Я просто спрошу, вы ответите и спите дальше. Чего такого-то?
Так легче понять я думаю будет. На таком примере.
Вот вы представляйте что от вашего сна зависит ВСЁ! Всё при всё. Вот от того как вы сегодня поспите зависит будет завтра чего дома жрать или нет. Зависит будет ваша дочть замужем или нет. Вырастет ваш сын неудачником или добьётся чего-то в жизни. Всё это зависит от того как продуктивно вы сегодня поспите.
Представили?
И вот вы собираетесь начать этот сон. Этот вот самый сон от которого ВСЁ зависит и вы это отчётливо осознаёте.
Скажите вот теперь. Как насчёт спать и одновременно немножко, краем глаза разговаривать, чуть чуть помогать сыну решать арифметику, немножко подглядывать в телевизор и чуть чуть так совсем немного съездить в магазин? Не на долго…
Как спится, сладко?
Вот теперь подумайте что происходит с программистом к которому раза два-три в час подходят и просят чего-то подсказать, чего-то помочь там вот и тут, чего-то просят его где-то заполнить, отметить и ещё о чём-то не забыть.
Вы бы так смогли КАЖДЫЙ ДЕНЬ?
Ну тоесть каждый день вот вы ложитесь спать ЗНАЯ что от вашего сна зависит всё при всё при всё и даже больше. И вот в процессе вашего сна происходит вот это всё — напоминания, запоминания, помогания, звонки, разговоры посторонние под ухом и всё такое. И так каждую ночь. Как вам такая жизнь?
Хотите?
Призодите работать программистом в нашу контору. Получите в полной мере!
Хотя не всё так трагично. Конечно есть люди которые способны кимарить просто постоянно. Водители такие бывают что чуть-ли не на каждом сфетофоре способны чуток вздремнуть. Ну вы знаете — им чуть бибикнуть приходится чтобы вернуть к жизни. Наверняка вы знакомы с такой ситуацией.
Ну так вот и программисты тоже такие бывают. Они всегда находятся в состоянии близком ко сну. Чуть не мешает никто — сразу «брык» и в сон. Не глубоко, только на чуть чуть. Особо серьёзных никаких химер не успеешь понагрезить, но чуть-чуть немножко слабо-туманных вполне успеешь. Вот в такой сон.
Именно так и производится большая часть программного продукта. Она производится людьми которые либо вообще не понимают что они делают, либо теми кто в силу каких-то причин просто не может погрузиться в сон достаточно глубоко. Соответственные и результаты.
Ну потому что отвлекают постоянно. Потому что БУДЯТ же бля постоянно! Потому что люди не понимают что ты же спишь и что их ебучая менеджерская «организационная» активность она на самом деле только мешает работать. Большинство людей НЕ программистов этого не понимают.
Я надеюсь что осознав аналогию работы программиста со сном может быть люди лучше поймут как надо обходиться с программистами и откуда вообще берутся хорошие программы. Поймут наконец что вот этот ебучий ЖЖ — это то что пишу и читаю ПЕРЕД СНОМ. Вот также как вы. Вы не можете спать пока неначитаетесь или пока телевизор не насмотритесь. Не можете ведь?
Вот и я не могу я работать пока неначитаюсь, ненахожусь в туалет, неначищусь зубы, ненапишусь в жевом журнальчеге, ненавотэтовсёнаделаюсь. И если мне не дать закончить это до конца, до состояния наступления глубого сна, если вмешаться в этот ритуал, то его придётся потом начинать практически заново. Точно также как вам придётся снова считать баранов если вас разбудить когда вы только что заснули.
Хотите хороших программ?
Хотите чтобы ваш муж-программист был успешен и заработал все деньги?
Хотите чтобы ваши подчинённые программисты наконец-то сделали всё как надо?
Тогда вот вам простой рецепт:
НЕ БУДИТЕ СЛИШКОМ ЧАСТО ПРОГРАММИСТА!