• Automation: быстрый старт или «А ну-ка, Excel, пиши за меня сам!»

      Небольшой топик-шпаргалка для быстрого написания скриптов для автоматической обработки документов ms office'а. А так же для помощи в преодолении синдрома чистого листа.

      Как правильно заметили в недавнем топике, сама работа скрипта может быть и не быстрой, но чаще важнее сам результат, да и объёмы далеко не всегда такие большие. Зато Automation позволяет написать скрипт практически на любом языке. Здесь я выдам заготовки для JavaScript и IronPython, но, надеюсь, в комментариях найдётся место и для других языков (например, на PowerShell).
      Поехали
      • +2
      • 20.2k
      • 2
    • Обновление по онлайн-курсам Stanford University

        Понимаю, что все заинтересованные уже получили оповещение по почте, но для тех кто не в танке — объявление: онлайн курсы от Stanford University наконец-то начинаются.

        Probabilistic Graphical Models — начинается 19 марта, лекции пока не доступны.

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

        Natural Language Processing — начало с 12 марта, первое задание Spamlord должно быть уже выполнено к 19 марта, так что регистрируемся.

        Design and Analysis of Algorithms I — курс по проектированию и анализу алгоритмов.

        Cryptography — доступны видео первой недели обучения.

        Game theory — начало 19 марта, материалов на сайт пока нет, но первая порция будет доступна 10 марта.

        SaaS уже начался, но для того, чтобы плодотворно учить этот курс, необходима книга (10$). Этот курс от University of California, Berkeley.

        Model thinking уже идет практически целый месяц (на самом деле курс основан на материалах University of Michigan, а не Stanford).

        Другие курсы в процессе доработки

        Computer Science 101, Computer Vision (University of California, Berkeley), Machine Learning, Making Green Buildings, Anatomy, Computer Security

        Да, все курсы переехали на платформу Coursera. Поэтому теперь эти лекции смело можно называть «Обучение от Coursera», тем более спектр университетов увеличился.

        Update:

        Information theory — 12 марта появится первая порция лекций, тоже самое для Human-Computer Interaction.

        За апдейтом апдейт: новый виток Machine learning тоже начинается 12 марта.
      • Расширение функциональности стандартного WinForms TabControl

          Случилось недавно так, что понадобилось в одном проекте использовать компонент TabControl. Стандартный компонент, ничего необычного, достаточно удобный. Нюанс заключался в том, что нужно было использовать свой тип вкладок на основе перегруженного TabPage. Кроме этого, необходимо было позволить пользователю добавлять вкладки самому в процессе работы. Выглядеть оно должно было примерно так:
          image

          Радует, что стандартные компоненты позволяют делать с ними достаточно много извращений.
          Читать дальше →
        • Использование IoC контейнеров. За и Против

            В свете выхода новой версии Enterprise Library, одной из важнейших частей которой является IoC-контейнер Unity, лично я ожидаю всплеск интереса к теме IoC(Inversion of Control) контейнеров, которые, по сути, являются реализацией достаточно известного паттерна Service Locator.

            В этом топике я хотел бы подискутировать на тему «правильного» использования таких контейнеров, а также предостеречь новичков от применения его «везде и всюду». Ну и просто интересующимся возможностями «новых технологий» тоже должно быть любопытно.
            Читать дальше →
          • Сравнение производительности IoC-контейнеров под Windows Phone

            Доброго времени, уважаемые хабражители!

            Для смартфона оптимальность архитектуры приложений особенно важна, поэтому я решил провести сравнение по производительности бесплатных и открытых библиотек контейнеров, доступных для Windows Phone.
            Удостоились внимания следующие библиотеки (самые последние версии на момент тестирования):
            Читать дальше →
          • Сравнение объектов в C#.NET

            C#.NET предлагает множество способов сравнить объекты, как экземпляры классов, так и структур. Способов так много, что без упорядочения этих способов и понимания их грамотного использования и имплементации (при наличии возможности переопределения), в голове, неминуемо, образуется каша.
            Читать дальше →
          • Зачем Google использует домен Duck.com?

              На сайте Hacker News развернулась интересная дискуссия о том, с какой целью Google поставил редирект на сайте Duck.com. Недоброжелатели предполагают, что это некий вариант тайпосквоттинга против «конкурента» DuckDuckGo.com.

              DuckDuckGo.com — гибридный поисковик, который работает с 2008 года, без поискового спама, почти без рекламы, без слежки за пользователями (полностью анонимный), поддерживает горячие клавиши и другие классные штуки. В общем, эдакая гиковская «оппозиция» Google, созданная для крошечной группы протестного электората. Аудитория сайта в прошлом году составляла около 200 тыс. в день, вообще говоря, про него почти никто не знает.
              Читать дальше →
            • Паттерны ООП в метафорах

                Большинство литературы посвященной паттернам в ООП (объектно-ориентированном программировании), как правило, объясняются на примерах с самим кодом. И это правильный подход, так как паттерны ООП уже по-умолчанию предназначаются для людей, которые знают что такое программирование и суть ООП. Однако порой требуется заинтересовать этой темой людей, которые в этом совершенно ничего не понимают, например «не-программистов» или же просто начинающих «компьютерщиков». Именно с этой целью и был подготовлен данный материал, который призван объяснить человеку любого уровня знаний, что такое паттерн ООП и, возможно, привлечет в ряды программистов новых «адептов», ведь программирование это на самом деле очень интересно.
                Статья предназначена исключительно для новичков, так что «старожилы» ничего нового для себя не узнают. В основном статья описывает известные паттерны из книги «Приемы объектно-ориентированного программирования. Шаблоны проектирования.», но более популярным и простым языком.
                Читать дальше →
              • Когда использовать Parallel.ForEach, а когда PLINQ

                • Translation

                Введение


                Обычно, при оптимизации программы для многоядерных компьютеров первым шагом является выяснение возможности разделения алгоритма на части, выполняющиеся параллельно. Если для решения задачи необходимо параллельно обрабатывать отдельные элементы из большого набора данных, то первыми кандидатами станут новые возможности параллельности в .NET Framework 4: Parallel.ForEach и Parallel LINQ (PLINQ)

                Parallel.ForEach


                Класс Parallel содержит метод ForEach, представляющий собой многопоточную версию обычного цикла foreach в C#. Подобно обычному foreach, Parallel.ForEach выполняет итерации над перечислимыми данными (enumerable), но с использованием множества потоков. Одна из более часто используемых перегрузок Parallel.ForEach выглядит следующим образом:
                
                public static ParallelLoopResult ForEach<TSource>(
                			 IEnumerable<TSource> source,
                			 Action<TSource> body)
                

                Ienumerable указывает на последовательность, по которой нужно выполнить итерации, а Action body задает делегат, вызываемый для каждого элемента. Полный список перегрузок Parallel.ForEach можно найти здесь.

                PLINQ


                Родственный с Parallel.ForEach PLINQ представляет собой модель программирования для паралелльных операций над данными. Пользователь определяет операцию из стандартного набора операторов, включающих в себя проекции, фильтры, агрегирование и т.д. Подобно Parallel.ForEach PLINQ достигает параллельности, разбивая входную последовательность на части и обрабатывая элементы в разных потоках.
                В статье выделяются различия между этими двумя подходами к параллельности. Разбираются сценарии использования, в которых лучше всего использовать Parallel.ForEach вместо PLINQ и наоборот.

                Выполнение независимых операций


                Читать дальше →
                • +67
                • 48.4k
                • 9
              • Наперегонки с машиной: вызовы и перспективы экономики будущего


                  Одна из проблем пост-кризисной Америки — высокий уровень безработицы. Значительная часть из 12 миллионов американцев, потерявших работу в ходе глобального экономического кризиса 2007-2009 годов так и не смогли найти новое рабочее место, несмотря на восстановление экономики и рекордные показатели крупных американских корпораций. Ведущие экономисты не могут назвать точных причин сложившейся ситуации. Кто-то говорит о цикличности в экономике и недостаточности роста. Другие заявляют о стагнации и снижении американского динамизма — способности и склонности к инновациям. Третьи считают что наступил “Конец работы” — новые технологии заменят труд рабочих.
                  Исследователи из MIT Эрик Бриньолфссон (Erik Brynjolofsson) и Эндрю Макафи (Andrew McAfee) видят причину в том, что многие работники проигрывают в гонке против ускоряющегося прогресса информационных технологий. Но, полагают, что развитие технологий открывает и множество новых возможностей, когда человек и машина дополнят сильные стороны друг друга.

                  Пересказ-перевод-рецензия книги “Race against the machine” by Erik Brynjolofsson and Andrew McAfee.
                  Читать дальше →
                • Программная идиома, о которой вы никогда не слышали

                  • Translation
                  Вот некоторые последовательности событий:

                  Достать грабли из сарая, сгрести листья во дворе, затем поставить грабли обратно в сарай.

                  Полететь в Сиэтл, посмотреть достопримечательности, затем полететь домой.

                  Вставить ключ в дверь, открыть её, затем достать ключ из двери.

                  Включить экран телефона, посмотреть время, затем отключить его.


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

                  Открыть файл, прочитать содержимое, закрыть файл.

                  Выделить блок памяти, использовать его для чего-то, освободить память.

                  Загрузить содержимое ячейки памяти в регистр, изменить его, отправить обратно в память.

                  Читать дальше →
                • Сказка о разработке интерактивных книг



                    В этой статье мы хотим поделиться нашим впечатлением и опытом о разработке двух интерактивных книг для детей: «История о Мисс Моппет» и «Сказка о Котёнке Томе».

                    Начнём с того, что отметим: самое важное в книге – это текст. Именно поэтому для книг очень важным является перевод, а применительно к приложениям на App Store: для книг-приложений, очень важна качественная локализация.

                    Читая книгу-приложение, дети и родители больше всего внимания обращают на интерактивность, на анимацию, на красочность и яркость картинок, и в последнюю очередь на буквы. Однако в отличие от англоязычных детей, для которых стараются разработчики всего мира, русские дети не так избалованы наличием на App Store интерактивных книг на русском языке с озвучкой, то есть книг для самых маленьких, где подсвечивается читаемый текст, и можно послушать каждое слово по отдельности, или даже отдельную букву в слове! Такие книги помогают изучать языки.

                    Мы решили делать интерактивные книги на русском языке с озвучкой текста.
                    Читать дальше →
                  • Как создавать «зеленый» код

                      Что такое энерго-эффективность в применении к мобильным платформам? Простыми словами это возможность сделать больше, затратив при этом меньше энергии.

                      Каждому пользователю хотелось бы как можно реже заряжать свое мобильное устройство, будь то смартфон, нетбук, ультрабук. Возможно, когда-нибудь наступит момент, когда устройство нужно будет зарядить всего один раз, после его покупки и пользоваться до тех пор пока оно не надоест или морально не устареет.
                      Читать дальше →
                    • Регистрация глобальных «хоткеев» при использовании WPF

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

                      Читать дальше →
                    • Обратная совместимость в iOS SDK


                        Apple никогда официально не заявляла о несовместимостях между разными версиями своих OS. И всё же каждый крупный релиз они что-то меняют в ядре операционки — фиксят баги и привносят новые. И иногда именно фикс багов, с которыми все привыкли жить, добавляет новых трудностей – в iOS 3 ты не задумываясь добавлял 20 пикселей там, где iOS 4 добавляет их сама, и в итоге твоя модальная вьюшка уезжает на 20 лишних пикселей вверх.

                        Но это не самая страшная разновидность несовместимостей – их можно продебажить, пофиксить и выпустить новый билд. Также легко устраняется, например, ставшее уже традиционным изменение стандартного контрола для проигрывания видео – в каждой новой iOS Apple что-то добавляет, модифицирует, причём полностью забивая на старый интерфейс без всяких там deprecated за пару версий до выпиливания – так, например, в iOS 3 он был обычной вьюшкой от UIView, а в iOS 4 стал резко вью-контроллером, а старая MPMoviePlayerView исчезла.

                        Но это тоже подвластно дебагеру, на форумах можно за 10 секунд найти готовый гибридный код фикса такой, что код будет работать везде.

                        Но относительно новая iOS 5 принесла ещё больше неожиданностей. Об этом свидетельствует хотя бы тот факт, что в последних релизах популярных айфон-приложений обязательно присутствует строчка “Fixed iOS 5 issues” – средний пользователь айпада находит примерно по 10 апдейтов приложений каждый день. Ниже я расскажу о неочевидной проблеме обратной совместимости iOS 4 и iOS 5, с которой мне пришлось столкнуться на своей шкуре и сполна хлебнуть горя.
                        Читать дальше →
                      • По следам разрушителей мифов или Почему Android тормозит, а %мобильная ОС% нет?

                        • Translation


                        Добрый день, Хабр!

                        Мой предыдущий перевод статьи про аппаратное ускорение в Android вызвал бурное обсуждение в комментариях, основным мотивом которого был вопрос «так почему же тормозит Android?». Аналогичная ситуация наблюдается по всему интернету, и потому я привожу ниже еще один очень интересный и свежий перевод (снова из Google+), где автор Andrew Munn (о нем ниже) анализирует настоящие причины тормозов Android. С удовольствием прочитал этот пост сам и горд возможностью первым поделится им с хабрасообществом.

                        Читать дальше →
                      • Impressive Solids: делаем игру на C# под OpenGL, часть I

                          Once Upon a Time in America


                          Когда-то, году в 2002-м, на мой компьютер попала интересная игрушка под названием Amazing Blocks. Игра, так сказать, класса тетриса (подробное описание геймплея приведено ниже); она очень полюбилась моей маме, которая играла в эту игру часами. Однако был досадный недостаток: после, кажется, 10 запусков игра начинала требовать регистрацию, которая, что удивительно, была бесплатной, но через интернет, что, само собой, являлось непреодолимым препятствием, поскольку интернета-то никакого тогда в наших краях в глаза не видывали, хоть и слыхали, что есть такая штука. Приходилось постоянно переустанавливать.

                          Через года три, когда интернет уже провели, а игра успела стать shareware и начать просить за регистрацию сколько-то денег, я попробовал её зарегистрировать, однако сайт производителя был к тому времени скорее мёртв, чем жив, и, по-видимому, остаётся таким и по сей день. В интернете легко находится shareware-версия игры, множество, не побоюсь этого слова, кейгенов, являющихся на самом деле троянами, и ни одной возможности зарегистрировать игру, чтобы мама могла в неё играть уже совсем на другом компьютере. В какой-то момент я подумал: а почему бы просто самому не сделать аналогичную игру и решить тем самым проблему на корню? Заодно из этого может получится какой-никакой hello-world по разработке простой игры для ПК в современных условиях — который я и предлагаю вниманию читателей.

                          image Итак, что же за игру мы будем делать? Суть такова. В прямоугольном стакане 7×13 падает горизонтальная палка, состоящая из 3 цветных блоков (всего есть 5 цветов). Во время движения её можно двигать вправо-влево, а также менять блоки местами в порядке ротации справа налево (красный, зелёный, синий → зелёный, синий, красный). Как только палка коснётся пола стакана или же какого-нибудь из находящихся в стакане неподвижных блоков, ею больше управлять нельзя. Блоки, составляющие палку, продолжают падение отдельно до тех пор, пока не станут на неподвижный блок или пол стакана. После этого проверяется, не получилась ли в стакане горизонтальная, вертикальная или диагональная линия из трёх или более блоков одного цвета; такие линии уничтожаются. Если сверху уничтоженной линии были блоки, они сползают вниз на образовавшееся пустое место, после этого снова происходит уничтожение образовавшихся линий. Когда всё устаканилось, сверху начинает падать новая палка. За выстраивание уничтожаемых линий игрок получает очки. Игра заканчивается, когда стакан заполнен доверху.

                          Технологии. Игру будем делать на C# (давно хотел посмотреть, что же это такое), OpenGL (DirectX работает только под Windows, а я больше люблю Linux), Mercurial для контроля версий (писать код без VCS — неуважение к себе).

                          Игра будет называться Impressive Solids.

                          Читать дальше →
                        • Контроль бизнеса и финансовые отчеты

                            «Первое правило бизнеса – защищай свои инвестиции»
                            этикет банкира 1775 г.

                            Если в те времена инвестиции защищались с оружием в руках, то в современном мире таким оружием становятся информационные технологии.

                            Десять лет назад у меня было несколько бизнес-единиц. Я представлял себя в будущем, сидящим перед десятком мониторов, на которых отражается информация о состоянии десятков, сотен бизнесов, принадлежащих мне. Тогда я искренне верил, что это возможно (нажал одну кнопку и все понятно). Но чем больше становилось у меня бизнесов, тем меньше я их контролировал. И тем больше терял.
                            Основной причиной всех потерь был плохой контроль бизнеса. Тогда встал вопрос:

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

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

                            Сегодня я готов поделиться с читателями хабра некоторыми своими знаниями.
                            Читать дальше →
                          • Пишем гаджет Windows Sidebar с нуля

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

                            Сразу покажу то, что получилось в итоге


                            Читать дальше →