Pull to refresh
55
Andrew @vanfukovread⁠-⁠only

User

Send message

Топ-5 самых впечатляющих книг, которые должен прочесть каждый разработчик ПО

Reading time3 min
Views382K
Не так давно промелькнула ссылка на достаточно свежее (осень 2011) англоязычное голосование со скромным названием "самая впечатляющая книга, которую должен прочесть каждый разработчик программного обеспечения" и описанием:

Если бы вы могли вернуться в прошлое, к самому началу своей карьеры разработчика и сказать самому себе: «прочитай именно эту книгу», в самой начале своей карьеры разработчика, какую бы книгу вы рекомендовали?

Тема перевода зарубежной профессиональной IT-литературы стоит достаточно остро, многие любят читать книги в оригинале по различным причинам, таким так время выхода русского перевода с запозданием на годы, недостаточный профессионализм переводчика и соответствующая потеря тонкостей и авторского стиля и т.д.

Однако в данном небольшом посте я возьму на себя смелость перечислить ТОП-5 тех самых книг, победивших в голосовании, переведенных на русский язык. И дать небольшие комментарии, ведь книги действительно этого достойны. Да, лично я бы поменял некоторые места, однако положимся на «мнение зала» ресурса Stack Overflow.
Читать дальше →

Разбираем KCaptcha, собираем заново… под .NET

Reading time4 min
Views3.1K
KCaptcha – довольно распространенная PHP библиотека для генерации CAPTCHA. Я довольно давно знаком с этим проектом, и так же давно меня не покидает одна мысль: «как там внутри все работает, как оно все устроено»? Да, бывает такое: мозг выделяет что-то, на первый взгляд крайне неприметное и непритязательное, но затем долгое время не упускает это что-то из головы. Так было с программированием, когда я впервые увидел кусочек кода на JavaScript, так стало и с библиотекой от Сергея Круглова, которую я и решил изучить.

Но обо всем по порядку. Не буду скрывать, разобрать и понять KCaptcha я пытался много раз. Мои попытки заканчивались неудачей. Этому способствовали, и минимум свободного времени, и очень малое количество комментариев в коде, и проблемы с мотивацией (она держалась только на интересе), но главным образом, конечно, отсутствие хоть какого-то опыта за плечами.

Шло время, я то брался за KCaptcha, то опять бросал. Но раз за разом, по маленьким шажочкам приходило понимание кода. Общая картина постепенно вырисовывалась. Возможно, кому-то это покажется смешным: подумаешь, генерация случайного ключа плюс вывод на изображение! Мне так не казалось. Сейчас я смотрю на данные алгоритмы немного свысока, но память о попытках понять, казолось бы запутанный и временами не поддающийся осмыслению код, не дает возможности посмеяться над собой.

А зачем вообще ковыряться в коде? Подключил, и используй себе на здоровье! Благо, библиотека позволяет легко абстрагироваться от ненужных деталей. Этот вопрос я задавал и себе, пока мне не пришлось работать над одним ASP.NET проектом. Тогда возникла необходимость в защите некоторых страниц от спаммеров. Думаю, не нужно объяснять, что самый простой и распространенный способ защититься от ботов это каптча.

Раньше я не использовал в работе ничего кроме PHP и, рузумеется, никогда не видел CAPTCHA-решений под .NET. Быстрый поиск в гугле ничего кроме оберток ReCaptcha на C# не дал. Более глубокий анализ хостингов для opensource проктов привел к некоторым результатам, но то были давно заброшенные, незаконченные поделки. Они даже отдаленно не напоминали знакомую и уже частично изученную KCaptcha.

За все предыдущее врямя я немножко поднабрался опыта, да и с мотивацией теперь был полный порядок. Решено! Мне предстоит перенос KCaptcha с PHP на .NET.
Читать дальше →

Исполнение куска кода от имени конкретного пользователя

Reading time4 min
Views2.9K

Постановка задачи



Представим следующую ситуацию, есть каталог A, к которому имеет доступ только пользователь userA, есть каталог B, соответственно доступ к нему имеет только пользователь userB, требуется скопировать файлы из каталога A в каталог B, учитывая что программа может быть запущена пользователями userC, userD, userF,… и т.д.

Набросок решения



