Search
Write a publication
Pull to refresh
3
0
Алексей @ParaPilot

User

Send message

Полностью анонимный блог

Reading time2 min
Views65K
image
В качестве развлечения, а также упражнения в безопасности и анонимности в наше время, автор блога Untraceable представил свой блог, который, как он считает, абсолютно анонимный — такой, что по нему нельзя вычислить автора блога.

Итак, как создать анонимный блог.
Читать дальше →

Что быстрее? foreach vs. List.ForEach vs. for-loop

Reading time4 min
Views49K
Сегодня (прим. переводчика: т.е. 6 лет назад) я перебирал список List, используя конструкцию foreach, и чувствуя небольшое самодовольство, осознавая насколько это производительнее, того что было бы, попытайся я использовать ArrayList. Благодаря чуду Generic компилятор C# аккуратно избегает многочисленные упаковочные операции с помощью экземпляров System.Collections.Generic.IEnumerator вместо старых System.Collections.IEnumerator. Тогда я подумал: "действительно ли это самый быстрый способ?" По результатам расследования, получается, что, нет, это не самый быстрый способ.
Читать дальше →

Распараллеливаем процессы для ускорения вычислений и выполнения заданий в Linux

Reading time11 min
Views82K


Почти все персональные компьютеры, выпущенные за последние несколько лет, обладают как минимум двухъядерным процессором. Если у тебя, читатель, не очень старый комп или не какой-нибудь бюджетный ноутбук, то, вероятнее всего, ты обладатель многопроцессорной системы. А если еще любишь играть в игры, то тебе доступно около сотни GPU-ядер. Однако львиную долю времени вся эта мощь пылится без дела. Попробуем это исправить.
Подробности

Список оптимизаций рендеринга DOM, реализуемых на уровне Javascript фреймворка

Reading time13 min
Views26K
С октября 2009 года я занимаюсь разработкой приложения для поиска и прослушивания музыки. Я стремлюсь организовать возможность быстрого взаимодействия пользователя с интерфейсом, и в качестве одного из средств ускорения взаимодействия использую различные способы для быстрой отрисовки страниц.

Предлагаю ознакомиться со способами, реализованными мной в приложении на системном уровне:

  • Использование CSS и переключение классов вместо перестроения DOM дерева
  • Повсемнестное кеширование выборок элементов ($('div.active_part span.highlighter')), атомарные операции по изменению (вместо всеобщей перерисовки, вместо переделывания больших участков DOM дерева)
  • Минимизации чтений DOM во время записи изменений состояний
  • Кеширование размеров и расположения элементов (это спасает от излишнего вычисления при считывании этих значений при наличии других изменений: чтение во время изменения множества частей дерева крайне негативно сказывается на производительности)
  • Аккуратное, не затягивающееся накопление изменений, необходимых произвести в DOM
  • Прикрепление частей изменяющихся коллекций единовременно (когда, например, в середину списка вставляется 3 новых элемента; createDocumentFragment) в конкретное место (after, before) вместо открепления всей коллекции от DOM и повторного прикрепления (и вместо того, чтобы перерисовывать весь список)
  • Прогрессивный асинхронный рендеринг: картина прорисовывается сразу с небольшим количеством деталей, затем деталей появляется всё больше
  • Клонирование нодов (как часть шаблонизации)
  • Кеширование и использование кеша результатов парсинга DOM шаблонов


image image
изображения из части с заголовком «Прикрепление частей изменяющихся коллекций единовременно...»
Читать дальше →

TorrentMonitor и снова здравствуйте

Reading time4 min
Views23K
Полтора года назад я уже писал здесь о своей разработке TorrentMonitor. Кто-то может быть уже читал и давно пользуется, а кто-то может быть даже и не слышал, поэтому хочу поведать вам о ней ещё раз, тем более что полтора года я не сидел сложа руки. Это автоматическая система слежения за торрент-трекерами, которая автоматизирует процесс скачивания торрент-файлов.


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

UrtheCast установлена

Reading time1 min
Views20K
Проект UrtheCast плавно подходит к запуску. Сегодня 2 российских космонавта — Олег Котов и Сергей Рязанский установили камеру на борт МКС.
image
По этой ссылке вы можете посмотреть как происходил процесс установки камеры.
Читать дальше →

Взгляд рекламщика на веб-дизайн: основы создания нетипичного дизайна для типичного сайта

Reading time9 min
Views32K
Введение

«Нужно больше золота»
Непризнанный экономический гений


Всё началось с вот этого разговора в комментах. Если вкратце, содержание можно свести к следующему: заказчик хочет «красиво», дизайнер хочет сделать красиво (без кавычек); заказчик фонтанирует идеями, зачастую вредными для юзабилити и продаж, дизайнер знает, как действовать в рамках типовых решений по юзабилити и стилю.

