Pull to refresh
0
Сергей Зенченко @izenread⁠-⁠only

User

Send message

Концепция баррикады

Reading time3 min
Views1.9K

Каждый программист когда-то давно, в начале своего Пути писал что-то типа вот этого:
double div( double a, double b )
{
	return a / b;
}


И был в полной уверенности, что эта функция делает именно то, что нужно — делит а на b. Но рано или поздно рядом оказывался друг или преподаватель, который объяснял, что эта функция делает еще одну важную в жизни любой программы вещь: валит её с исключением деления на ноль, если b равно нулю. После этого к будущему программисту приходило понимание необходимости проверки входных данных. Кто-то на этом решал вопрос исчерпанным, а кто-то приходил к мысли, что это только половина Дао.
Читать дальше →
Total votes 134: ↑111 and ↓23+88
Comments98

Перенаправление функций в Mach-O библиотеках

Reading time13 min
Views8.9K
В предыдущей статье был описан метод перехвата вызовов для разделяемых библиотек ELF. А сейчас мы посмотрим как сделать то же самое с библиотеками в формате Mach-O.

Вкратце напомню ситуацию. Имеем программу под Mac OS X, которая пользуется множеством сторонних динамически-компонуемых библиотек, которые, в свою очередь, также пользуются функциями друг друга.

Задача следующая: перехватить вызов некоторой функции из одной библиотеки к другой, и в обработчике вызвать оригинал.

Как обычно, нетерпеливые могут все скачать и попробовать прямо сейчас.
Решение и много картинок
Total votes 37: ↑32 and ↓5+27
Comments14

Кроссплатформенный код для приложений под iPhone и iPad

Reading time4 min
Views14K
Учимся парадигме Model-View-Presenter и выкидываем в AppStore кучу вкусностей для iPhone и iPad сразу

Как наиболее оптимальным образом портировать приложение, написанное под iPhone для iPad, можите решить только вы сами. Могу лишь предложить несколько рецептов, которые будут удобны в использовании на данном конкретном примере Web-приложений.

Далее будет предложена парадигма организации кода, рассмотрены компоненты, доступные в SDK 3.2. А паттерны проектирования вы изучите сами :-)

Начинается все с дизайна. Как правило, несколько экранов iPhone пытаются уложить на одном экране iPad.
image
Читать дальше →
Total votes 65: ↑53 and ↓12+41
Comments105

Советы по портированию iPhone-приложений на iPad

Reading time4 min
Views4.7K
Буквально несколько дней назад мне пришлось портировать одно небольшое приложение с iPhone на iPad. В целом все прошло довольно безболезненно, но было несколько граблей, на которые я не преминул наступить. Поэтому хотелось бы представить несколько советов по упомянутому выше портированию. За основу взята эта небольшая статья, дополненная некоторыми моими собственными советами и замечаниями.
Читать дальше →
Total votes 30: ↑27 and ↓3+24
Comments16

Асинхронное программирование — редактор графов

Reading time15 min
Views3.5K
Иногда в процессе описания бизнес-логики, необходимо составить граф асинхронных операций с внутренними зависимостями, т.е. когда задачи выполняются асинхронно, но некоторые задачи зависят от других и тем самым вынуждены «ждать» пока из можно будет запустить. В этом посте я хочу показать как эту проблему можно решить путем создания графической DSL, которая позволит разработчику визуально определить граф зависимостей.

Если интересно...
Total votes 32: ↑28 and ↓4+24
Comments12

Повышение работоспособности: как я делаю работу, которую делать не хочу

Reading time3 min
Views11K
image Сегодня я продолжаю свою тему и пишу пост о том, как я «заставляю» себя делать скучную, нудную и неприятную работу.

В работе абсолютного большинства людей есть задачи, которые выполнять не хочется, но надо. Решается эта проблема (если решается) обычно методом «заставить себя», или «через не могу». Так происходит, потому что все мы приучены к этому с раннего детства. Поэтому мы всегда мучаем себя, делая то, что нам ненавистно. Сопровождается такой выход большим количеством негативных эмоций. А это наши нервы, и — как следствие — наше здоровье.