В качестве одного из способов решения можно использовать следующую схему:
программа запускается от имени любого пользователя, затем авторизуется под пользователем userA, читает файл в память, возвращается к начальному пользователю, авторизуется под пользователем userB, пишет файл в конечный каталог, возвращается к начальному пользователю. При больших размерах файлов можно придумать разбиение на блоки, но это уже не относится к данной задаче.

Читать дальше →

Моддер выжал из Skyrim дополнительные 40% производительности

Reading time1 min
Views3.3K
В треде форума он рассказывает, что Бетезда, по ходу, не использует оптимизирующий компилятор.

Его оптимизации достаточно просты и покрывают примерно 1% от всего кода движка. В основном это ручной инлайнинг геттеров, переписывание некоторых кусков кода с x87 на SSE2. Были пропатчены только три крупные функции. Моддер утверждает, что если бы Бетезда использовала оптимизирующий компилятор и другую библиотеку для мат. вычислений прирост в скорости составил бы 100%.

Сам мод можно скачать здесь: forums.bethsoft.com/topic/1321575-rel-tesv-acceleration-layer

Тред с комментариями здесь: forums.bethsoft.com/topic/1321675-how-can-skyrim-be-so-unoptimized-modders-do-better-job-than-bethesda

Обещают 20-30% прирост FPS в таких местах как Маркат и Уайтран (крупные города).

Быстрая server side интеграция ASP.NET + Facebook

Reading time4 min
Views4.3K
Так вышло, что мне пришлось столкнуться с интеграцией с Facebook-ом на платформе ASP.NET. Интеграция нужна была server-side, поэтому решено было использовать Facebook C# SDK.
Как оказалось процесс довольно таки не сложный, но важно понять суть и принцип.
Читать дальше →

Работа с EXIF геотегами в C#

Reading time5 min
Views19K
После того как я закончил программу для геотегинга, появилась мысль написать данную статью – дабы поменьше людей наступало на те же грабли, так как толковой информации по данным вопросам не так уж и много.
Итак, я не собираюсь рассказывать, что такое геотегинг или EXIF, об этом можно и в Википедии почитать. А вот как сделать программку на C#, которая бы считывала и записывала данные в EXIF я и собираюсь рассказать.
Читать дальше →

Полупроводниковая электроника

Reading time30 min
Views384K


Полупроводниковая электроника существенно изменила мир. Многие вещи, которые долгое время не сходили со страниц произведений фантастов стали возможны. Чтобы знать, как работают и чем уникальны полупроводниковые приборы, необходимо понимание различных физических процессов, протекающих внутри.



В статье разобраны принципы работы основных полупроводниковых устройств. Описание функционирования изложено с позиции физики. Статья содержит вводное описание терминов, необходимых для понимания материала широкому кругу читателей.





Иллюстраций: 34, символов: 51 609.



Читать дальше →

Практический эпизод борьбы с DDoS

Reading time4 min
Views9.2K
Один юноша очень любил ругаться на тематическом ресурсе. И за это его регулярно банили. А один раз взяли, да и не разбанили.

Обиделся юноша, и решил отомстить. Поднакопил денег, взял да и заказал DDoS ресурса. Благо это в РФ не уголовно, к сожалению, наказуемое деяние.

DDoS, на который юноше удалось накопить, заключался в отсылке армией ботов одинаковых HTTP-запросов.

Как водится, для придирчивых админов не нашлось удовлетворительно выглядящих решений, которые бы просто читали HTTP-лог и выдавали наружу те адреса, которые надо банить.
Поэтому пришлось построить свой лунапарк, с этим самым и этими самыми. Камрад metakey справился написать собственно логику отнесения айпи в бан, а ваш покорный слуга — настроить всю оставшуюся обвязку.

Тем, кто (предпо)читает Хемингуэя в подлиннике, можно сразу отправляться сюда. Там и код тоже можно найти.

Читать дальше →

Кодоребус или паттерн «стратегия» на .Net 4.0

Reading time3 min
Views2.6K
Недавно при работе над одним проектом у нас родился интересный код. Мы сразу же принялись тестировать наших коллег на смекалку, с просьбой объяснить что это, как работает и что делает. Даже опытных разработчиков этот код вгоняет в ступор (после пары минут истерического смеха). Итак, встречаем:

    Action<Action> action = (Action action) => { action(); };