И тут на сцене появляется рекламщик/продажник. У него тоже есть свое мнение. И мнение это такое: к лешему красоту истинную и крикливый кич, выбросите на помойку споры по поводу идей; сайт должен работать, приносить прибыль: инициировать продажи, служить для брендинга, привлекать звонки — то, что требуется заказчику. Нужно исследовать целевую аудиторию — и выяснить, какой дизайн поможет добиться от неё нужной реакции. И создать с нуля именно то, что требуется для достижения цели. Типовые решения не годятся — они не продуманы для конкретного сочетания заказчик/целевуха. Хуже того, они примелькались.

«Хорошо», — согласятся с ним. Даже здорово. Но как сделать оригинальное решение там, где оригинальности быть в принципе не может (приведу пример из той дискуссии — «интернет-магазин по продаже букетов для новобрачных»)? И как понять, что именно хочет аудитория?

Полный ответ на этот вопрос занял бы немало страниц. Автор попытается изложить определенные основы того, в каком направлении двигаться, опрашивая заказчика и изучая ЦА будущего сайта, и как потом использовать эти данные для создания такого дизайна, который сам по себе служил бы поставленной задаче — то есть, приносил бы прибыль тем или иным образом. При этом автор не планирует касаться конкретики и вдаваться в частности — они слишком многочисленны для короткой статьи.

Предупреждение. Под катом — длинный текст без картинок.
Предупреждение 2. Честно говоря, автор не подозревал, что это — не прописные истины. Поэтому не надейтесь найти что-то новое в тексте.

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

Размер имеет значение. Выбор среднеформатного фотоаппарата

Reading time5 min
Views68K
Я думаю многие тут увлекаются фотографией. Степень увлечения бывает разной, а понятие фотограф вообще размыто и не определено. Разные цели, разные бюджеты фотографов и много других отличающих факторов. Кто-то фигачит луки на iphone, а кто-то мучается с громадными пластинами большого формата. Но всех этих людей объединяет интерес к фотографии, а у некоторых может даже и любовь, и даже бывает взаимная. Поэтому решил рассказать о фотоаппарате, который нечасто можно увидеть, заодно поделиться опытом перехода на новый формат.

Почему решил купить


В жизни любого фотографа наступает момент, когда сердце требует чего-то теплого и лампового. Многим хватает дедушкиного Зенита, а кто-то, ведомый неизвестным чувством «надоивсё», стремится перейти на более специфический уровень — рвануть к среднему формату. Почти так же было и со мной, только в промежутке я успел поснимать на 135 пленку чудесным фотоаппаратом Мир. В этот момент я понял, что не люблю дальномеры, или не умею их готовить.

Хотя была идея покупки пленочного Canon, но уже хотелось чего-то нестандартного. «ДАЙТЕ БОЛЬШЕ!!!», — вот именно так и появилось желание покупки среднего формата. Покупка СФ-цифры не то что отпала, она даже не предполагалась, зная замечательный уровень цен.



А вот дальше началась настоящая внутренняя борьба. СФ я покупал больше года. За всё это время у меня было две стадии желания:
• просто хочу СФ
• я знаю, что за СФ я хочу
Читать дальше →

Война с дизайнером: откуда берётся хороший дизайн

Reading time5 min
Views43K
Вы более 9000 раз заказывали дизайн, и ни разу не разочаровались? Творческие люди понимают вас с полуслова, а результат их работы непременно радует ваш глаз и кошелек? Может быть, вы дизайнер-профессионал, отточивший мастерство общения с закачиком до мастерского уровня?

Тогда этот пост не для вас. Вы и так все знаете.

Но если письма от дизайнера, который занимается вашим проектом, начинаются заголовком «правки ver_3_b_часть II», а общаться с каждым днем все сложнее — попробуйте почитать. Может быть, здесь найдется полезный совет, который облегчит вам жизнь и сэкономит деньги.
Я предлагаю вашему вниманию несколько заметок-соображений, которые накопились за время моей работы в этой области.
Вот первые три

На мгновение быстрее: измеряем время упаковки и распаковки значимых типов данных

Reading time5 min
Views9.6K

Доброго дня, Хабр!



Многие неопытные разработчики не всегда знают и понимают, что же происходит за кулисами их кода. Сейчас речь пойдет об упаковке и распаковке значимых типов данных (по-русски это звучит ужасно, поэтому «boxing and unboxing value types»).
Под катом небольшой пример и измерение времени выполнения.
Читать дальше →

Не дразните программиста

