понедельник, июля 25, 2011

Microsoft Advertising нанимает

Microsoft Advertising нанимает. В том числе в нашу команду - Delivery Engine Team. Приходите к нам.

Microsoft Advertising will be hosting a recruiting event in mid-October this year to recruit top talent from all over Russia and neighboring countries specifically focusing on Software Developers of all experience levels who are interested in relocating to the U.S. At this time, we are looking to hire engineers for the roles below. ALL roles require strong coding and development experience.

  • Software Development Engineer (SDE)
  • Software Development Engineer II (SDE II)
  • Principal SDE
  • Engineering Leads

If interested – please send your information and Resume/CV to the Recruiter organizing this event: eugenial@microsoft.com by Wednesday, August 31st. We are focused on broad-based software development skills when considering potential candidates (across the board – no specific technology/product niche requirements). If you are strong in C++, C# or JAVA, we would love to hear from you!

We are looking for strong Software Development Engineers to help us with a number of hard problems in the following areas:

The Advertising Applications Team

Front End Team
Microsoft Advertising is a unified Ad Monetization platform chartered to monetize the web and other mediums (including devices) by delivering the right ads to right customers at the right time. With the migration of Yahoo advertisers, Microsoft Advertising is now the second largest advertising solution in the world. We are going through an aggressive growth cycle and plan to expand to 35 global markets over the next couple of years. As we onboard thousands of Advertisers into our system, we want to build an intuitive user experience that serves both novice and expert advertisers, an experience that is industry leading and raises the bar for end user productivity. We offer a start-up like atmosphere with tremendous opportunities for fresh perspectives.

Middle Tier Team
Excited about architecting a truly scalable and performing public web services APIs and middle-tier web services? Excited about having a revenue impact of billions of dollars and contributing to Microsoft's bottom-line? Excited to work in a team that is fueled by passion, creativity and innovation? If your answer is yes then read on!
AdCenter is the ad based monetization platform for Microsoft online business. We are the application development team responsible for developing applications used by advertisers to create and manage their millions of ad campaigns. Challenges are to engineer a highly performing, secure & scalable customer facing web services and backend services that can support millions of transactions per day. We are looking for someone who has strong coding skill in C# /C++ and ability to solve complex problems. Candidate should demonstrate good understanding in SQL fundamentals, transact-SQL and stored procedures. Experience in design and development of SOA principles based services in an online business will be an added advantage.

Back End Team
We are working to build a world class application platform fuelled by SQL Server and other data processing technologies with unprecedented scale, performance, partitioning and geo distribution with Petabyte size databases. Our OLTP systems have 10K transactions/sec and billions of transactions flowing through the system on a daily basis. You will be working with a highly motivated team on cutting edge software using agile development strategies and rapid release cycles.

The Advertising Delivery Engine Team

The Ad Delivery Platform team owns the online ad tracking and delivery system. This is a real-time platform that hosts data and code for various auction algorithms for advertisers and content publishers, click-fraud, merchant fraud, content classification, categorization, demographics prediction, search patterns. We are storing and managing TBs of information which enables us to run the auction algorithms and choose the best ads out of hundreds of thousands choices. And we do all that in just a few milliseconds, while sustaining tens of thousands of requests per second, with an uptime of 99.9%. In this environment, only the best designs and architecture will cut it. The amount of data we handle demands building, managing and monitoring a distributed system; ensuring the system health in the presence of individual failures. The Ad Delivery Engine runs 24/7/365.

The Revenue and Relevance Team

Do you want to work on technology at the heart of online monetization? The Revenue and Relevance team is looking for skilled developers- in particular, someone who has deep knowledge of large-scale data mining, machine learning, and/or quantitative analytics for online systems. As an engineer on this team, you should be able to translate design ideas into practical implementation in code, and to improve and evolve existing systems. A qualified candidate should have a degree in computer science, math, or a statistics degree and experience with software systems and/or applied research in appropriate areas of Computer Science. The algorithms we develop produce the final selection of the ads that are presented to the user upon entering the search query. As such, our algorithms are at the very heart of the Advertising technology that monetizes Bing and Yahoo. Our technology area combines systems, machine learning, data analysis, and economics --- in short, a very technically challenging area. This work makes a direct contribution to Microsoft’s bottom line.

The Business Intelligence Team
The Microsoft Advertising Business Intelligence (BI) team in Online Advertising is responsible for providing our customers with high quality analytics and reporting, giving them vital insights into their search advertising on Bing. The Reporting team within BI delivers the Middle Tier, API, and Reporting UI components that connect Microsoft Advertising BI to our customers. We are focused on providing our customers with a great user experience, a robust Middle Tier and API, and a highly reliable operational system. We work simultaneously on delivering a great product for our customers, improving our engineering processes, and growing our SDE’s skills and abilities.

Microsoft: Online Services Division: Display Advertising Platform

Do you want to be part of one of the fastest growing industries in software today? Do you want to help Microsoft grow a $2 billion per year business to $5 billion? Interested in developing online services, and being part of an agile development team that ships every week? If so, then we have the right opportunity for you!

The Display Advertising group is…

  • Delivering the technologies running our online display businesses: Atlas Media Console, Microsoft Media Network (MMN), AdManager, RAPT, and AdExpert - which powers the MSN portal and represented partners.
  • Competing in a segment of the online advertising industry that is seeing explosive innovation and increased competition.
  • Poised to make rapid advances in online advertising.
  • Chartered with building the next generation of display advertiser systems.

Our Display Advertising products and services:

  • Are responsible for monetizing both internal (MSN, Hotmail, MSNBC, etc.) as well as 3rd party display properties.
  • Handle 700+ billion monthly ad requests across globally dispersed data centers
  • Deliver over $2 billion in annual advertising revenue.

вторник, июля 12, 2011

Порядок инициализации статических переменных

Порядок инициализации глобальных статических переменных из разных единиц трансляции не определен. По-английский это называется красивым термином static initialization order fiasco. Это означает, что если у вас в разных файлах определены глобальные статические переменные x и y, то лучше, чтобы они не зависели одна от другой, а то тут могут быть неприятные сюрпризы.

Это было скучная теория. А вот грустные примеры из практики. Пишем много-много кода с большим количеством нетривиальных глобальных статических переменных. Они как-то самопроизвольно начинают друг от друга зависеть. До поры, до времени компиляция идет таким путем, что они нормально инициализируются. Но в один прекрасный день, после добавления какого-то куска кода, они вдруг начинают инициализироваться в немного другом порядке. И это означает, что надо переосмыслить весь проект целиком. Прямо сейчас.

Updated 12.07.2011:
В комментариях посоветовали два способа продлить агонию, т.е. заставить компилятор инициализировать глобальные переменные в определенном порядке.
Для GCC это init_priority
Для VC++ #pragma init_seg

P.S. Для примеров из жизни я обычно не указываю когда и кем были допущены какие-то ошибки. Это информация для того, чтобы научиться, а не для того, чтобы поглумиться. Мы все ошибаемся.

Статья "Девушки, которые выбирают программирование"

Написала статью для developers.org.ua про ситуацию с привлечением девушек в IT.
Девушки, которые выбирают программирование.
Она породила немного флейма.