Subscribe: Алёна C++
http://alenacpp.blogspot.com/feeds/posts/default?alt=rss
Added By: Feedage Forager Feedage Grade B rated
Language: Russian
Tags:
open space  ptr  shared ptr  shared  std  вы  если  есть  можно  на  не  по  то  что  это 
Rate this Feed
Rate this feedRate this feedRate this feedRate this feedRate this feed
Rate this feed 1 starRate this feed 2 starRate this feed 3 starRate this feed 4 starRate this feed 5 star

Comments (0)

Feed Details and Statistics Feed Statistics
Preview: Алёна C++

Алёна C++



программирование для прагматиков



Last Build Date: Mon, 15 Jan 2018 16:22:09 +0000

 



Карта С++17

Wed, 22 Feb 2017 18:35:00 +0000

Updated 23.3.2017: Мы продаем постеры через ebay. Мы доставляем из Техаса, поэтому чем дальше от Техаса вы находитесь, тем дороже доставка, увы.

Вы умоляли, писали письма и подходили лично. Так вот, новая С++ карта, которую все очень просили, уже готова!

Предыдущая карта сильно устарела за прошедшие годы. Новая отражает изменения в С++ стандарте на начало 2017 года.
Были перерисованы все "заимствованные" элементы и теперь у нас нет никаких проблем с копирайтами.



Также, будет возможность купить постер с картой с доставкой по всему миру, о чем все тоже очень просили. Следите за обновлениями!
Постер можно купить тут.

Как вы, возможно, помните, кроме банального "распечатать и повесить на стену" народ нашел карте множество применений. В одном немецком вузе ее используют для обучения студентов. Несколько раз она была использована во время выступления на конференциях. Магазин из какого-то российского города (уже не вспомнить, откуда именно), торгующий холодным оружием, зачем-то использовал элементы карты в своей рекламе.

Самые частые вопросы:
В: Можно я использую её в своей презентации, полностью или частично?
О: Да, можно.

В: Я преподаватель, можно по ней учить студентов?
О: Да, можно.

В: Могу я её распечатать и повесить на стену?
О: Да, можете.

Но не допускается продажа и любой другой способ получения денег и нарушение прав авторства этой работы. Согласитесь, это логично.




Bing UX нанимает

Fri, 09 Sep 2016 23:43:00 +0000

Updated 03.10.2016: Я закончила принимать резюме, всем спасибо!

Updated 26.9.2016: Собеседования будут проходит в Москве в конце октября. Предполагается, что вы будете работать в Москве какое-то время, если вам нужно разрешение на работу в России, упомяните это в сопроводительном письме, пожалуйста.

Группа Bing UX нанимает специалистов, готовых переехать в США, Бельвью. Виза оформляется минимум год, это время вы будете работать в московском офисе Майкрософт.

Вот письмо от рекрутера:
At Microsoft we're always hiring top talent to help us build the products of the future. Bing is one of the flagship products. With 100s of millions of users already we have bold ambitions to make Bing the #1 search engine in the world and the most desired homepage in people’s browsers. We wouldn’t be able to achieve this without amazing engineers that we hire from all over the world.  We have big plans and this means we need to hire passionate and productive engineers like yourselves.  

We’re hiring for Bing UX group (about 500 engineers) based in Bellevue. This group is responsible for many projects including multimedia search, growth & engagement, maps and local search, whole page relevance, APIs and many others. Depending on the specifics of the team you would be working for we are searching for a number of skillsets. Detailed job description can be viewed  here but we’re looking for 4 kinds of profiles:
  1. With a UX focus (javascript, front end development) 
  2. With full stack experience  
  3. With machine learning experience 
  4. With data pipeline experience    

Regardless of what is your area of expertise for each Software Engineer role we always look for a set of skills / knowledge which include:  
  1. Algorithms and data structures  
  2. Coding  
  3. Systems design  
  4. Problem solving


Если интересно, присылайте свое резюме мне, адрес есть в профиле. Если есть вопросы - задавайте, я передам.

Актуально до конца сентября.