Reading time4 min
Views168K
Подходит к концу очередная рабочая неделя. Не знаю, как у вас, а у меня эта неделя, что называется, — не задалась. Потрачена куча энергии и нервных клеток, и никакого движения вперед. Переносить стрессовое состояние на выходные мне очень не хочется, поэтому я решил взять короткую паузу и немного развеяться.

Вы устали? Хотите выпустить пар? Вам требуется передышка? Предлагаю вам присоединится ко мне, тем более, что на дворе пятница.
Читать дальше →

О чем НЕ говорят разработчики или 7 любимых выражений программистов

Reading time5 min
Views90K
Друзья! Мы все очень любим (или не любим) поговорить о шаблонах проектирования. Лично я их сильно недолюбливаю, т.к. большинство из них достаточно очевидны для более или менее опытного разработчика, а шаблонность мышления еще никому в жизни не помогала.

Но поговорим мы сегодня не о них, а о других шаблонах, а именно шаблонах поведения, наших людских паттернах, а скорее даже антипаттернах. Чтобы подлить масла в огонь хотел бы немного расшифровать название этого поста.

В повседневной жизни я стараюсь не употреблять слово «программист». Оно для меня несет негативный оттенок и сразу вспоминаются 90-е, когда кого только программистами не называли. Они и картриджи у принтеров меняли и бабушкам-бухгалтерам помогали их первый комп осваивать. Помните это нетленное «Ты же программист!»? В общем дискредитировало себя это слово.

Я как-то привык своих людей называть разработчиками (developers) и для меня программист — это эдакий антипод разработчика. Ну и с годами опыта я познал большое количество антипаттернов для хорошего разработчика, пользоваться которыми он должен как можно реже. Чем реже я их слышу, тем я счастливее. Итак, приступаем.

001. А у меня на компе работает


Эта фраза знакома всем, кто хотя бы несколько месяцев работает в индустрии и просто должна быть исключена из лексикона любого разработчика. Чувак, если ты отправляешь на тестирование код, который не работает у тебя на компе, то тебе не место в профессии! По определению у тебя на компе код всегда работает. Разве может быть иначе? А не работает он у тестировщика, клиента, да кого угодно, потому, что ты не учел какие-то нюансы, различия в окружении, данных, погоде на Марсе и твоя задача выяснить, что именно и исправить, а не пытаться сразу откосить и доказать свою невиновность. Нет ничего страшного в том, что ты чего-то не учел. В моей практике бывали случаи учесть которые мог бы только… Да никто не мог бы!

Больше паттернов!

Топ-10 проблем интернет-магазинов

Reading time6 min
Views42K
image

Недавно исследовательская компания Qubit представила отчет под названием «Ценность обратной связи от клиентов: Топ-10 вещей, на которые жалуются люди и как их решить». Как понятно из названия – исследователи собрали жалобы и пожелания клиентов 400 интернет-магазинов за три года, а затем на основе этих данных выделили главные болевые точки сайтов электронной коммерции.
Читать дальше →

Дизайнерский обзор Android 4.4 KitKat. Часть 1

Reading time5 min
Views154K


В первой части статьи подробно описаны все основные интерфейсные изменения, которые претерпели экран блокировки и рабочие столы, по сравнению с предыдущими версиями Android. Дальше — много картинок.

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

Тестировщики — роль второго плана?

Reading time5 min
Views41K
В странах бывшего СССР сложилось вполне определённое отношение к тестировщику как к роли второго плана:
  • На роль тестировщика готовы брать кого угодно, кто умеет достаточно уверенно нажимать на кнопочки
  • Тестировщики редко участвуют в судьбе проекта, принимают решения по требованиям и срокам
  • Тестировщиков стараются подключать как можно позже, когда надо «покликать» и «поикать ошибки»
  • За исключением небольшого числа продуктовых компаний, большинство работодателей предлагают тестировщикам зарплату в 1,5-2 раза ниже, чем разработчикам.

Почему такое происходит, вполне понятно: мало кто вживую встречал квалифицированных тестировщиков, тестировщики не делают полезный результат (продукт не пишут), да и вообще у нас принято экономить на всём, на чём только получается. Интересен другой вопрос: что получается благодаря такому подходу? Рассмотрим на примерах.
Читать дальше →

Incoding rapid development framework

Reading time5 min
Views8.1K
image

Пара слов о себе — я работаю в компании Incoding Software, которая много лет успешно занимается аутсорсингом, выполняя Internet и Intranet проекты в различных областях ( медицина, доски объявлений, социальные сети и многое другое)

Incoding Framework — это клиент / серверное решение для разработки веб проектов на платформе asp.net mvc.