Прежде чем заглянуть под хабракат, попробуйте ответить на несколько вопросов (сделаем вид, что заголовок поста Вы не видели):
  • На каком языке написан этот кусок кода?
  • Верен ли он синтаксически? Скомпилируется ли он?
  • Имеет ли данный код смысл? Что он делает?
  • Зачем такой код мог быть написан?
  • Как можно улучшить этот код? (Как бы его написали Вы?)
  • Приведите реальные варианты использования этого кода.
  • Какие потенциальные проблемы могут возникнуть при его применении?

Ответили? Тогда ныряем под кат за предысторией и разъяснениями.
Читать дальше →

Lazy<T>: конструирование объектов по требованию в .NET 4.0

Reading time2 min
Views16K
Мне нравится, когда я нахожу новые части функциональности в .NET framework. Это все те большие интересности, которые получают всю любовь и признание на конференциях и в журналах.

Lazy<T> как раз один из таких.
Читать дальше →

Каррирование и частичное применение функции

Reading time3 min
Views28K
Когда я впервые услышал термин Каррирование, я сразу же представил себе вкусные тайскую и индийскую кухни.  К моему удивлению, я обнаружил, что разговор шел не о прекрасных специях, а о преобразовании функции, принимающей n аргументов в функцию, которая принимает один аргумент и возвращает каррированую функцию, которая принимает n — 1 аргументов. Где бы это могло быть полезным?
Читать дальше →

Возвращаясь к конструкции foreach с Duck Typing для LINQ

Reading time6 min
Views2.9K
Обещаю, что в этот раз будет короткая статья (относительно). Все вы знаете языковую конструкцию foreach в C#, не так ли? Но подумайте дважды прежде чем сказать как именно работает следующий код:
  1. foreach (int x in src)
  2. {
  3.   // Do something with x.
  4. }
* This source code was highlighted with Source Code Highlighter.

Уже знаете ответ? Позвольте мне разочаровать вас: если у вас только один ответ, то вы ошибаетесь. Нет единственного ответа на поставленный вопрос, поскольку вы должны знать больше о типе переменной src чтобы принять окончательное решение насчет того, как вышеприведенный код работает…
Читать дальше →

В каждом .net приложении резервируется память для трех исключений

Reading time2 min
Views4K
На выходных заходил я к своему другу new_s в гости и он показал мне интересную вещь. Ему по работе нужно было анализировать дамп памяти .net приложения, где он искал утечки памяти и другое аномальное поведение и показал мне, что при старте любого .net приложения окружение резервирует память для трех исключений:
  • ExecutionEngineException
  • StackOverflowException
  • OutOfMemoryException

И это нормальное поведение. Почему?
Читайте дальше...

Считаем хэши файлов любого размера прямо в браузере

Reading time1 min
Views6.9K
В сети очень много сайтов для подсчета хэшей (MD5, SHA1, SHA2) файлов, однако, все сервисы, что я смог найти, имеют один и тот же недостаток: размер файла ограничен. Также необходимо сначала загрузить файл на сервер, чтобы получить результат вычислений. Это очень неудобно.

Поэтому я решил создать небольшой сервис MD5 File, расчет в котором будет происходить непосредственно в браузере пользователя. Нет необходимости загружать файлы на сервер (экономим трафик и время) и появляется возможность работать с файлами любого размера.

Картинка и немного информации под катом
Читать дальше →

Opera Software. Современная разработка

Reading time1 min
Views3.6K
Мобильный Интернет уверенно завоевывает свою нишу на рынке, открывая перед разработчиками все большие возможности. Однако, сайты, которые создавались для мобильных устройств, все еще оставляют желать лучшего.

— Стоит ли запускать отдельную версию сайта для телефонов или можно обойтись без нее?
— Кому в первую очередь нужны мобильные сайты? Как они должны выглядеть?
— Можно ли обойтись без мобильных приложений?

Наш веб-евангелист Вадим Макеев рассказал про новое поколение веб-страниц, о том как не надо делать мобильные версии сайтов и о браузерах будущего в эфире онлайновой телепрограммы MegaIndex.TV

Повторная генерация исключений