Несколько интересных свойств умных указателей в C++

Thu, 25 Feb 2016 20:28:00 +0000

Об этом полезно знать при использовании умных указателей в С++:

У shared_ptr есть конструктор, который позволяет создавать зависимости между shared_ptr'ами. (std::shared_ptr's secret constructor  by Anthony Williams)
Допустим, я хочу создать указатель на объект типа Y, py, который является членом экземпляра класса X, px. Мне нужно, чтобы px не удалялся, пока я не закончу работать с py.


void bar(){
std::shared_ptr px(std::make_shared());
std::shared_ptr py(px,&px->y);
store_for_later(py);
} // our X object is kept alive



unique_ptr не такой уж и уникальный. (unique_ptr–How Unique is it? by Bartosz Milewski)

void f(Foo * pf) {
globalFoo = pf; // creates a global alias
}

unique_ptr pFoo(new Foo());
f(pFoo.get()); // leaks an alias


Передача shared_ptr по значению - дорогое удовольствие. (The Real Price of Shared Pointers in C++ by Nico Josuttis)
При передаче по значению происходит его копирование и к его внутреннему счетчику прибавляется единица, это нужно сделать атомарно, что влияет на производительность. Передавайте его по ссылке, где возможно.


Зачем нужен scoped_ptr, если есть shared_ptr. (shared_ptr vs scoped_ptr)
shared_ptr "тяжелее" чем scoped_ptr, потому что он гарантирует корректную работу  в многопоточных программах. Поэтому, если вы работаете с одним указателем, и вам просто нужно автоматически освободить память из-под него, лучше использовать scoped_ptr.


Чтобы корректно возвращать shared_ptr на this надо использовать enable_shared_from_this. (std::enable_shared_from_this на cppreference.com)
Пример с  cppreference.com демонстрирует что случится, если вы не используете enable_shared_from_this.


#include
#include

struct Good: std::enable_shared_from_this
{
std::shared_ptr getptr() {
return shared_from_this();
}
};

struct Bad
{
std::shared_ptr getptr() {
return std::shared_ptr(this);
}
~Bad() { std::cout << "Bad::~Bad() called\n"; }
};

int main()
{
// Good: the two shared_ptr's share the same object
std::shared_ptr gp1(new Good);
std::shared_ptr gp2 = gp1->getptr();
std::cout << "gp2.use_count() = " << gp2.use_count() << '\n';

// Bad, each shared_ptr thinks it's the only owner of the object
std::shared_ptr bp1(new Bad);
std::shared_ptr bp2 = bp1->getptr();
std::cout << "bp2.use_count() = " << bp2.use_count() << '\n';
} // UB: double-delete of Bad


Бонусная ссылка:
Smart Pointer Parameters by Herb Sutter



Effective Modern C++ на русском

Sat, 05 Dec 2015 01:02:00 +0000





Самая лучшая книга по C++11 и C++14 вышла на русском языке: Эффективный и современный С++. 42 рекомендации по использованию C++11 и C++14.

Ссылка по теме:
Хорошие книги по C++11



We're hiring: Bing Ads, modern C++

Mon, 19 Oct 2015 21:54:00 +0000

