Американская Green Card - это вид на жительство, который позволяет жить и работать в США.
Если вы застряли в чужой стране в непонятном статусе это может быть неплохим вариантом.
программирование для прагматиков
Американская Green Card - это вид на жительство, который позволяет жить и работать в США.
Если вы застряли в чужой стране в непонятном статусе это может быть неплохим вариантом.
Thread safety, custom allocators, всё как мы любим.
CupOfT #1: C++, const and thread-safety
CupOfT #2: C++ and safe raw pointers
CupOfT #3: threads + stateful allocators = ♥
Я вчера была на оптимистичной презентации Майкрософта, Дэвид Уэкер рассказывал о разработке квантового компьютера. Самого компьютера у них нет, у них даже кубита ещё нет. Но, говорит, вот-вот будет. У них уже инфраструктура для Ажура расписана, куда они будут этот квантовый компьютер подключать.
Сейчас они отстают, потому что у IBM и Rigetti кубиты уже есть. Но кубит, который разрабатывает Майкрософт, всем кубитам кубит. Они разрабатывают топологический кубит по работам Алексея Китаева. И для того, чтобы сделать полноценный квантовый компьютер на 200 логических кубитов, им нужно будет ~2000-4000 физических. В то время как их конкурентам нужны будут миллионы кубитов.
И если у них всё получится, Майкрософт будет править миром.
Про квантовый компьютер DWave осторожно сказал, что он представляет теоретический интерес. Но всё, что может DWave, можно эмулировать.
Про отладку был вопрос. Как отлаживать программы на реальном квантовом компьютере пока еще не совсем не понятно, понятно одно, что это будет боль.
Про Microsoft Quantum можно почитать тут: microsoft.com/quantum
В наших краях распространены встречи с представителями той или иной компании, которые рассказывают о компании, о работе в ней, об используемых технологиях. Заодно заманивают на работу.
Я побывала на одной из таких встреч, организованных Амазоном. Они расширяют свой рекламный отдел и активно нанимают. Поговорила с одним из начальников. Пишут они на Java, что ожидаемо. Чтобы латентность была низкой переиспользуют объекты. В качестве хранилища данных используют что-то самописное, что именно он мне не сказал.
Ссылки по теме:
Amazon Sets Its Sights on the $88 Billion Online Ad Market
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:
Об этом полезно знать при использовании умных указателей в С++:
У shared_ptr есть конструктор, который позволяет создавать зависимости между shared_ptr'ами. (std::shared_ptr's secret constructor by Anthony Williams)
Допустим, я хочу создать указатель на объект типа Y, py, который является членом экземпляра класса X, px. Мне нужно, чтобы px не удалялся, пока я не закончу работать с py.
void bar(){
std::shared_ptr<X> px(std::make_shared<X>());
std::shared_ptr<Y> py(px,&px->y);
store_for_later(py);
} // our X object is kept alive
void f(Foo * pf) {
globalFoo = pf; // creates a global alias
}
unique_ptr<Foo> pFoo(new Foo());
f(pFoo.get()); // leaks an alias
#include <memory>
#include <iostream>
struct Good: std::enable_shared_from_this<Good>
{
std::shared_ptr<Good> getptr() {
return shared_from_this();
}
};
struct Bad
{
std::shared_ptr<Bad> getptr() {
return std::shared_ptr<Bad>(this);
}
~Bad() { std::cout << "Bad::~Bad() called\n"; }
};
int main()
{
// Good: the two shared_ptr's share the same object
std::shared_ptr<Good> gp1(new Good);
std::shared_ptr<Good> 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<Bad> bp1(new Bad);
std::shared_ptr<Bad> bp2 = bp1->getptr();
std::cout << "bp2.use_count() = " << bp2.use_count() << '\n';
} // UB: double-delete of Bad
Update 30.10.2015: Я закончила принимать резюме. Всем спасибо!
После приезда в США я обнаружила неожиданные пробелы в своем английском. И это оказался отнюдь не герундий. Если вы собираетесь ехать в США или работать с американцами, проверьте себя.
Вы не знаете цифры
Не верите мне, да?
Возмущены? И прямо сейчас готовы это опровергнуть. "Алена, ты чего, смотри: one, two ..."
А теперь быстро и без запинки попробуйте произнести на английском свой номер телефона. На память, не подглядывая. Попросите друга быстро произнести 10 случайных цифр и запишите их на бумагу. Вам придется это делать часто.
Некоторое время спустя я осознала, что цифры в английском тексте я читала по-русски. И никогда об этом не задумывалась.
Здесь многие вопросы решаются по телефону. Вам придется много и часто проговаривать свой номер телефона (а он будет новый). Номер своей кредитной карты. Иногда на той стороне будет робот.
Напоминаю, что тут очень любят считать сотнями 1200 - twelve hundred.
Вы не знаете буквы
Тоже возмущаетесь, но уже осторожнее?
Проверьте, что вы можете проговорить по буквам свое имя, опять же, никуда не подглядывая. Поповы могут это упражнение пропустить. Мой пламенный привет Щёголевым и Щербаковым.
В местных школах этому специально учат, кстати.
Поскольку памятью в С++ приложении программист управляет самостоятельно, то и за фрагментацией памяти приходится следить самим. Память фрагментируется, если приложение работает достаточно долго и при этом активно работает с памятью. Не такая редкая проблема. Я это видела в играх, игрок бегает, юнитов убивает, локации меняет, надо под это память выделять и потом освобождать. И в высоконагруженных системах, запросы приходят, надо под них память выделять, потом освобождать.
Чем это плохо? Во-первых, память может внезапно закончиться. Во-вторых может просесть производительность. Вот тут можно почитать историю как это выглядит на практике: Out of memory
Вот тут с картинками написано как оно происходит: Holier Than Thou
Но не написано - а что с этим делать-то? Итак, с чем я работала.
Region-based memory management. Выделяем память большим куском, например, под уровень в игре. Популярный термин для такого куска - "арена". Потом уже внутри этого куска создаем нужные нам объекты. Когда все это стало не нужно - весь кусок памяти освобождаем. Заодно с утечками памяти проблем меньше.
Арену можно использовать вместе с STL, см. "STL custom allocators".
Boost.Pool. Там есть несколько разных интерфейсов, я использовала object_pool, который помогает эффективнее создавать и удалять большое количество сравнительно маленьких объектов.
Также я видела разное креативное использование placement new, как правило его можно заменить Boost.Pool'ом.
Категории: cpp, gamedev, programming
Я сейчас в работе активно использую фичи C++11 и C++14, чего и вам рекомендую. Вот вам отличные книги по новыму стандарту.
С++ Concurrency in Action: Practical Multithreading by Anthony Williams
The C++ Standard Library: A Tutorial and Reference (2nd Edition) by Nicolai M. JosuttisДесять лет назад я написала первый пост в этот блог. Не ожидала, что он продержится так долго.
После рождения дочки я стала писать сюда несколько реже. Ну вы, наверное, заметили. Моя активность сместилась в Твиттер. https://twitter.com/alenacpp
Другие социальные сети где я есть
http://instagram.com/alenacpp/ - я ни разу не фотограф, но поддалась всеобщей моде
http://facebook.com/alenacpp - использую для чтения Facebook'а, также туда идет трансляция из твиттера. В друзья добавляю тех, кого читаю.
Прочитала новую книгу Страуструпа "A Tour of C++". Это очень краткое введение в С++11. Рекомендуется новичкам, которые уже умеют программировать на каком-то языке. Но мне такая рекомендация не нравится, потому что книга уж очень лаконичная. Она подойдет скорее человеку, который когда-то писал на С++, подзабыл, а сейчас надо срочно вспомнить и заодно понять чего нового появилось за прошедшее время.
Если вы на C++ пишете все время и в курсе изменений в C++11, то ничего нового вы там не найдете.
Категории: books, cpp, programming
Если очень хочется, то можно звать 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'ов.
Отличный курс. Достаточный, для того чтобы получить общее представление о машинном обучении и понять, хочется ли заниматься этим дальше. Народ жалуется, что курс слишком упрощен. Не соглашусь, для вводного курса вполне нормальная сложность. Нейронные сети есть, SVM есть. К лекциям даются упражнения для закрепления материала, они из серии "подставить правильные цифры в формулу". Реальных задач по машинному обучению там нет, но это и правильно - такие задачи занимают недели и месяцы, их в такой курс не впихнешь.
Кстати, Эндрю Нг читает свои лекции опять прямо сейчас. Еще не поздно присоединиться! Stanford Machine Learning