Reading time7 min
Views16K
Обработка исключений появилась в mainstream языках программирования вот уже более трех десятилетий назад, но сегодня все еще можно встретить разработчиков, которые боятся их использовать. Некоторые считают, что генерация исключений в конструкторе повредит их хрупкой карме и их настигнет кара в виде поддержки кода двадцатилетней давности, написанного стадом безумных индусов. Некоторые все еще застряли в эпохе языка С и даже в языке C# интенсивно используют коды возврата в виде магических чисел или даже строк, считая, что исключения придумали трусы, а настоящие самураи могут обойтись и без них. (Хотя мы-то с вами знаем, что настоящие самураи следуют “Принципу самурая” и никаких кодов возврата не используют).

Дополнительную сложность добавляют конкретные платформы и языки программирования. Сегодня на собеседовании C# разработчика, когда речь заходит об обработке исключений, обязательно прозвучит вопрос: “А в чем отличие “проброса” исключения с помощью конструкций throw; и throw ex;?”. И хотя, это страшный баян и большинство разработчиков давно знают правильный ответ на этот вопрос, в реальном коде встретить “некошерный” вариант очень даже просто.

Особенность платформы .NET заключается в том, что в ней не существует (а точнее, как мы вскоре увидим – не существовало) способа перехвата исключения в одном месте и последующего его генерирования в другом. Если разработчик бизнес-приложения или библиотеки сталкивался с такой задачей, то решалась она очень простым способом: исходное исключение заворачивалось в другой объект в виде вложенного исключения и пробрасывалось уже новое исключение.

Читать дальше →

Бюджетный роутер Dlink dir-615, альтернативная прошивка DD-WRT и IPTV

Reading time5 min
Views421K

Интернет пришел и в наш город!


Интернет провайдеры в Воронеже последние 2 года развиваются и плодятся с огромной скоростью, в связи с чем приходится менять и апгрейдить и своё клиентское интернет-оборудование. Долгое время у меня в качестве доступа к сети использовался ADSL2+ модем и недорогой Wi-Fi роутер, но мой провайдер решил начать параллельно с доступом по телефонной линии предоставлять возможность подключения и по Ethernet или как его называет Домолинк — Fttx. Вместе с этим также стала доступна бесплатная услуга Открытое ТВ, представляющая из себя ничто иное как IPTV по протоколу UDP. Всё это и подтолкнуло меня на замену простенького Level ONE WBR-3408 на что-то более функциональное. К моему удивлению оказалось, что функциональность не всегда идёт рука об руку с высокой ценой. О том, как и почему я выбрал именно Dlink dir-615 можно узнать под катом.

image
Читать дальше →

Переделка роутера D-link DIR-620 в Zyxel Keenetic или делаем из г. конфетку

Reading time4 min
Views603K
Что такое D-link DIR-620 и что такое Zyxel Keenetic, и для чего нужно переделывать одно в другое?
Достаточно почитать тему по DIR-620 на хоботе или на родном сайте D-link, чтобы понять что к чему. Имея неплохую элементную базу (чип Ralink 3052 2T2R на 300Мбит, 32Мб RAM и 8Мб Flash, USB порт), роутер подкачал в программном обеспечении — большинство гневных отзывов относится именно к прошивке. Хотя, чего ещё желать от устройства за 54$, позиционируемого для бюджетного сектора. Однако, Zyxel Keenetic собран на той же элементной базе, но отличается как по цене 105$, так и по программному оснащению. Заявлена поддержка USB накопителей, 3G и 4G модемов, торрент-клиент transmission прямо в роутере, и всё это реально работает. А можно ли из DIR-620 сделать Keenetic? Оказалось, что можно.



Переделка состоит из двух частей: прошивки и аппаратной доработки.
Для прошивки понадобится подключиться к последовательному порту внутри роутера. То есть, в любом случае, устройство придётся вскрыть, потеряв при этом гарантию.
Однако, забегая вперед скажу, что полученный результат того стоит.

Дополнение от 25.09.2011
Справедливости ради, стоит отметить, что пользователем deadc0de разработан другой метод перепрошивки в keenetic без перепайки и вскрытия устройства, который заключается в заливке модифицированной прошивки. Поэтому метод, описываемый в этой статье, стал неактуальным. Однако, его можно рассматривать как альтернативный, или аварийный, когда устройство перестало быть доступным по сети.

Читать дальше →

Information

Rating
Does not participate
Location
Украина
Date of birth
Registered
Activity