Update 30.10.2015: Я закончила принимать резюме. Всем спасибо!В моей команде открылось несколько позиций: Software Engineer, Software Engineer II, Senior Software Engineer. Пишем распределенные высоконагруженные системы на С++, приветствуем знание C++11/14. Находимся в Бельвью, штат Вашингтон, США. Работаем в отдельных офисах.Визы делаем, но, возможно, придется поработать в Ванкувере (Канада) какое-то время.Если интересно, присылайте свое резюме мне, адрес есть в профиле.Официальное описание позиции Software Engineer II:Online Advertising is one of the fastest growing businesses on the Internet today, with $40 billion of a $600 billion advertising market already online. Microsoft is innovating rapidly to grow its share of this market by providing the advertising industry with a world-class online advertising platform and service. The Microsoft Ads Research & Development team is one of the most strategic and growing teams at Microsoft. As part of a software company with powerful innovations and part media company with global properties, at Microsoft Ads we bring both our technical and creative side to the table. Through incisive analytics, we know who cares - both when and where. We understand how to get in front of the right people at the strongest point of influence. Above all, we love data and excel at interpreting it for our partners. Collecting valuable information from every campaign and mining it for insights.Selection and Ranking team in Ads platform is responsible for selecting all possible ads and run the machine learned models to find the most relevant Ads for the user queries. This requires processing enormous amount of data in real time, within a few milliseconds. We are looking to grow our system to n times the current scale. This team provides a good opportunity to learn advertising business. If you like to work in a fast paced and highly innovative environment, SnR platform team is the right place for you. Come join us if you feel passionate about building distributed, highly scalable and performance intensive system.∙ Excellent OO design and implementation skills.∙ Excellent knowledge of algorithms and data structures.∙ Passion for building high-quality and scalable online backend services.∙ Great communication and cross-team collaboration skills.∙ Highly self-motivated with a demonstrated ability to work in a fast-paced environment∙ Good Understanding of distributed system is a strong plus.∙ BS or MS degree in Computer Science or related technical discipline.∙ 3+ years of professional software development experience.∙ Expert development skills in multithreaded C++.∙ Solid design skills, with a strong eye toward maintainability and flexibility of code.∙ Excellent analytical and problem solving skills and foundation in OO principles.∙ Knowledge of Search/Ads serving platform is a plus to have but not required.∙ Experience in building scalable and performant distributed systems desirable but not required.Microsoft is an equal opportunity employer.  All qualified applicants will receive consideration for employment without regard to race, color, gender, sexual orientation, gender identity or expression, religion, national origin, marital status, age, disability, veteran status, genetic information, or any other protected status.[...]



Практический английский. Цифры и буквы.

Tue, 01 Sep 2015 20:22:00 +0000


После приезда в США я обнаружила неожиданные пробелы в своем английском. И это оказался отнюдь не герундий. Если вы собираетесь ехать в США или работать с американцами, проверьте себя.

Вы не знаете цифры
Не верите мне, да?
Возмущены? И прямо сейчас готовы это опровергнуть. "Алена, ты чего, смотри: one, two ..."
А теперь быстро и без запинки попробуйте произнести на английском свой номер телефона. На память, не подглядывая. Попросите друга быстро произнести 10 случайных цифр и запишите их на бумагу. Вам придется это делать часто.
Некоторое время спустя я осознала, что цифры в английском тексте я читала по-русски. И никогда об этом не задумывалась.
Здесь многие вопросы решаются по телефону. Вам придется много и часто проговаривать свой номер телефона (а он будет новый). Номер своей кредитной карты. Иногда на той стороне будет робот.
Напоминаю, что тут очень любят считать сотнями 1200 - twelve hundred.

Вы не знаете буквы
Тоже возмущаетесь, но уже осторожнее?
Проверьте, что вы можете проговорить по буквам свое имя, опять же, никуда не подглядывая. Поповы могут это упражнение пропустить. Мой пламенный привет Щёголевым и Щербаковым.
В местных школах этому специально учат, кстати.



Фрагментация памяти в C++ приложениях

Mon, 29 Jun 2015 18:39:00 +0000

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

Чем это плохо? Во-первых, память может внезапно закончиться. Во-вторых может просесть производительность. Вот тут можно почитать историю как это выглядит на практике: Out of memory

Вот тут с картинками написано как оно происходит: Holier Than Thou
Но не написано - а что с этим делать-то? Итак, с чем я работала.

Region-based memory management. Выделяем память большим куском, например, под уровень в игре.  Популярный термин для такого куска - "арена". Потом уже внутри этого куска создаем нужные нам объекты. Когда все это стало не нужно - весь кусок памяти освобождаем. Заодно с утечками памяти проблем меньше.
Арену можно использовать вместе с STL, см. "STL custom allocators".


Boost.Pool. Там есть несколько разных интерфейсов, я использовала object_pool, который помогает эффективнее создавать и удалять большое количество сравнительно маленьких объектов.