Так что же делать? Ответ я нашёл не так давно, и теперь хочу поделиться с Хабрасообществом.

Читать дальше →
Total votes 108: ↑69 and ↓39+30
Comments70

Деревья, двоичные деревья

Reading time1 min
Views9.2K

5й выпуск медленно, но двигающегося вперед видеопроекта Computer Science Student. На этот раз — небольшая «лекция» о такой структуре данных, как деревья.
Видео доступно в HD-качестве, но, как всегда, придется идти на vimeo.com.

Читать дальше →
Total votes 49: ↑42 and ↓7+35
Comments29

Структуры данных: бинарные деревья. Часть 1

Reading time6 min
Views373K

Интро



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

В своих статьях я буду приводить примеры кода сразу на двух языках: на Java и на Haskell. Благодаря этому можно будет сравнить императивный и функциональный стили программирования и увидить плюсы и минусы того и другого.

Начать я решил с бинарных деревьев поиска, так как это достаточно базовая, но в то же время интересная штука, у которой к тому же существует большое количество модификаций и вариаций, а так же применений на практике.
Читать дальше →
Total votes 110: ↑101 and ↓9+92
Comments53

SketchFlow: прототипирование интерфейсов по-новому

Reading time13 min
Views24K
Все хорошие разработчики и дизайнеры, с которыми я знаком, в той или иной мере занимаются прототипированием. Как мне кажется, прототипирование напоминает канал между заказчиком и разработчиком, по которому передаются идеи и отзывы заинтересованных сторон, что позволяет вносить изменения в проект еще на раннем этапе разработки.

Как вы, наверное, замечали, прототипы могут быть представлены в разнообразных формах: от каких-то набросков на салфетке, до дизайна созданного в профессиональном пакете, который выглядит очень близко к желаемому результату. Несмотря на такое количество вариантов, мы можем выделить два основных типа прототипов: малодостоверные (Low fidelity) и высокодостоверные (High fidelity ). Малодостоверный прототип – это простое описание, набросок на рисовальной доске или скетч, которые приблизительно показывают кусочек пользовательского интерфейса. Пример такого прототипа представлен на рис. 1.


Рис. 1 – Пример малодостоверного прототипа, который демонстрирует форму входа в систему

Читать дальше →
Total votes 127: ↑107 and ↓20+87
Comments71

Реализация интерфейса ElementTraversal

Reading time8 min
Views2.2K
Достаточно много браузеров (Opera 9.6, Google Chrome 2, Safari 4, Firefox 3.5) обзавелись поддержкой весьма удобного интерфейса ElementTraversal, который позволяет перемещаться по DOM-дереву, игнорируя текстовые узлы. В этих браузерах для каждого элемента стал доступен следующий набор новых getter'ов:
  • firstElementChild — первый дочерний элемент;
  • lastElementChild — последний дочерний элемент;
  • nextElementSibling — следующий соседний элемент;
  • previousElementSibling — предыдущий соседний элемент;
  • childElementCount — количество дочерних элементов.
Читать дальше →
Total votes 30: ↑26 and ↓4+22
Comments17

Краткий обзор развития фреймворка Ruby on Rails за последние 14 месяцев

Reading time12 min
Views1.2K
За временем не успеть. Все вокруг развивается очень стремительно. В какой-то момент я заметил, что хоть и работаю с последней версией Ruby on Rails, но многих «фич», которые в ней реализованы я не использую, более того о многих я даже не слышал.
Я попробую сделать ретроспективу, что было введено в Rails за последние 14 месяцев. Каждое нововведение буду сопрождать небольшим примером, который буду копировать as is из источника, на котором основана статья, так как подобные пояснения для каждой это тема для кучи отдельных статей или ссылкой.
поехали
Total votes 57: ↑54 and ↓3+51
Comments22

Как «готовить» вашего заказчика

