Блог Майкова

«Информация на данном сайте предоставляется "КАК ЕСТЬ" без каких-либо гарантий и передачи прав. Мнения, высказанные здесь, являются отражением моего личного взгляда, а не позиции работодателя.»

  • Однопиксельные гифы и Silverlight

    В истории компьютерной отрасли много вещей использовали не по назначению, ну или придумывали новое использование какой-то идее, кому как больше нравиться. Но самое вопиющее извращение произошло в том, как эволюционировал HTML. Изначально HTML появился для разметки текста. Т.е., можно было отметить где в тестке заголовок, где какой параграф, и браузер выведет текст в наиболее удобочитаемом виде в зависимости от размеров окна, возможностей компьютера и т.д.  С течением времени добавили формы, кнопочки, JavaScript, и на HTML стали строить то, что называется пользовательским интерфейсов Веб-приложений. Совершенно понятно, что таблицы предназначены для вывода таблиц в тексте, а не для выравнивания полей ввода и кнопок, дивы то же, но ежики продолжают колоться и есть кактусы. Однопиксельные гифы это вообще предел маразма. Используются чтобы чего-то там выравнивать. Если хорошенько подумать, то гиф - это изображение - то, что отражается на сетчатке глаза. Как на сетчатке может отразиться однопиксельное отображение? Другой пример использования однопиксельных Гифов - здесь (http://genoma.unsam.edu.ar/~fernan/example.html). Давайте из них складывать целые рисунки в HTML. Давайте купим новейший компьютер с графическим ускорителем, и вдруг начнем себя ограничивать, выводить графику через HTML, и для вывода каждого пикселя делать отдельный HTTP запрос. Это все равно, что купить огромный дом, но жить в прихожей, а на второй этаж даже не подниматься, потому что лень открыть дверь из прихожей в дом.

    То же самое случилось с JavaScript. Это отличный язык, когда нужно быстренько что-нибудь сделать, в 20 строках кода. Однако для больших программ JavaScript ни куда не годится. Совершенно невозможно писать библиотеки Например, приходится делать усилия, чтобы Asp.net Ajax Extensions работал со всеми Asp.net контролами. Чего стоит хотя бы однопоточность. Поэтому, сейчас разрабатывается куча проектов, призванных облегчить использования JavaScript для чего-то более серьезного. Например, Script#, или тот же Asp.Net ajax extensions. По-моему, от этого все только более запутывается. Несмотря на такие трудности, на JavaScript сейчас пишут просто огромные программы. В качестве иллюстрации - кто то построил эмуляцию Unix http://www.masswerk.at/jsuix/ , включая виртуальную машину, управление процессами, терминал, командную строку и т.д.

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

    Теперь о Silverlight. Это вполне разумная попытка предоставить человеческие инструменты для создания web-программ. Вместо HTML для описания пользовательского интерфейса применяется XAML, который не требует однопиксельных гифов. Для программирования можно использовать C#,в котором есть и типы, и нити, и можно писать библиотеки, и с производителностью получше чем у C#. Будет интересно посмотреть, сколько человек найдет в себе силы войти в дом (установить Silverlight), тем более что ключ очень легкий (меньше одного мегабайта), и подходит к большинству домов (FireFox, Macintosh).

    Напоследок,в качестве демонстрации возможостей Silverlight интерфейс Windows Vista (включая прозрачность!) в окне браузера http://www.windowsvista.si/main.htm

     

  • Еще одно выступление

    Сегодня ко мне в группу приходил очень интересный человек. Larry Lessig - юрист и активист в области IT. Во время антимонопольного дела против Майкрософт находился "по ту сторону баррикад". В данный момент занимается Creative Commons. В выступлении Ларри расказывал про интересную закономерность, которую он обнаружил. Он утверждает, что культура развивается по циклу free->locked->unlocked->relocked. Например, в начале конце 19-ого века, до изобретения звукозаписи, люди собирались вечерами и сами пели. Т.е., люди сами своими руками создавали то, что сейчас называется контент. То же самое было чуть раньше с печатным делом, печатный стан стоил очень дешево, и издавалось огромное множество листовок. Сразу после изобретения радио, появилось множество радиостанций вещающих "из чердака". Потом появилась звукозаписывающие компании, издательства, радиочастоты урегулировали и продали корпорациям. Своботы творчества не стало, люди перешли из разряда "творцов" в разряд телезрителей и радиослушателей. Сейчас, в связи с развитием веба снова появилась возможность "творить". На uTube, Flickr и иже с ними "Креатив так и прет". И пока это вроде все бесплатно, все всем доступно и т.д. Ларри утверждает, что все не так просто, и в скором времени большие компании приложат к этому свою руку. Например, на uTube очень легко закачать видео, можно просмотреть, но скачать уже не просто. А кому принадлежит фотография на Flickr? Yahoo или фотографу? Чтобы опять не вышло "как всегда", Ларри придумал концепцию Creative Commons. Это такая лицензия, которая позволяет автору контента защитить свои права, при этом, не ущемляя интересов зрителей. (практически тоже самое выступление можно увидеть здесь http://www.ted.com/speakers/view/id/167).

    Почему это важно для моей группы? Многие наши проекты предназначены для работы с UGC (User Genereated Content) о чем говорит Ларри. И нужно понять, как правильно решать вопрос правообладания на контент.

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

    На закуску, интересный пример "креатива" : http://www.youtube.com/watch?v=rhlHUTBgAMw

     

  • Computer Science

    Отличное выступление http://norfolk.cs.washington.edu/htbin-post/unrestricted/colloq/details.cgi?id=648

    Бывший декан нашего факультета University of Washington, Computer Science, а теперь председатель Computing Community Consortium говорит о роли Computer Science и об очень интересных и многообещающих проектах.

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

  • Нити

    Этот код (на С#) содержит интересную ошибку:

          public class ParallelPageFetcher

          {

                public ParallelPageFetcher(string cachePath)

                {

                      Thread t = new Thread(new ThreadStart(RunRequests));

                      t.Start();

                }

     

                void RunRequests()

                {

                      // blaah

                }

          }

    Ошибка заключается в том, что на обьект под именем t не сохраняется ссылок, и он неминуемо оказывается "сьеденным" сборщиком мусора. Что влечет за собой завершение работы нити. Внешне эта ошибка ничем себя не проявляет. Просто нить перестает работать. Чтобы починить, достаточно сделать t переменной класса. Не попадитесь!

    Кстати, по названию класса можете сделать косвенные выводу чем я сейчас занимаюсь. Позже напишу подробнее. 

     

  • work hard, play hard

    На прошлой неделе работа над Windows Vista была завершена, и образ диска был отправлен на фабрику по производству DVD. По этому поводу в гараже 26-ого здания была организована грандиозная вечеринка. По этому поводу, положу здесь фотографию, которую я недавно нашел на старом телефоне:

     

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

    Эту фотографию я сделал на вечеринке по поводу выпуска Windows XP SP2. Человек, пьющий пиво из описанного мной прибора в столь неудобной позиции - старший вице-президент компании Майкрософт Брайан Валентайн. Первая его большая заслуга - выпуск Windows 2000. Помимо выполнения прямы обязанностей, Брайан по жизни заводила. На WIM (Windows Integration Meeting, а по сущности, WIM - это вечеринка раз в месяц по пятницам), Брайан можно сказать заводил толпу, отмачивая одну шутку за одной. Почему в прошедшем времени, к сожалению, в сентябре Валентайн ушел в Амазон.

    Кто стоит в костюме аборигена и держит Брайана за ногу, я не помню, но тоже кто-то из крупных менеджеров SP2.

  • Решение

    Решение задачи из предыдущего поста http://blogs.technet.com/maykov/archive/2006/06/21/438071.aspx

    Заводим два указателя - быстрый и медленный. Допустим, быстрый прыгает через два элемента, а медленный идет последовательно по каждому элементу. Если они встретятся - есть цикл. Если дойдут до конца - нет. Тут есть две проблемы:

    1. Доказать, что они встретятся.

    2. Оценить число итераций в случае если есть цикл. Когда его нет, очевидно число итераций n/m, где n - длина списка, а m - шаг быстрого указателя.

  • Задачка

    Очень распространенная задача на интервью в Майкрософт:

     

    Есть связанный список. Нужно выяснить, не "сломался" ли он. Т.е. последний элемент стал указывать не на NULL, а на какой-то элемент посредине.

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

    Оптимизация - идти по списку и заносить элементы в хеш-таблицу. Тогда проверка, был ли уже элемент займет константное время и сложность такого решения линейна. Однако, требуется O(n) памяти для таблицы.

     

    Существует линейное решение, не требуещее памяти. Напишу его в следующий раз, а если есть идеи - оставьте в комментариях.

     

  • Привет всем!

    Привет, уважаемое IT-сообщество. Меня зовут Алексей Майков и я работаю программистом в группе TabletPC. Моя группа занимается разработкой распознавателей рукописной речи. Т.е., вы пишете прямо на экране своего ноутбука, а распознаватель преобразует Ваш почерк в текст. Для создания такой программы требуется очень много образцов почерка. Сотни миллионов слов. Последний год я работал над системой для сбора и хранения таких образцов. Довольно традиционная система, основанная на SQL сервере, Веб сервисах, и т.д. Однако, мы натолкнулись на некоторое число интересных особенностей, о которых я и раскажу.
     
     

  • Проверка связи

    Проверка


© 2008 Microsoft Corporation. All rights reserved. Terms of Use  |  Trademarks  |  Privacy Statement
Microsoft
Page view tracker