Также я видела разное креативное использование placement new, как правило его можно заменить Boost.Pool'ом.



"Марсианин" на русском языке

Wed, 13 May 2015 17:37:00 +0000

Пока писала пост про книги по С++11 обнаружила, что "Марсианин" Энди Вейера переведен на русский. Это отличная бодрая научная фантастика, пока не встречала человека, которому он бы не понравился.

В оригинале - "The Martian".



Хорошие книги по С++11

Fri, 08 May 2015 22:58:00 +0000

Я сейчас в работе активно использую фичи C++11 и C++14, чего и вам рекомендую. Вот вам отличные книги по новыму стандарту.

Самая лучшая книга по C++11 и C++14. Просто, понятно с примерами. Для тех, кто знает С++ и хочет использовать фичи нового стандарта. На русский, похоже, не переведена
В переводе "Параллельное программирование на С++ в действии. Практика разработки многопоточных программ"
С фокусом на многопоточность, которой раньше в стандарте не было. Если душит жаба эту книгу покупать, то написана она на основе вот этих статьей Уильямса: Multithreading in C++0x Series
В переводе "Стандартная библиотека C++. Справочное руководство"
Джоссатис обновил свою книгу про STL. Много букв. Очень много букв. Выискивать там куски, относящиеся именно к C++11, смысла не имеет. Многопоточность, правда, вынесена в отдельную главу, но по многопоточности лучше Уильямса почитать.
Поэтому рекомендую эту книгу тем, кто решил начинать изучать STL. Обратите внимание на издание, вам нужно второе издание, там на обложке крупно написано С++11.
Вообще это относится ко всем книгам по С++. То, что издано до 2012 года можно считать устаревшим.

Про качество переводов ничего сказать не могу.

Ссылки по теме:
Хорошие книги по С++



Юбилей подкрался незаметно

Sat, 24 Jan 2015 00:06:00 +0000

Десять лет назад я написала первый пост в этот блог. Не ожидала, что он продержится так долго.
После рождения дочки я стала писать сюда несколько реже. Ну вы, наверное, заметили. Моя активность сместилась в Твиттер. https://twitter.com/alenacpp

Другие социальные сети где я есть
http://instagram.com/alenacpp/ - я ни разу не фотограф, но поддалась всеобщей моде
http://facebook.com/alenacpp - использую для чтения Facebook'а, также туда идет трансляция из твиттера. В друзья добавляю тех, кого читаю.



Обзор книги A Tour of C++

Tue, 18 Nov 2014 23:10:00 +0000

(image) Прочитала новую книгу Страуструпа "A Tour of C++". Это очень краткое введение в С++11. Рекомендуется новичкам, которые уже умеют программировать на каком-то языке. Но мне такая рекомендация не нравится, потому что книга уж очень лаконичная. Она подойдет скорее человеку, который когда-то писал на С++, подзабыл, а сейчас надо срочно вспомнить и заодно понять чего нового появилось за прошедшее время.

Если вы на C++ пишете все время и в курсе изменений в C++11, то ничего нового вы там не найдете.



Что будет, если смешать C++ и C#

Mon, 05 May 2014 21:45:00 +0000

Если очень хочется, то можно звать C++ методы из C# кода и наборот. Например, если какие-то приятные функции есть в C++ API, но их нет в C#, их можно подключить следующим образом: Mixing .NET and native code

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

Порча C# кучи
Если у вас намешан C++ и C# код, то из C++ можно залезть в C# кучу. Поробнее проблема разобрана в блоге Тесс Феррандес: .NET Crash: Managed Heap Corruption calling unmanaged code
Кстати, очень рекомендую ее блог. В постах до 2011 года она пишет про отладку, про WinDbg.

Потеря AppDomain
При переключении между C++ и C# кусками можно потерять текущий C#-контекст. Текущую директорию, например, что неприятно. Есть способы борьбы, которые работают не всегда.
Вот тут человек разбирает конкретный пример: Unmanaged callbacks across AppDomains.
Также есть разные кривые методы получения списка всех AppDomain'ов.