Reading time3 min
Views1.7K
Ваш проект это пьеса (надеюсь что не трагедия)

20.37 КБ

Какая цель вашей пьесы?
Цель — сделать счастливым заинтересованных лиц.
Meet stakesholders expectations.

Это не только зрители (заказчики которые хотят все сегодня и за бесплатно), но и сама труппа (ваши программисты, которые хотят попробовать новую игрушку, ничего не хотят документировать, художники которые спят и видят как рисуют космос), но и члены семей труппы (муж дома в 17.30 дома и не уставший по дороге забрал из сада ребенка).

Ваша работа это «make everyone a winner» [Boehm, 1989]. До тех пор пока происходит то, что ожидается — все счастливы. Наш CEO, умный дядька в очках, постоянно говорит: all you need is to make the customers happy. Он о заказчиках, вам же нужно думать и обо всех других.

У каждого кто-то вовлечен в пьесу есть свой интерес. Это либо желания, либо страхи. Желания это получить по быстрому клевенькое симпатичное приложение для аппсторе к какому-то евенту и проверить насколько это была клевая мысль. Желания это интерес что-то получить, страх связан с интересом что-то не допустить.

Зрители слишком сложные существа, чтобы можно было легко определить их страхи и желания. Сами зрители плохо их понимают. Интересы зрителей труппы и членов их семей, слишком противоречивы чтобы можно было легко в одной пьесе «впихнуть невпихуемое», говоря словами ниваловцев. Хороший разработчик это лидер для своего заказчика, в том смысле что, после общения с ним заказчик лучше понимает что хочет.

Читать дальше →
Total votes 33: ↑24 and ↓9+15
Comments13

На передовой дизайна виртуальных машин

Reading time4 min
Views4.4K
Пока готовится первая статья в обучающей серии об языке Эрланг, решил сделать перевод одного интересного блог-поста. Пост об развитии виртуальной машины Эрланг и целях, которые пытаются достичь его авторы.

Читать дальше →
Total votes 44: ↑40 and ↓4+36
Comments51

Удаленная работа: тим-лиду и программистам

Reading time4 min
Views26K
Достоинства удаленной работы очевидны — меньше ограничений в поиске специалистов с нужной квалификацией, возможность нанимать людей за пределами МКАД, меньше расходов на ведение бизнеса. С другой стороны, есть и проблемы: наиболее значительные — со стороны организации работы. Последние 4 года я работаю тим лидом распределенной группы программистов (3-15 человек в разное время) для зарубежного заказчика, и хочу поделиться с хабрадевелоперами опытом такой работы :-)

Здесь и далее имеется ввиду следующая организация труда:
  1. Заказчик (+on-site команда опционально) в офисе где-нибуть в Европе/США.
  2. Тим лид распределенной команды — где-то на бескрайних просторах exUSSR.
  3. Члены распределенной команды — также где-то на бескрайних просторах exUSSR.
Подразумевается, что при желании заказчик может общаться со всеми членами команды. Оплата работы — почасовая.

Читать дальше
Total votes 80: ↑74 and ↓6+68
Comments127

Кунг-фу поддержки проектов

Reading time3 min
Views1.4K
Наверно каждому из программистов приходилось сталкиваться на новом или на не новом месте работы с необходимостью поддерживать «чужой» проект.

Программисту удается написать код компилилируемый или интерепретиуемый, но не каждому понятный.

Все реагируют на «чужой» код по разному. Одних бросает в холодный пот, другие стиснув зубы разбираются. Так получилось, что я наблюдал этот процесс изнутри, как сторонний наблюдатель, как team leader и как специалист передающий свой код «новичку»

Читать дальше →
Total votes 66: ↑57 and ↓9+48
Comments40

Про правильную посадку в кресле

Reading time5 min
Views71K
Навеяно постами про подлокотники. Это сборник разных советов, которые я потихонечку собирал в записную книжку, когда впервые столкнулся с проблемами, которые может вызвать неправильная посадка в компьютерном/водительском кресле и дополнял собственным опытом и знаниями.

