пятница, 30 ноября 2012 г.

День 70. Deadline и 50 отжиманий

Прошло 2 трети срока. Сегодня закрыл 2 промежуточных цели.

Дочитал книгу Демарко "Deadline. Роман об управлении проектами", мне понравилась, даже несмотря на то, что читал в 2 захода с перерывом в месяц. В книге многие вещи раскладываются по полочкам, в общем-то даже не нужно писать никакого конспекта. Все главные идеи выписаны в конце главы, читать, понимай, пробуй.

Любопытны также попытки найти способ "просчитать" любой проект. Скорее всего я не смогу применить это у себя в работе, но вот необходимость "просчитывать" есть. Поэтому буду пробовать.

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

Ну и вторая достигнутая цель - 50 отжиманий. Теперь нужно сделать самое сложное, нужно поддерживать этот уровень. Я занимаюсь 3 раза в неделю, значит на последнем занятии должен снова отжатся 50 раз минимум.

Всем доброй ночи. 

понедельник, 26 ноября 2012 г.

День 66. Расширение модели и книги для развития

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

Собственно хочу озвучить еще одну цель поставленную себе на предновогодние 100 дней. Это полезное чтиво для развития. Всего 5 книг:

  • Deadline. Роман об управлении проектами
  • Человеческий фактор. Успешные команды и проекты
  • Путь менеджера. От новичка до гуру
  • Вальсируя с медведями. Управление рисками на проекте
  • Жизнь на полной мощности

На сегодня я осилил ровно половину из задуманного. Застрял на "Deadline". Прочитал более простую и популистскую половину книг - "Жизнь на полной мощности" и "Путь менеджера". Книги честно говоря так себе, я не оценил. Читаются быстро но и при этом остаток небольшой.

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

З.Ы. По спортивной цели сегодня началась последняя неделя. Отжался 45 раз, еще 5. Главное, что мозг при этом разгружается и появляются новые идеи.

Всем доброй ночи. 

воскресенье, 8 апреля 2012 г.

Memory Managment Framework. Постановка задачи

Давненько ничего не писал и вот решил исправится. Тем более, что на выходных в голову пришла неплохая тема.
Сразу оговорюсь, что в данном опусе будут только мои мысли и разглагольствования, по-сути просто постановка задачи.  Если хватить упорства, то решение задачи я выложу позжее. И еще мой опыт опирается только на разработку игр, поскольку в своей жизни я больше ничего не писал. Возможно у вас все по-другому :).

Одним из слабых (или сильных) сторон C++ является необходимость разработчикам полностью брать в свои руки управление памятью во время работы приложения. Не у всех это удается одинаково хорошо. Отсюда исходят стандартные проблемы: утечки памяти и фрагментация. Как результат не всякое приложение может проработать больше десятка часов без потерь памяти.
Собственно наша игра на данный момент испытывает теже проблемы. Мы потихоньку правим и улучшаем, но возникает вопрос: а нельзя ли чтобы сразу было хорошо? Ведь в мире существует множество движков, библиотек и фреймворков, которые позволяют разработчикам избежать множество проблем. Неужели нет чего-то подобного для управления памятью.
Размышляя на эту тему я попробовал ответить на ряд вопросов:
  1. Что бы дало наличие такой библиотеки
  2. Какие возможные неудобства и ограничения она бы принесла
  3. Какие требования могут быть к такой библиотеке
Пойду по-порядку и постараюсь изложить все что мне пришло в голову.
 
    Возможности, которые я хотел бы видеть в данной библиотеке. 

  • Различные виды аллокаторов памяти. Если вы до сих пор работали с памятью в стиле ПК (т.е. используя стандартные операторы new/delete), то обязательно найдите кого-то, кто работал на консолях и расспросите его. Многие SDK для консолей уже содержат реализации нескольких видов аллокаторов, которые часто работают эффективнее стандартного. 
  • Дальше такая библиотека дала бы больше возможностей для контроля и отладки расхода памяти: создание дампов, проверка ликов, запись логов и возможность получать карту памяти приложения в любой момент времени и т.д. 
  • Намного более жесткий контроль за выделением памяти. Для многих программистов это является хорошей школой, особенно в наш век Java и C#. Слишком многие свысока относятся к гигабайтам свистящим у виска. Такой контроль позволит установить константный объем памяти, которая будет необходима вашему приложению. 

Собственно тут можно напридумывать много чего. Ограничений нет. Ведь вы полностью контролируете работу с памятью.

    Ограничения и неудобства в работе
Конечно в самом идеальном случае при работе с такой библиотекой ничего не поменяется. Но все же из моей практики может возникнуть ряд проблем.

  • Скорее всего придется отказаться от стандартных операторов new/delete, а ново введенные не будут обладать той же лаконичностью и красотой.
  • Возможно придется определять работу с памятью для каждого класса, т.е. переопределять операторы new/delete для каждого класса.
  • Вам понадобится затратить время на обучение всей команды новым правилам работы с памятью. Причем нужно будет донести не только новый синтаксис, но и понимание новых принципов выделения и освобождения памяти. Иначе счастья не будет. 
  • Могут возникнуть проблемы со сторонними библиотеками и фреймворками. Особенно, если у вас нет их исходников.


    Требования к библиотеке
Требования я разделил на две части. Обязательные и прикольные.
Обязательные:
  • Надежность - любыми способами необходимо гарантировать, что функционал библиотеки под любыми нагрузками будет работать только так, как задумано и описано в документации.
  • Скорость - скорость работы для стандартного аллокатора в релизе должна быть как минимум такой же, как и у стандартной реализации операторов new/delete. 
  • Многопоточность - библиотека должна работать из нескольких потоков. На самом деле это очень интересный момент, с кучей своих кейсов и ньюансов. 
  • Низкая точка старта - по умолчанию библиотека должна работать как стандартные операторы new/delete и не требовать сложной настройки. Естественно все инструменты также должны подхватываться сразу, а не после недели танцев с бубнами.
Прикольные:
  • Кроссплатформенность - большая часть кода библиотеки платформонезависима. Но есть несколько точек, где не избежать взаимодействия с конкретной системой: захват памяти у системы и ее освобождение. Также некоторые платформы имеют несколько типов памяти и могут по-разному с ними работать. 
  • Интеграция с популярными IDE - тут опять подключаем фантазию. Можно представить красивые графики в VisualStudio или Eclipse.
 
     Вот собственно почти все к чему пришел. Также в качестве дальнейших, и более практических, шагов записал следующие вопросы:
  • А есть ли уже готовые решения данной задачи (после 15 минут в гугле почти ничего не нашел)?
  • Как работают стандартные реализации операторов new/delete?
  • Какие решения сделаны в рамках различных игровых движков (OGRE, Torque, Unreal, CryEngine и т.д.)?
  • Насколько сложно самому реализовать текую библиотеку и зачем оно мне нужно?
Если можете поделиться информацией буду премного благодарен.
Всем доброй ночи