Впечатления от курса по машинному обучению

Sat, 08 Mar 2014 04:45:00 +0000

Отличный курс. Достаточный, для того чтобы получить общее представление о машинном обучении и понять, хочется ли заниматься этим дальше. Народ жалуется, что курс слишком упрощен. Не соглашусь, для вводного курса вполне нормальная сложность. Нейронные сети есть, SVM есть. К лекциям даются упражнения для закрепления материала, они из серии "подставить правильные цифры в формулу". Реальных задач по машинному обучению там нет, но это и правильно - такие задачи занимают недели и месяцы, их в такой курс не впихнешь.

Кстати, Эндрю Нг читает свои лекции опять прямо сейчас. Еще не поздно присоединиться! Stanford Machine Learning



Что сказал Рихтер

Fri, 01 Nov 2013 21:26:00 +0000

Давно обещала рассказать о лекции Рихтера про потоки. Такие лекции - это не что-то редкое и удивительное, Рихтер - совладелец компании Wintellect и они за деньги прочтут эту лекцию всем желающим. Если у вас есть возможность на его занятия прийти - очень рекомендую.
Ценны они в первую очередь возможностью задать Рихтеру вопросы и интересными примерами кода, однако были высказаны несколько полезных мыслей. Итак, Рихтер рекомендует. (Никаких откровений, впрочем)
Не надо плодить потоки, потому что переключение контекстов - вещь дорогая. Разумно делать столько потоков, сколько в машине есть ядер.
Если уж поток создали, постарайтесь его не блокировать без крайней необходимости. Речь идет не только о мьютексах, но и о Join, Sleep.
 
Не надо играть с thread pool. "Leave the thread pool alone".

Ну а также volatile в C# и в C++ разные. В C# volatile "cannot cache and fence", а в C++ только "cannot cache".



Начался новый курс по машинному обучению

Wed, 16 Oct 2013 00:33:00 +0000

Эндрю Нг снова читает курс по машинному обучению. Теперь с русскими субтитрами. Машинное обучение (machine learning) очень востребовано среди работодателей, оно используется в современных поисковых движках, например. В 2007 году было первым в списке 12 IT skills that employers can't say no to и с тех пор мало что изменилось.



Программисты ненавидят open space

Tue, 18 Dec 2012 07:42:00 +0000

Тревожные новости приходят со всех фронтов. Программистов активно сажают в open space даже в тех компаниях, где это раньше не практиковалось.  Может кто-то книжку написал и она стала новой религией? А заветы Спольски забыты?

Краткая справка для тех, кто случайно не знает, что такое open space - это огромная комната без каких-либо перегородок.

Update: поскольку у людей возникли вопросы по поводу open space - вот вам картинка отсюда. Одна команда (человек 10) в одной комнате, где все друг друга знают - это не open space.


Объяснение этому безобразию всегда одно и то же. "Мы делаем это чтобы программисты лучше коммуницировали". Я всегда думала, что программисты должны программировать. Если мне нужно с кем-то поговорить - ну загляну я к коллеге в соседний офис, пройду пару метров.

Отношение программистов к этому однозначное - open space все люто ненавидят. Кьюбиклы вспоминают с нежностью. Работать в open space невозможно, слишком шумно, сложно сосредоточиться. В open space вы узнаете о своих коллегах сильно больше чем хотели. Вы полностью в курсе, что у Васи напряженные отношения с тещей, что Оля любит бормотать когда работает, и что Максим коммуницирует ну просто без остановки и совершенно невозможно заткнуть этот фонтан красноречия. А вон в том углу ребята поют - день рождения у кого-то. Поэтому люди работают либо рано-рано утром, либо сидят на работе ночами. Либо увольняются (как вариант - не идут работать в open space).

Пока единственное разумное объясение рассаживания программистов в open space, которое я смогла придумать - так дешевле на первый взгляд. Но интересно подсчитать насколько при этом падает производительность.

Дорогие друзья! Если вы работаете (работали) в open space, опишите свои ощущения. Особенно интересно послушать людей, которым это нравится. Я пока ни одного не встречала.



Что такое TCP Incast

Mon, 26 Nov 2012 19:20:00 +0000

TCP Incast - неприятная проблема, возникающая в датацетрах, связанная с работой протокола TCP.

Возникает при следующем сценарии: некий сервер шлет запрос кластеру машин. Все эти машины ему одновременно отвечают. Ответ может быть довольно большой, несколько десятков килобайт. Эти килобайты доходят до свитча, за которым находится наш кластер. Свтич, как это сейчас модно, самый обычный. И буфер у него небольшой. Та часть данных, что в буфер не влезла, будет сброшена. Протокол TCP гарантирует доставку, так что все потерянные пакеты будут посланы еще раз. Вопрос когда. Стандартный RTO (retransmission timeout) - 200 ms. Для какого-нибудь облачного сервиса это много. В результате получаем латентность, наша распределенная система работает слишком медленно.

Здесь описание TCP Incast с правильной картинкой: TCP Incast and Cloud application performance
Еще одно хорошее описание: Fine-grained TCP Retransmissions

Как с этим можно бороться. Простой и действенный способ - уменьшить RTO до 1 ms. Еще можно изменить протокол TCP: Data Center TCP (DCTCP)

Еще пара работ с анализом проблемы с красивыми картинками:
Understanding TCP Incast Throughput Collapse in Datacenter Networks[.pdf]
Safe and Effective Fine-grained TCP Retransmissions for Datacenter Communication[.pdf]



Несколько крупных IT компаний договорились не переманивать программистов

Sun, 25 Nov 2012 01:31:00 +0000

Обсуждаемая новость последних дней - Пакт о ненападении: Parallels договорилась с «Яндексом», «Касперским» и другими не хантить программистов.

Очень странное решение. Во-первых, оно дает преимущество компаниям, которые в данной инициативе не участвуют.
Во-вторых, интересно, насколько это вообще легально и что по этому поводу думает ФАС.

Программисты недовольны, что ожидаемо. (На недовольных программистов можно посмотреть, например, тут)



Статья Storage Layout of Polymorphic Objects

Tue, 20 Nov 2012 23:34:00 +0000

Начинающим С++ программистам часто бывает непонятно каким образом и где хранятся виртуальные функции. Статья Storage Layout of Polymorphic Objects рассказ в картинках о том, как будут размещены поля и виртуальные функции объекта, рекомендую.

via Code_Analysis



Статья про сортировку 1 миллиона чисел с ограничением по памяти

Tue, 30 Oct 2012 05:19:00 +0000

На Stack Overflow кто-то сформулировал следующую задачу: по сети приходят восьмизначные числа. Их приходит миллион штук, их надо отсортировать и переслать дальше. Проблема в том, что устройство, на которое они приходят - это компьютер с 1 Мб оперативной памяти. И это вся память что есть, жесткого диска нет. Короче говоря, реализовать сортировку по-тупому не получится, ибо не лезет.

Вот здесь описано решение этой задачи 1MB Sorting Explained. Подход выбран следующий: числа накапливать и сортировать кусками. Отсортированную последовательность хранить в пожатом виде.



Отказ амазоновского облака 29-го июня

Mon, 09 Jul 2012 05:13:00 +0000

29 июня, это пятница вечер, в Северной Вирджинии штормило. Что привело к проблемам с электричеством в датацентрах Амазона. Переход на резервное питание прошел не очень гладко, поэтому некоторые американские сервисы, которые используют амазоновское облако, либо не работали вообще, либо работали с перебоями. Среди этих сервисов были Netflix, Instagram и много-много других поменьше. Пользователи расстроились, потому что пятница вечер, хочется фильмов и фоток, а тут ничего не работает.

После этих печальных событий Амазон написал отчет на тему "что это было?". Summary of the AWS Service Event in the US East Region
Netflix написал свой отчет: Lessons Netflix Learned from the AWS Storm
А Дмитрий Самовский проанализировал отчет Амазона Applying 5 Whys to Amazon EC2 Outage

Ссылки по теме:
Отказ Windows Azure 29-го февраля
Перевод статьи Summary of the Amazon EC2 and Amazon RDS Service Disruption in the US East Region



Интервью Алексея Пахунова на OpenQuality.ru

Mon, 18 Jun 2012 06:20:00 +0000

Хорошее интервью и название правильное: Нужно дело делать, а не языком трепаться
В послужном списке Алексея Пахунова, известного как «Not a kernel guy», более семи лет работы в трех подразделениях Microsoft (Office, OSD и MSR), участие в двух крупных проектах (Axapta и Windows) и нескольких мелких. Текущее место работы – Google. Низкоуровневая разработка, “серьезность” разработчика, тестирование Windows и Chrome, “шерифы” в Google, TDD “по-взрослому”, время-качество-деньги, импровизация как причина авралов – вот некоторые темы нашей беседы.



Обзор исходников Doom3

Sun, 10 Jun 2012 20:13:00 +0000

Некоторое время назад исходники Doom3 были выложены в открытый доступ. Но в исходниках без доков разбираться довольно тяжело. Так вот, Фабьен Санглар написал по ним обзор со схемами, картинками, видео. Также он позадавал вопросы Кармаку по исходникам. Если вы мечтаете писать игры, но не знаете с чего начать, то Фабьен сделал вам прекрасный подарок.

Несколько фактов оттуда:
  • Впервые в истории id Software код написан на С++, а не на С
  • В коде широко используются абстракция данных и полиморфизм
  • Темплейты используются только для низкоуровневого кода
  • По мнению Фабьена это вторая по качеству кодобаза от id Software после Doom iPhone
  • Благодаря инкапсуляции код легко читать
  • Дни оптимизации ассемблерного кода на низком уровне прошли
Бонус: Кармак рассказывает о своих экспериментах с очками виртуальной реальности и о проблемах с задержкой отрисовки. Carmack Being Carmack: A Dozen Minutes With One of Video Game’s Smartest People



Статья Hash Functions for C++ Unordered Containers

Mon, 04 Jun 2012 02:47:00 +0000

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


cannot convert from 'const Name' to 'size_t'
Это крайне невразумительное сообщение об ошибке означает, что вы должны определить хэш-функцию для своего класса, чтобы можно было его использовать с данным контейнером.
О том как это сделать есть хорошая подробная статья Hash Functions for C++ Unordered Containers.
Пример оттуда с самым простым способом определить хэш-функцию


//
// This program uses a simple user-defined function
// to provide a hash function for use in unordered_map
//
// Compile this example with Visual Studio 2010
// or g++ 4.5 using -std=c++0x
//
#include
#include
#include
#include

using namespace std;

typedef pair Name;

size_t name_hash( const Name & name )
{
return hash()(name.first) ^ hash()(name.second);
}

int main(int argc, char* argv[])
{
unordered_map ids(100, name_hash );
ids[Name("Mark", "Nelson")] = 40561;
ids[Name("Andrew","Binstock")] = 40562;
for ( auto ii = ids.begin() ; ii != ids.end() ; ii++ )
cout << ii->first.first
<< " "
<< ii->first.second
<< " : "
<< ii->second
<< endl;
return 0;
}



Обзор ультрабука ASUS Zenbook UX31E у Экслера

Tue, 15 May 2012 06:54:00 +0000

Алекс Экслер написал обзор ультрабука ASUS Zenbook UX31E. У меня такой, только UX31 без E. Отличный ультрабук, скажу я вам. Алекс жалуется на клавиатуру, у меня с ней проблем не возникало. И про камеру он ничего хорошего сказать не смог, тут я с ним соглашусь, фиговая камера.
В остальном - экран с высоким разрешением, шустрый, а главное - легкий. Для меня вес был главным критерием, обычные ноутбуки таскать мне было тяжело. Тихий, не греется, ибо SSD. В комплекте есть простенький чехол.
Короче, рекомендую. Я очень довольна.