Все записи автора admin

Грин карты — Green cards

Получили семьей сегодня грин карты. Весь процесс от начинания обсуждение с работодателем до получения занял 2 года и 3 месяца. При этом последний этап (после отправки I-485) полчился очень быстрым — всего 35 дней. На память моего юриста такого не было.

Стал теперь немного свободнее 🙂

Всех с наступающим 2013 годом!

Поздравляю всех с 2013! Чтобы всего, как говорится.

Для меня 2012 вышел неоднозначный. Много хорошего, хватает и плохого. Задел на 2013 сделан. В следующем году решится моя эпопея (надеюсь) по гринкарте. Это, безусловно, плюс. По работе — работы на пару лет вперед, что тоже плюс. В общем, будет видно.

Поздравляю всех еще раз, желаю хорошо отметить ))))

С чего начать изучение программирования, общее.

     Много народа хочет стать программистами. Хороших в итоге немного. Сам не то чтобы профессионал топ-класса, но с учетом набитых ошибок захотелось немного систематизировать набранный опыт. Куда податься новеньким, как учить. В общем, что бы делал я «с белого листа».

   — Где учить. 

Тут достаточно просто. Профильный университет, который соверемнный, «дышит» в ногу — идеал. Университет дает базу и дает навыки самостоятельного обучения. Это идеальный ВУЗ в вакууме. Теперь о непростом — такой универ практически нереально найти на территории эксСССР, насколько я понимаю. Это не MIT. В моем универе 80% преподавателей были ну очень старой закалки. Один из них как то зарубил мой курсовой, так как в качестве CPU был выбран PIC, который преподаватель не знал. Зато он знал КР580ВМ80А, который мне и надо было использовать. Другой пример — рассказывали, что наши ребята ездили в США для обмена опытом. Поехали крутыми перцами, приехали —  а там только BSD системы, которые наши тогда в глаза не видели. 

В итоге — в универе надо параллельно учитсья самому. Благо, для этого есть все возможности. Вообще, это хорошая практика — учиться самостоятельно параллельно, постоянно. Учите основной предмет — учите параллельно что то еще. Пусть не в полную силу, но учите. Я какое о время назад изучал вопросы цифровой фильтрации сигналов. Математика. Казалось бы, но в недавнем прошлом это пригодилось. Исправлял в проекте. Удачно ввернул пару умных сдлв про IIR и FIR в общении с работодателем = ко мне совершенно другое отношение.

Курсы / учить самостоятельно — второе / третье по предпочтению. Но! Курсы — выбираются внимательно. Обычно хорошие курсы — это достаточно дорого. Но тут, как говорится, или по 5 но большие, или по 3 на маленькие 🙂 Правильные курсы вам здорово сократят время на изучение. Дадут работу в группе, общение.

     —  Что учить

Вопрос на самом деле неоднозначный. Тут есть два варинта. С одной стороны, можно изучать что то, что не востребовано на рынке особо, но вам ОЧЕНЬ нравится. Например, программирование QNX, скалу или что то подобное. Из профитов — когда вы станете крутым профессионалом (это не один год) — вы найдете очень высокооплачиваему работу. Предложений мало — но спрос, хоть и небольшой, есть. Небольшая конкуренция — вы на коне. Но кто вас будет кормить все это время? Поэтому вариант два, он же правильный — учить надо мейнстрим. Находим что то, где работу найти легче — и изучаем. C#, VB.NET, Java — без разницы, выберете, что нравится. И учите. Ищите опенсорсные проекты и делайте с кем то, делайти сами. Лучше — в команду с кем то, то есть опенсорс. Это научит читать чужой код, писать понятный код для других людей. Опыт работы с разными системами контроля версий и прочее. Кстати, в качестве такой системя я использую Mercurial, который меня вполне устраивает.

Отдельной строкой — не учите то, что используется ТОЛЬКО у вас. Классический пример — 1С. Если вы планируете пожить в другой стране или поработать на забугор — забывайте о таком сразу. Потерянное время, которое — ваш самый ценный капитал.

     — Как учить

