Архив категории “Все”
Если верить Скотту Гатри и его компании (1, 2), то одна из [используемых] философий дизайна ASP.NET MVC Framework — DRY (Don’t Repeat Yourself). Это хорошо, конечно, но одна вещь меня до сих пор не оставляла в покое, т.к., имхо, она еще недостаточно «осушена» (DRY-ed ). И эта вещь — проверка прав доступа в UI-представлениях (view).
Чему обычно «учат» люди, пишущие в своих блогах про MVC, когда дело доходит до момента, что «вот этот кусок HTML нужно показывать не всем пользователям»? В лучшем случае (из того, что видел я, если видели лучше — делитесь ) предложат сделать helper для проверки типа «является ли текущий пользователь админом». На первый взгляд кажется логичным.
Но, ведь точно такие же проверки мы уже, наверняка, прописали в виде атрибутов к нашим action-методам в наших контроллерах. И любой активный элемент пользовательского интерфейса в нашем view, такой как кнопка, ссылка, и т.д., будет связан именно с action-ом какого-либо контроллера. По сути, у нас уже описаны условия, которые уже описывают когда есть смысл рендерить ту или иную часть пользовательского интерфейса. Ведь будет глупо показывать кнопку «Удалить», если контроллер вернет ошибку, сказав, что нам не хватаем прав? И, кроме того, если мы при написании своих view снова используем язык пользователей и ролей, как это делали при описании прав на action-методы, то мы снова повторяем себя. Ладно, если таких поверок минимум, или изменений в правах не будет еще лет 100, или вместо поддержки нашего кода все будет переписано заново. Не ракеты строим, все таки Хотя, последний пункт — это уже откровенное неуважение своего же труда.
И, мне кажется, было бы логично делать проверку UserCan(<ссылка на LawsController Decline>), это ведь и читается легче: «может ли пользователь отменять новые законы?», и код во view из «если пользователь — президент, то покажи кнопку Отменить» превращается в «если пользователь может отменять новые законы, то покажи ему эту кнопку».
Имхо, самая большая проблема тут — ссылка на action-методы. Эта проблема, в общем-то, уже решалась в MVC Futures для Html.ActionLink<>, и в дополнительных t4 шаблонах, выложенных на codeplex в релизах mvc. Еще важно разделять action-ы с одинаковыми именами. Но, т.к. все это работает в рамках .NET Framework, то все наши методы либо имеют разные параметры, либо разные имена [методов], чем можно пользоваться. Так же можно пользоваться атрибутами AcceptVerbs (например, трансформировать проверку в UserCan(Post, <ссылка на LawsController Decline>)), и в этом случае, возможно, не придется париться по поводу различий в аргументах, будет достаточно лишь имени action-а, что делается простейшим t4-шаблоном.
Единственное НО — производительность. Выбрав путь MVC Futures (передача лямбда-выражения, использующего нужную функцию) мы теряем в производительности, т.к. это означает, что мы в рантайме анализируем свой код. Выбрав путь ссылок на имена action-методов мы можем сделать преобразование вызовов проверки UserCan компилятором в проверки типа IsAdmin, сохранив производительность в рантайме, но скорее всего потеряем возможность автоматического изменения всех ссылок при переименовании action-методов (так ли это важно, если у нас это редкость, да и на момент компиляции нас предупредят об изменениях?).
Естественно, UserCan не решит нам все проблемы, особенно когда появляются проверки на уровне записей, и, например, нужно проверять права пользователя не на часть пользовательского интерфейса, а его права на конкретную запись, конкретный объект. Но это уже совсем другая история.
Tags: MVC, интуитивность ПО, программирование
View Comments
Раньше я пользовался ноутбуком, там сейчас почти у всех есть bluetooth. А теперь у меня Acer Revo, у которого bluetooth нет. А я уже успел купить bluetooth мышку и даже привыкнуть к ней. Помня, как все просто со встроенными bluetooth адаптерами я пошел и не глядя купил первый попавшийся компактный bluetooth донгл, им оказался ASUS BT21 mini. Но, как оказалось, драйвер от АСУСа имеет кучу глюков, например, после «засыпания» мышки про нее можно забыть — обратно она не просыпается. Поискав немного яндексом выяснил, что у кого-то этот донгл со стандартными драйверами вообще не работает.
Однако, погуглив я нашел интересное упоминание о том, что BT21 сделан на основе чипа Broadcom 2045, и только лицензионная политика на драйвера USB-девайсов не позволяет АСУСу отдать такой идентификатор устройства, чтобы автоматом установились драйвера broadcom, а broadcom ни за что не добавит идентификаторы АСУС в свой драйвер. Мне их лицензионные терки не интересны, мне нужно, чтобы донгл работал.
Решение проблемы с драйвером достаточно простое: попадаем в диспетчер устройств, кликаем USB-донгл правой кнопкой, выбираем «обновить драйвер», выбираем ручной выбор драйвера и в списке ищем broadcom 2045+EDR. После выбора драйвера для девайса рекомендуется выполнить обновление драйверов, это поможет работать бóльшему числу bluetooth-девайсов (например, bluetooth-гарнитура без этого вполне может не заработать).
Если вдруг в списке предустановленных драйверов нет 2045, то стоит попытаться обновить драйвера без ручного выбора, оно, конечно, не обновит ничего, но после этого обычно появляются предустановленные драйвера на 2045
Tags: интуитивность ПО
View Comments
При переезде сайта на новый домен есть две рекомендации: сделать серверный (301) редирект со страниц старого сайта на новый, и прописать правильный robots.txt. Об этом написано, например, в самом Яндексе: тут и тут, ну и в основном в рекомендациях упоминаются как одновременное действие. При этом, говорят, что все может затянуться от 2-х недель до 2-х месяцев.
В конце июля мне приспичило выпонить такой перенос, все было сделано как я и описал выше. Но в середине октября (2.5 месяца) после очередного апдейта тИЦ в выдаче Яндекса до сих пор красовался старый домен, при этом в индексе осталась лишь одна главная страница, да еще тИЦ старого домена был снижен, а новый был с нулевым тИЦ. Посещаемость, естественно стала много меньше. При этом гугл выполнил перенос очень хорошо: сначала в выдаче были оба домена, а через пару месяцев старый вовсе пропал из выдачи, уступив место новому.
Кроме того, меня сильно волновал вопрос, что делать с упоминанием в Яндекс.Каталоге старого домена: удалят ее, отредактируют сами, или же нужно написть им, чтобы поменяли. На мой вопрос в саппорт Яндекса, в котором я написал, что сделал и редирект и robots.txt более 2-х месяцев назад, пришел следующий ответ:
Для того, чтобы изменить url сайта в Каталоге есть два пути: быстрый и медленный.
1) Быстрый: поставить серверный редирект со старого адреса на новый и сообщить нам об этом, мы проверим преемственность сайтов и бесплатно перенесем опубликованное в Каталоге описание сайта на новый адрес (с коррекцией информации по необходимости). Процесс переноса занимает несколько дней.
Недостаток этого пути – потеря тИЦ, накопленного на старом сайте.
2) Медленный: сделать сайты полными зеркалами с правильным robots.txt, который может выглядеть примерно так:
User-agent: Yandex
Disallow:
Host: url_нового_сайта
Тогда после склейки тИЦ просуммируется, адрес сайта в Каталоге при этом заменится автоматически. Недостаток – процесс может затянуться на 2 месяца.
Другими словами, эти два пункта — разные способы с разными результатами. И сделав полный редирект я наткнулся на ошибку индексации (Яндекс страницы с редиректом считает ошибочными), и потерял тИЦ. Однако, заявленные 2 месяца уже прошли давно, да и сообщить им я уже сообщил, а результата нет никакого. Поэтому я им ответил, что все это было сделано два с половиной месяца назад, и на всякий случай убрал 301 редирект, вдруг тИЦ вернется.
Фокус с возвращением тИЦ не прошел, и сегодня (еще 2 месяца) при очередном апдейте тИЦ на новый домен перенесли уже меньший тИЦ, но все-таки его перенесли. В выдаче старый домен был заменен на новый где-то в начале декабря, практически одновременно с изменением записи в Я.Каталоге. Итого на все это ушло почти 5 месяцев.
В новых рекомендациях по переносу сайтов на новый домен, кстати, рекомендуют сначала сделать второй способ (для Яндекса), потом первый (для Гугла).
Tags: домены, сео, яндекс
View Comments
Написал: Алексей Волков в категорию Все, Личное
Очередь по предварительной записи на техосмотр занята до конца декабря. Однако, приехав в день «живой очереди» через час после открытия, вполне реально оказаться единственным желающим пройти ТО. Видимо, все так сильно полюбили предварительную запись, что никто уже не едет стоять в «живой очереди».
А еще там тоже люди работают: аптечка уже 2 месяца как не годная, но об этом мне сказали шепотом после получения нового талона. Все равно следующим летом новую покупать.
Tags: дневник, челябинск
View Comments
Готовлюсь к установке Windows 7. Но, т.к. у меня нет дома ни одного работающего DVD-привода, то устанавливать придется с USB. В инете куча руководств по шаманству с diskpart, которые превращают usb-флешку в загрузочную флешку с установщиком windows 7, но даже при этом мне пришлось два дня плясать вокруг компьютера, чтобы заставить его загрузиться с такой флешки. Уверенности добавлял только успешный опыт загрузки с linux-загрузчика.
Вот только, как оказалось, дело было вовсе не в том, что там был linux, а тут windows, а в том, что там было 512Мб, а тут 16Гб. Большие флешки в BIOS-ах на двух моих компьютерах оказались в разделе Hard drive, а я пытался загрузиться с Removable device, совсем отключив загрузку с Hard drive, т.к. иначе грузилась установленная винда. Я даже переводил вручную USB-контроллер в режим принудительного USB-Floppy, т.к. иначе в списке Removable devices не было флешки, но после этого я получал ошибку «Invalid partition table». Никак не хватало интуиции заглянуть в список жестких дисков и именно там менять приоритет, ведь какой из флешки Hard drive, а? Флешка — самый настоящий Removable device.
Кстати, утилита Windows 7 USB/DVD Download Tool не захотела принимать ISO-образ моего Windows 7 Upgrade disk, высланный для моего Revo, в котором не предусмотрен DVD-привод, она убеждала меня, что это не ISO-образ. Либо Nero и DAEMON Tools создают кривой ISO, либо проверка на ISO-шность включает еще и проверку «тот ли диск копируют» и Upgrade disk окалася «не тот», либо что-то еще. Черт его знает, тем более есть способ с diskpart.
Tags: дневник, интуитивность ПО
View Comments
Написал: Алексей Волков в категорию Все, Личное
Впереди — второй
Tags: видео, челябинск
View Comments
Написал: Алексей Волков в категорию Все, Личное
Давно хотел себе bluetooth гарнитуру, которая способна помнить сразу два девайса: подключить ее к компьютеру и телефону, и больше не париться с переподключением, если захотелось поговорить по Skype (подключить к компу), а потом куда-то уехать (быстро перенастроить на телефон). И вот: купил себе новую bluetooth гарнитуру (Jabra BT530). Я давно смотрел на модель 8040 и подобные, но все что-то мне не нравилось в этих гарнитурах. А тут смотрю — и все мне в ней нравится. Даже кнопка включения больше не совмещена с кнопкой ответа, и вполне удобна. У старой эти кнопки совмещены, от чего гарнитура в кармане куртки сама включается и без моего ведома начинает звонить по последнему номеру (мне даже страшно представить, сколько моих разговоров было подслушано за последние 3 года, которые я пользуюсь гарнитурой… никому так не звонил? ). Ну а про всякие навороты я уж вообще молчу: обязательно протестирую работу нового шумодава, умной подстройки громкости и всего остальное.
Заодно выяснил, как работает гарантия и возврат товара при покупке в интернет-магазине Связного в большой деревне под названием «Челябинск». Курьер приехал вечером, да еще во время оформления заказа мою просьбу не приезжать с 5 до 6 никто не записал, и она объявилась ровно в 5:15, так что пришлось ей приехать еще раз. А раз курьер так напрягся по поводу моего заказа, я, добрый человек, решил ее пожалеть, не стал досконально проверять работоспособность, просто включил, чтобы посмотреть, включится ли. Ну и через пол часа пожалел: при звонке я ничего не слышал (профиль headset), хотя и мог послушать музыку (a2dp). На чеке телефон 8-800-… и есть Челябинский адрес. Утром еще раз протестировал, позвонил по этому телефону, объяснил, и получил удивительный ответ: «звоните в Москву в Jabra, решайте с ними этот вопрос». А время 9 утра, врядли Челябинские уже открылись, так что я туда не поехал, пошел поработать немного. Оттуда позвонил в Москву в Jabra, где тоже очень удивились, что меня сразу к ним послали, но проконсультировали как проверить гарнитуру, сделали такое же заключение — «что-то с гарнитурой не так», выслали мне на е-мейл форму, которую заполнить, чтобы осуществить обмен. Но это ведь сложно, отправлять по почте: 2 недели туда, 2 обратно. Вечером еду по местному адресу, указанному в чеке, еще раз объясняю ситуацию, спрашиваю какие у меня есть варианты. И приятно удивляюсь, когда они сразу предлогают вернуть деньги. Даже в магазинах бывает с трудом соглашаются на возврат денег, уговаривают взять что-нибудь другое, а тут сами предложили. Я, конечно же, предложил просто поменять ее, гарнитуру-то я все равно хотел обновить.
Не такая уж и деревня у нас тут, в Челябинске
UPD: После написаня отзыва о магазине, мне пришел ответ: «разговоры по ситуации прослушаны, подтвердилась вина операторов, с ними проведена работа, надеемся, что в будущем все будет отлично».
Tags: дневник
View Comments
Написал: Алексей Волков в категорию Все, Личное
Всем, кто читает мой блог, — подарок на новый год 
Введи промо-код 792486 в интернет-магазине «связной» при оформлении заказа, и получи скидку 3%. Действует до 9 января 2010.
Мелочь, но, если кто-то хотел что-то там купить, может быть приятно
UPD: если что, 495264 действует до 27 января.
View Comments
Написал: Алексей Волков в категорию Все, Личное
Нежелание и неумение сказать «да, я был не прав» — в первую очередь неуважение к другим. Человек, который не умеет открыто признавать свои ошибки, никогда не сможет считаться человеком уважающим других, так как он — эгоист.
Tags: тз
View Comments
Я как-то уже писал по поводу удивления от анонса ASP.NET Dynamic Data (1, 2), который реализует идеологию, очень схожую с одной из наших разработок. И как-то с тех пор я особо не изучал этот вопрос, чему способствовал и тот факт, что к моменту анонса Dynamic Data у нас уже была рабочая версия HOLMS, да и первый релиз dynamic data оказался далеко не самым удобным решением с точки зрения реальных разработок для реальных заказчиков (хотя, ценных идей там достаточно и без этого). Но вот недавно мне удалось найти чуть больше информации по этому поводу.
Оказывается, этому всему есть вполне доступный термин: Model-driven development/engineering (MDD), или по русски — разработка, управляемая моделями.
Небольшое отступление. Мне такой перевод этого термина не очень нравится: как будто бы нет больше руководителей, нет заказчиков, а есть только модели, и они всем управляют. Матрица прямо какая-то Вариант «разработка на основе моделей» тоже не подходит: мы и так обычно моделируем систему, а потом разрабатываем, не понятны различия. Слово «driven» тут скорее нужно было перевести синонимом значения «приводимый в движение». Может быть, «разработка через моделирование»? Или «разработка средствами моделирования»? Указавая на тот факт, что первоначально создается модель, и на основе нее «все» и работает. «Все» в кавычках, т.к. в реальных задачах 100% конечно же так не сделать, но ускорить раз в 5 50-70% работ — вполне реально в ряде задач, главное правильно применить. А в остальных 30-50% — еще подумать По крайней мере с нынешними средствами.
Есть другие предложения по литературному переводу?
Вернемся обратно к MDD. Самая известная инициатива, связанная с этим подходом, по версии википедии — инициатива Object Management Group, которая даже зарегистрировала товарный знак Model-Driven Architecture, и хочет стандартизировать подход, сделав в светлом будущем возможным разработку ПО на UML То, что этим занимается OMG — неудивительно, ведь MDD-подход основан на объектно-ориентированном программировании. А во что упоминают вскользь, так это то, что к OMG в сентябре 2008 года присоединилась и Microsoft. В варианте MS, по сути, по картинкам в дизайнере БД (как и в UML) делается приложение (или его часть), как и у OMG. Нету только реализации активностей и прочих прелестей, т.е. программировать все еще надо.
Но почему MS подключилась к OMG позже официального выхода Framework 3.5 SP1 (август 2008), в релизе которого и были запущены такие вещи как Dynamic Data и MVC Framework? И много позже анонса всего этого (декабрь 2007), и, естественно, много позже, чем они начали над эти работать? Просто не были в курсе про инициативу OMG, или же осознанно отложили?
PS. Вот еще интересная ссылка: nreco.
UPD 22.06.2010: в продолжении темы model-driven development предлагаю ознакомиться с идеей ActionScheme-driven Development
Tags: asp, dev, mdd, microsoft
View Comments
|