Состоит из трех частей:
  • Серверная — реализация CQRS и Event Broker
  • Unit Test Contrib — набор утилит и сценариев для быстрого написания тестов
  • Клиентская — делится на:
    • IML — Декларативный язык ( Incoding Meta Language ), позволяющий описывать клиентские сценарии на C#
    • Model View Dispatcher ( MVD ) — CQRS на MVC, позволяет исполнять Command и Query без написания промежуточных Controller


примечание: особенность Incoding Framework в том, что каждая часть интегрируется между собой ( IML использует MVD для AJAX, MVD исполняет CQRS и т.д ), но позволяет применять по отдельности ( на Nuget 3 независимых пакета )

Так как рассмотреть каждую часть framework в одной статье не получится, то будет сделан акцент на самом интересном компоненте нашей библиотеки — это IML. Почему я выделил именно клиентскую часть, дело в том, что CQRS, Event Broker и Unit Test имеют множество аналогов в “мире” .net и быстро заинтересовать ( хотя мы имеем ряд особенностей ) крайне трудно, но IML это инструмент, который пока не имеет прямых аналогов.
Читать дальше →

Оптимизация беспроводного подключения или iwconfig может всё

Reading time5 min
Views37K
Довольно долго я мучался с потерями пакетов и падением скорости WiFi на своем ноутбуке после некоторого времени работы. И вот я наткнулся на небольшую статью, которая помогла мне обобщить свои знания и осознанно подобрать необходимые параметры для оптимизации работы моей сетевой карты.
Ниже я предлагаю ознакомится с переводом данной статьи.


Данное руководство раскрывает возможности iwconfig по регулировке настроек вашего беспроводного соединения. Из коробки значения по умолчанию весьма либеральные, они дают хорошую пропускную способоность при оптимальных условиях. В реальности же вы никогда не будете настолько близки к точке доступа, как бы вам хотелось, каналы могут перекрываться, а толпы людей будут пытаются использовать тот же канал, что и вы. И настройки по умолчанию в этих условиях уже не так хороши.

Пожалуйста, при чтении данного руководства держите под рукой открытую справку (страничку man) по iwconfig. Я опишу только одиночные примеры различных команд. Справка вам даст намного больше детализированной информации относительно того, как оптимально всё настроить.

Первое и наиболее важное — понимание, что может привести к появлению проблем.
Читать дальше →

Трюки с CSS-анимациями: мгновенные изменения, отрицательные задержки, анимация transform-origin и другое

Reading time14 min
Views221K
Применяя CSS-анимации в повседневной работе, я постепенно выработал привычку экспериментировать с ними в свободное время. Постоянно пытаясь реализовать очередную интересную задумку с использованием как можно меньшего числа элементов HTML, я обнаружил немало способов сделать с помощью CSS довольно неочевидные вещи. В этой статье я хочу поделиться некоторыми из них.

Быстрое изменение состояния посреди анимации

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

@keyframes toggleOpacity {
  50% { opacity: 1; } /* Turn off */
  50.001% { opacity: 0.4; }

  /* Keep off state for a short period */

  52.999% { opacity: 0.4; } /* Turn back on */
  53% { opacity: 1; }
}

Вот как я использовал этот приём для имитации мигающей неоновой вывески с помощью прозрачности и свойства text-shadow:


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

C#. Непоследовательное сравнение

Reading time4 min
Views16K

От переводчика:
Это вольный перевод блогозаписи Эрика Липперта (Eric Lippert), в прошлом одного из разработчиков языка C#. Запись оформлена в виде «вопрос-ответ», я пропущу вопрос и перейду к ответу, вы можете ознакомиться с вопросом в оригинале, но там ничего особо интересного.

Но, для начала, я попрошу взглянуть на следующий код, и без гугла и компилирования, попробовать выяснить что произойдет в 9 случаях сравнения и свериться с ответами (для опроса):
int myInt = 1;
short myShort = 1;
object objInt1 = myInt;
object objInt2 = myInt;
object objShort = myShort;
Console.WriteLine(myInt == myShort);          // scenario 1
Console.WriteLine(myShort == myInt);          // scenario 2
Console.WriteLine(myInt.Equals(myShort));     // scenario 3
Console.WriteLine(myShort.Equals(myInt));     // scenario 4
Console.WriteLine(objInt1 == objInt1);        // scenario 5
Console.WriteLine(objInt1 == objShort);       // scenario 6
Console.WriteLine(objInt1 == objInt2);        // scenario 7
Console.WriteLine(Equals(objInt1, objInt2));  // scenario 8
Console.WriteLine(Equals(objInt1, objShort)); // scenario 9


Продолжение и ответы

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity