?

Log in

No account? Create an account

Entries by tag: sun

прелести удалённой работы
жирафа
_navi_
Вот уж бы никогда не подумал, что буду в 3 часа ночи поднимать удалённый application server, стоящий под столом в маленькой комнатке на противоположном "краю земли", да ещё и который я сам только что завалил, смешно подумать, неудачной заливкой xhtml страницы. Корявый application server не выдержал  такого издевательства и испортил метаданные домена.

странное ценообразование
пакман
_navi_
Никак не могу понять, как тут получается цена ланча. В одни дни у меня уходит больше 10 долларов, в другие дни, когда я даже суммирую в уме стоимости всех продуктов что я взял и получается явно больше 10, с меня берут чуть больше 8 долларов (даже несмотря на мои протесты, мол, "пересчитайте, я тут столько всего набрал!"). Но сегодня по всем правилам должно было получиться ну хотя бы 8 долларов: я взял громадный стейк с чем-то кручёным и похожим на картофель фри, какие-то овощи по-мелочи и громадный поллитровый стакан сока (который сам по-себе стоит доллара 2 наверно в кафешках). За всё с меня взяли 3.75$, а когда я запротестовал: "вон же тут кровавый стейк между овощами затесался!", кассир махнула рукой, типа, "не задерживайте очередь и вообще have a good day".

Длинный день
пакман
_navi_

Пятница была у меня длинным днём, не столько по продолжительности, сколько по насыщенности событиями. Четверг конечно был длиннее, в 7:15 мы выехали на работу и вернулись только в 20:30, но прошёл он как-то легче и незаметнее.  Пятницу мы провели в другом Сановском кампусе в Менло Парк (указатель A немного не точный, кампус прямо над ним), который Сан строил сам (в отличие от купленного и перестроенного в Санта Кларе). По сравнению с кампусом в Санта Кларе, во внутреннем дворе этого ощущается некоторая теснота.

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

А вечером у меня было собеседование с Грегом Боллеллой, "отцом" Real-Time Java. На последней конференции JavaOne он предоставил разработчикам большую развлекуху: он со своей группой построил трек для машинок, которые управляются программно (управление — напряжение на электродвигателе), и каждый желающий мог написать программу и посмотреть, как она ведёт себя на треке на JavaOne. Сложность управления состоит в следующем: на трассе расположены датчики, которые срабатывают в том случае, если машинка находится прямо над датчиком, но соединены эти датчики так, что есть информация только о том, находится ли машинка над каким-то датчиком, но нет информации над каким. Цель управления: провести машинку по треку за минимальное время. Но если скорость перед поворотом будет слишком большой, то машинка вылетит с трассы, поэтому надо разумно ускоряться и тормозить. Так как нет информации, над каким из датчиков находится машинка, надо постоянно отслеживать информацию о замыканиях датчиков: так как известно изначальное положение машинки (перед первым датчиком), можно в дальнейшем отслеживать положение, в том случае если мы не пропускаем датчики из-за "тормозов Java": время замыкания датчика довольно короткое, меньше 5 миллисекунд, и зависит от скорости. Так как в случае задержки в выполнении (опросе датчика) программа теряет информацию о точном местоположении и управление начинает базироваться на неправильной информации о положении машинки, машинка очень быстро вылетает с трека, тем самым это hard real-time задача.

Для решения подобного типа задач и была разработана Real-Time Specification for Java (RTSJ). В ней добавлены два новых типа потоков: RealtimeThread и NoHeapRealtimeThread. Первый может использовать heap, но для него используется специальный Garbage collector с предсказуемым временем исполнения, этот тип потоков подходит для soft real-time задач. Второй тип, как нетрудно догадаться из названия, не может использовать heap (доступна только immortal и scoped память), зато он очень хорошо подходит для hard real-time задач. В случае slot-car race, для опроса датчиков нужно было использовать NoHeapRealtimeThread, который при правильной настройке разрешения таймера (кажется на JavaOne использовалось разрешение 1ms) не пропустит замыкание датчика. На самом деле в построении управления конкретно для этой задачи есть ещё довольно много хитростей: например, имеет смысл замерять время замыкания датчика (сколько циклов замкнут), чтобы определить текущую скорость, и потом, вместо простого ожидания следующего сигнала датчика для определения позиции пробовать интерполировать текущее положение исходя из скорости, длины отрезка и его "кривизны"; так как на двигатель можно подавать и отрицательное напряжение, можно тогда начинать притормаживать перед поворотами заранее, а не непосредственно после датчика, а после поворота увеличивать скорость. Конечно, такое очень сложно сделать, если нет возможности экспериментировать непосредственно с треком.

Так вот, возвращаясь к собеседованию. В Сане действует программа по менторству инженеров более опытными инженерами. Проводится она раз в год для new hires (менее 2 лет в компании) и, кажется, раз в полгода для established staff. Чтобы в неё попасть, надо подготовить рекомендации менеджеров, и, по крайней мере одного директора, заполнить опросник, в котором ты отражаешь что ты хочешь от программы. Так как "количество мест" ограничено, надо получить хорошие рекомендации и очень хорошо сформулировать цели которые ты хочешь достичь в результате участия в этой программе. Тут мне повезло дважды: мой менеджер является директором отделения и вдобавок, так как я работаю напрямую с разработчиком в Техасе и много с ним общаюсь, он помог мне переформулировать мне некоторые мои корявые фразы на английском в опроснике. Ну и третий раз мне повезло, когда меня в эту программу приняли. Следующим шагом в этой программе является составление списка из 15 (!) менторов, которых бы ты хотел для работы с тобой, и причин по которым ты каждого из этих менторов выбрал. Работать будет, конечно, только один, а такой большой список нужен чтобы избежать коллизий с другими участниками и на случай, если ментор не захочет по каким-то причинам работать с тобой в течение целого года. Составление этого списка и формулирование причин оказалось действительно сложной задачей: надо произвести полноценный research, кто есть кто, среди предлагаемых нескольких сот менторов, выбрать 15 и сформулировать почему ты их выбрал. Можно, кстати было выбрать Гослинга или, даже, Уита Диффи (привет, _yashma_ :-) ).

Собеседование с Грегом (который был первым в моём списке) прошло удачно, так что в течение года начиная с сентября он будет у меня ментором. Что это будет из себя представлять я когда-нибудь напишу. Кроме slot-car трэка Грег показал мне ещё несколько демонстрационных агрегатов в Сановском Executive Briefing Center (это то место, куда водят внешних заказчиков, чтобы импресснуть их инновациями в Сане). Один из них — инвертированный маятник (классическая задача в теории управления, мы её кажется на втором курсе с Веремеем даже рассматривали): металлическая трубка-маятник, точка подвеса которой (снизу) находится на площадке которая может двигаться горизонтально в плоскости вращения трубки. Программа, написанная на Real-time Java стабилизирует маятник в верхнем (неустойчивом) положении при помощи управления движением площадки. Трубку можно щёлкнуть пальцем, выводя из верхнего положения, и площадка тут же метнётся в сторону движения маятника, чтобы стабилизировать его. Правда, так как скорость движения площадки и доступное для движения место ограничены, область устойчивости тоже ограничена. Параллельно с процессом управления, на той же виртуальной Java машине запущено проигрывание видеоролика, которое даже не тормозит. В приложении ещё есть специальная кнопка, при нажатии на которую программа начинает генерировать кучу мусора в heap'е и запускает после garbage collector. При этом видео начинает ощутимо тормозить, а вот процесс управления работает как ни бывало с тем же разрешением в 5ms. Вобщем, довольно доходчиво можно на таком примере объяснять, что такое real-time приложения. Есть ощущение, что давно уже пора на нашем факультете про всё это рассказывать в обязательной программе. А то как-то далеки мы от жизни, несмотря на то что математика у нас "прикладная" и процессы у нас "управления".


о неизменности
пакман
_navi_
Disclaimer: в каждой шутке есть доля шутки


У Сана много центров в разных странах, примечательна история того что является сейчас "главным" кампусом (ага, вроде как все эти здания со светлыми крышами — это всё Сан, хотя я ещё не мимо всех успел погулять). До того как Сан выкупил эти здания, в них находился Agnews Developmental Center. Девелопили в нём вовсе не софт, это на самом деле был центр для реабилитации людей, которые не могут нормально функционировать в обществе, иначе говоря, имеют большие проблемы с общением. Небольшое отступление: некоторые психологи считают, что очень большой процент девелоперов имеет проблемы с общением. Тогда получается, что с приходом Сана в эти здания ничего не изменилось: каждый день туда как и прежде приходят люди, имеющие проблемы с общением.