Что есть правильная посадка в кресле?

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

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

Это не страшно, это нормально, но проблема в том, что мы не замечаем смены условий и продолжаем сидеть в такой позе еще час, два и больше. Как результат — нагрузка приходится не на большие и сильные мышцы, а на суставы, сухожилия и множество мелких мышц, что в будущем гарантировано приводит к целому букету болезней с общим корнем «хондрозы».

Решение — правильная поза. Как ее достичь? Причем совершенно штатными средствами, без адских подлокотников или кресел за полторы тысячи евро?

Читать дальше →
Total votes 119: ↑112 and ↓7+105
Comments89

.NET Framework. Memory management

Reading time11 min
Views23K
В данной статье рассматриваются некоторые моменты по работе с памятью в .NET Framework. Статья описывает работу GC, как GC контролирует свои хип, режимы работы GC. Приведены примеры, по использованию памяти в обход GC. Я изложил не только легко доступную информацию, ну и ту, что доступна только при изучении дампов приложений, написанных на .NET. Надеюсь статья получилась информативной и не очень скучной. Следующая статья будет про загрузчик, JIT, и его структур данных, таких как Method Tables, Method Descriptors и EEClass.
Немного дополнительной информации о управляемой памяти в .NET
Total votes 30: ↑28 and ↓2+26
Comments10

Начинающим Java программистам

Reading time2 min
Views1.2M
Программирую на Java вот уже 7 лет. Но на работе часто приходится обучать новое поколение. В связи с этим и решил сделать некоторую шпаргалку, которая, надеюсь, пригодится и для хабрчан. Если кто-то может помочь дополнить чем-то информацию из этой статьи, то пишите! Итак:

Основные ресурсы для начального обучения


  • www.javable.com — сайт со статьями и tutorial'ом по Java. Все в основном на русском.
  • www.exampledepot.com — очень полезный ресурс, где собраны краткие примеры использования классов для тех или иных пакетов
  • java.sun.com — без первоисточника не обойтись. Для любого Java программиста JavaDoc должен быть истиной в последней инстанции. Так же здесь можно найти серию tutorial'ов на все возможные темы.

Читать дальше →
Total votes 120: ↑113 and ↓7+106
Comments58

Простой способ переноса больших файлов по частям

Reading time1 min
Views30K
Бывает, что необходимо перенести большой файл, например, на flash с файловой системой FAT16/32 или загрузить на сервер по частям. На помощь придут две программы, которые, как правило, присутствуют в любом дистрибутиве Linux и Mac OS.

Команда split

$ split -a 1 -d -b 4000M sample.iso sample.iso.part

разобьет исходный файл sample.iso на части по 4 Гбайта (максимальный размер файла в FAT), каждая из которых будет именоваться как sample.iso.partN, где N = 0, 1, 2,… .
Собрать части воедино на целевой системе поможет команда cat:

$ cat sample.iso.part* > sample.iso

Применение маски приведет к тому, что утилита cat переберет все файлы по порядку, начиная с sample.iso.part0.

Этот наглядный пример показывает, как можно перенести большой файл. Более подробную информацию по использованию cat и split можно получить в справке (--help) и руководствам (man) к программам.
Total votes 82: ↑59 and ↓23+36
Comments69

Качество при разработке Интернет-проектов

Reading time4 min
Views2.1K
Привет, хабр! В этом материале я хочу затронуть непростой вопрос качества Интернет-проекта, а проще говоря – сайта, сделанного в сторонней студии на заказ.

В настоящее время для рынка характерно то, что большинство компаний (будем называть их студиями) выпускают проекты среднего и низкого качества. Почему так происходит? Какие основные факторы влияют на качество продукта при его производстве в студии?

Читать дальше →
Total votes 61: ↑54 and ↓7+47
Comments74

Information

Rating
Does not participate
Location
Днепропетровская обл., Украина
Date of birth
Registered
Activity