Для начала находим хорошую базовую книгу с азов. Читаем и делаем примеры. Хорошо, если в книге написано, как собрать ваше приложение без использования IDE. Это позволит вам понять, что происходит на самом деле при сборке. То есть командная строка и блокнот (Notepad++ / Sublime Text). Заодно найчитесь правильно настраивать переменные среды, очень часто без этого ваша программа просто не скомпилируется. После того, как станет ясно, что происходит, работаете из чистой IDE без решарперов или других улучшайзеров. Используете мейнстирм. Для .NET это Visual Studio (спокойно можно использовать Express). Для Java — Eclipse. Лучше Indigo, Juno имеет какие то странные для меня проблемы. Для С++ сложнее — тут или VS Professional, или Qt, или DevExpress ИМХО. В порядке предпочтения. Единственное — в VS 2010 был сломан autocomplete для C++, починили или нет — не знаю.

Не забываем, что кроме платформы и языка, надо понимать, как писать эффективно и правильно. Для этого есть книги по алгоритмам и шаблонам проектирования. В интернете полно обзоров по данным книгам, повторяться не буду. Читать обязательно.

Какие платформы будут перспективны в будущем — думаю, Java и .NET никуда не денутся. Мир вовсю скатывается в облака и мобильный платформы — то есть копая туда, вы буз работы точно не останетесь. Насчет HTML5 — будет точно, но наверняка будет допиливаться очень быстро. JavaScript — тоже. Этот язык для меня тяжелый. Не как сам язык (он на самом деле имеет простой синтаксис) — я не предсталяю, как на нем писать сложное корпоративное ПО. 

Самое главное — паралельно учим английский язык. Поверите, это пригодится больше всего. Откроете для себя мир в поиске работодателей.

В конце можно напомнить, что быть специалистом мало. Надо уметь себя продать на рынке труда правильно и грамотно. Я в этом не спец, к сожалению. Можете посмотреть доклад Якова Фаина, там есть по теме — http://jeeconf.com/materials/java-developer/

В любом случае — удачи вам, ребята! Если есть конкретные вопросы — задавайте в комментариях.

Проблема Chrome Extensions Webstore в Virtualbox

Одна из особенностей VirtualBox, которая мне не нравится — очень сырая поддержка 3D. Если вы включите поддержку 3D в гостевой системе, то хром откажется нормально открывать гугл вебстор (там лежат расширения для хрома). Рендерится страница попросту не будет. Много народа, ругаясь, предлагают отключать 3D в настройках на это время. Однако есть более изящный способ — добавьте ключик —blacklist-accelerated-compositing для запуска хрома. Работает отлично, визуально хром даже побыстрее работает.

 

Еще небольшие лайфхаки для VirtualBox 3D:

— Не ставьте WDDM 3D драйверы (по крайней мере сейчас, версия 4.2) Тормозное и глючное (да и каким ему еще быть — выдрали кусок Wine3D насырую).

— Для 2D не ставьте объем видеопамяти больше 64 метров. Этого хватит на все. У меня, например, ютуб накрывается тазом и вешает систему, если выставляю 128 метров и только 2D.

— В свойствах виртуальной машины уберите перерисовку окна при перемещении.

— Если вам надо полноценное 3D — используйте VmWare Workstation. Там 3D работает прекрасно.

Мошенники борзеют

Сегодня получил интересный звонок. Компьютер мне говорит, что мол звонок с вашего банка (действительно, в этом банке у меня есть счет). Ваша карта заблокирована, нажмите 1 чтобы разблокировать. Нажимаю 1 — далее введите ваш номер счета. Здравый смысл подсказывает, что пора рвать когти 🙂 Сбрасываю звонок, ввожу номер в гугл — реально, мошеники. Такой звонок получило уже немало народа. Некоторые ввели номер карты и пин код. Сразу звоню в банк — предупредить, и сразу автоответчик сообщает, что мы все знаем и принимаем меры. Это все земечательно, только откуда у мошенников в базе мой номер телефона? Банк мягко говоря не крупный — явно где то была утечка.

В итоге — приятно, что не повелся и неприятно, что мой телефон кто то слил.

Samsung 830 — моя новая USB 3 флешка

   Мой системный диск на работе нагнулся медным тазом. Быстрый и судя по отчетам абсолютно здоровый OCZ Vertex 2 240 Gb перестал определяться после перезагрузки. Краткое гугление показало, что скорее всего проблема «спящего режима» контроллера. Возможно, потом попробую вылечить, перепрошив диск напрямую (не через SATA3 интерфейс).  Сейчас много работы, поэтому тратить время на подобное не хочется. 

  Так как системник нагнулся, раздел был по быстрому восстановлен на обычный WD Black HDD 1Tb. Надо сказать, downgrade в скорости заметен, и очень сильно. Заказал себе новый диск — Samsung 830 256 Gb. Заодно решил системы обратно на SSD не разворачивать, а использовать SSD как большую USB3 флешку с настроенной виртуальной машиной.

  Через пару тройку дней пришел и диск и USB3 кейс Raven RVS02

 

   Кейс оставил очень приятные впечатления. Добротно сделан, пластиковый — но стилизован под карбон:

    Светит прикольный цветом 🙂 В наличии 2 штекера USB — для нормального питания. Работает стабильно, проблем нет. Единственное — SSD входит в карман очень плотно. Вытащить обратно можно только с помощью такой то матери. Если будете вытаскивать — делайте очень аккуратно, мой SSD начал подозрительно трещать при этом процессе.

   Итак — Samsung SSD 830:

    256 гигов не самой плохой судя по описанию памяти. Свой собственный котроллер. При определении в оснастке управдения дисками видим 237 с копейками гигабайт свободного пространства

SSD Raw space

   Форматируем диск в NTFS, засовываем в десктоп (Мой рабочий AMD 3.5 GHz / 24Gb ram). Прогоняем первый тест — получаем результат:

Samsung 830 NTFS sata3

   Как по мне — хороший результат. Линейное чтение под 500 мб/сек, очередями — 157. Можно юзать. Но мне надо использовать его как флешку, поэтому мне надо криптовать. А ошибся, не купив модель с аппаратным шифрованием. Самая раскрученная программа — TrueCrypt. К безусловным достоинствам программы могу отнести ее кроссплатформенность и стабильность. Шифруем раздел, проверяем скорости:

Samsung 830 Ntfs SATA3 TrueCrypt

   Грустно, да. TrueCrypt совершенно не приспособлен для SSD. Имея огромную скорость шифрования AES под 800 мб/сек, скорость просела сильно. Особенно удручает последняя строка теста — падение в 8 раз вообще никуда не годится. Мой совет — если хотите шифровать системный раздел, не шифруйте его TrueCrypt’ом — расстроетесь. А чем же тогда шифровать? 5 минутный гуглеж подсказал другую программу, которая как раз шифрует разделами — DiskCryptor. Автор пишет, что программа оптимизируется для использования на SSD. Качаю последнюю версию, криптую свой SSD — проверка:

Samsung 830 Ntfs SATA3 TrueCrypt

   Линейная скорость просела еще больше, но остальное — просто блеск! Молодцы, программа действительно оптимизирована для SSD. Также обратите внимание на скорость 4K QD32. У зашифрованного диска она выше, чем у незашифрованного! Явная оптимизация. Для параноиков вроде меня — highly recommended 🙂

   Вытаскиваю SSD из компа, засовываю в USB 3 кейс. Далее 3 картинки:

   Скорость свежеотформатированного в NTFS:

Samsung 830 Ntfs SATA3 TrueCrypt

   Шифруем раздел средствами TrueCrypt:

Samsung 830 Ntfs SATA3 TrueCrypt

Делаем то же самое средствами DiskCryptor’а

Имеем картину, аналогичную предыдущему случаю — за тем исключением, что максимальная скорость чтения ограничена USB3 интерфейсом. 250 мб — потолок. Для сравнения, прогнал последний тест с DiskCrypt дома — домашняя машинка на i7 помощнее:

   На i7 вообще все показатели скорости ограничиваются интерфейсом при использовании DiskCrypt. Тут уже ничего не поделаешь, разве что использовать внешний eSata кейс. У меня такой есть — StarTech

 

   Подключил через него, погонял тесты. На удивление, получил скорости еще ниже, чем через USB3. Почему — без понятия. Скорость — чистого NTFS

  А теперь начинаем особую, уличную магию. Делаем то, ради чего все и затевалось. Форматируем в Ntfs, криптуем DiskCryptor’ом, заливаем виртуальную машину (VirtualBox). В свойствах машины не забываем указывать, что диск — SSD. Заодно там есть очень интересная опция — использовать кэш хоста

 

    Очень интересная опция 🙂 Небольшой эксперимент — проверяем скорость SSD, запуская тест (на этот раз другая программа):

 

   Данные вполне ожидаемые. Запускаем виртуалку с включенной опцией «использовать кэш хоста», прогоняем тот же самый тест:

   Хоть финальный результат и небольшой, посмотрите на скорости )))) Если захотите удивить соседа — сделайте тест через виртуалку. 680 мб/сек это круто 🙂

   По ощущениям — виртуалка, запущенная на такой флешке, работает очень резво. VS2010 запускается 35 сек вместо 70 с обычного HDD, VS2012 — 3 секунды! Delphi всех мастей запускаются от 2 до 4 раз быстрее. VirtualBox работает стабильно, если не использовать 3Д (и отключить его поддержку в свойствах машины) и не использовать USB порты хоста. У меня есть купленная VmWare 8, но ее не использую. Что то не сростается у меня с этим ПО, вылазят глюки. Из последних — настроенная Windows 7 стала тупо вываливаться в BSOD безо веских на то причин. Разбираться не стал, использую VirtualBox. VmWare Workstation 9 покупать не буду.

   Теперь у меня ляпота — на «флешке» полностью настроенная система со всеми проектами. Все зашифрованно, потерять не страшно. Можно работать с любого места в своем родном окружении. Нет зависимости от интернета и терминального доступа к рабочей машине. Бэкапы делать элементарно. Пока SSD Samsung 830 нравится. Как будет дальше — посмотрим. SSD Vertex 3 240 Gb Max IOPS на моей домашней машине за полгода работы потерял в скорости половину — деградация. 

Delphi vs Java

Привлекает меня разработка под платформу Android. Как известно, основной язык программирования под нее — Java. Можно, конечно, использовать NDK (C C++) но в моем случае в этом нет никакой необходимости. Заодно появилась возможность поизучать Java. Кстати, минута рекламы — если есть желание изучать, крайне рекомендую купить книгу Якова Фаина «Java Programming, 24-Hour Trainer». Книга написано максимально сжато, но как по мне объясняет многое. Из замеченных недостатков — достаточно сухое, академическое изложение, но для меня оно cамое то, так как до этого много писал на Delphi и C#, рюшечки не нужны. Если хотите с рюшечками — «Head first Java». Да, не забудьте заглянуть в errata книги Якова, есть несколько достаточно важных опечаток.

Минута рекламы закончилась. Изучаю Java, в общем. Все пишут, что Java — тормоз. Виртуальная машина, проверки, сборка мусора когда не надо, все дела. Куда, в общем, с такой мордой в наш ряд. Ну пока сам не проверишь — не поверишь, дело такое. Нашел в интернете интересный примерчик, набросал его на Java и Delphi XE2. Delphi — 32 бита, все оптимизации включены, все поверки отключены. 

Итак, код Java:

import java.io.IOException;
import java.text.DateFormat;
import java.util.Date;
 
public class Main {
    private static double func(double x){
        double y = x*x;
        return y;
    }
    public static void main(String[] args) throws IOException {
        double vp=50000, np=0, snp=np, step=0.0001, sum=0;
        DateFormat df = DateFormat.getDateTimeInstance();
        
        System.out.println("Integral calculations...");
        Date cnt1 = new Date();
        while (np+step < vp) {
            sum = sum + (func(np) + func(np+step)) / 2*step;
        	//sum = sum + (np*np + (np+step)*(np+step)) / 2*step;
            np = np + step;
        }
        Date cnt2 = new Date();
        System.out.println("Integral from " + snp + " to " + vp + " step "+ step +" is equal " + sum);
        System.out.println("Begin time: "+df.format(cnt1));
        System.out.println("End time: " + df.format(cnt2));
        System.out.println("Difference: "+(cnt2.getTime()-cnt1.getTime())/1000 + " seconds");
        
    }
}

Как видите, ничего военного. В цикле вызывается простейшая функция. Для проверки написан расчет «на месте» без вызова (сейчас закомментирован) Теперь то же самое на Delphi:

program Project2;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

function itg (x : Double) : Double;
begin
  Result := x*x;
end;

var
  vp, np, snp, step,sum : Double;
  cnt1, cnt2, cnt3 : TDateTime;
begin
  vp := 50000;
  np := 0;
  snp := np;
  step := 0.0001;
  sum := 0;
  Writeln('Integral calculations...');
  cnt1 := Now();
  while (np + step < vp) do begin
    sum := sum + (itg(np) + itg(np + step)) / 2*step;
    //sum := sum + ((np*np + (np + step)*(np + step))) / 2 * step;
    np := np + step;
  end;
  cnt2 := Now();
  cnt3 := cnt2 - cnt1;
  Writeln('Integral from ' + FloatToStr(snp) + ' to ' + FloatToStr (vp) +
                    ' step ' + FloatToStr(step) + ' is equal ' + FloatToStr(sum)+ #13 +
                    'Begin time: ' + FormatDateTime('hh:mm:ss',cnt1) + #13 +
                    'End time: ' +  FormatDateTime('hh:mm:ss',cnt2)+ #13+
                    'Difference: ' + FormatDateTime('ss', cnt3) + ' seconds');



end.

Вся логика абсолютно такая же. Предвкушаю безусловную победу нативного кода. Мало того что нативный — Embarcadero триста раз говорила, что они круто оптимизировали компилятор.

Барабанная дробь — смотрим результаты.

Delphi:

 

WTF? Вариант с вызовом функции отрабатывает в 4 раза медленнее чем инлайн — 13 секунд! И это простейшая функция, подставлять подобное компиляторы научились уже 100 лет назад. Даже не хочется писать на C#, подставит — 100%. Про С++ молчу.

Ладно, посмотрим на результаты «тормозной» джавы:

У меня комментариев по поводу тормознутости в расчетах нет. Чистая математика — 1 секунда. Причем в обоих вариантах, Java умеет делать то, что не умеет Delphi. 

Я охотно поверю, что у Java могут быть другие затыки. Еще больше поверю, что 90% затыков — кривые руки программистов. Не раз видел в C# использование String вместо StringBuilder, к примеру.

Java порадовала. Есть желание накатать небольшую програмку для чтения бинарого файла (это по работе), цифровой его фильтрации и отображении на экране. Если дело пойдет хорошо — можно писать кроссплатформенные приложения. Для задач со строгими временными рамками я от С++ или Delphi никуда не уйду, что делать. Но не только же это пишем 🙂

В Java пока огорчает GUI — она изначально была создана для другого. Найти пока красоты не могу для гуев, но особо и не искал. Вот, намалевал на Java морду к калькулятору для изучения вопроса — честный копипаст с майкрософта 🙂

Иду по книге Якова. Заодно у него есть (были) курсы по Java, как теперь — не знаю. Язык интересный, нравится. Непонятно пока только, как писать без парамеров методов by ref. Делать все через приватные члены классов муторно. Пожелайте мне удачи 🙂