2008-10-10

Сколько стоят веб разработчики?

Тут меня спросили, сколько стоят веб-разработчики в России, - честно говоря, ну не знаю я сколько они стоят, не покупал не разу. А если серьезно, то наверно, из за самой распределенной природы веба в России веб-разработчики ничего не стоят, потому как веб-разработчики которые продают себя только в России они ни веб-разработчики ни разу. Те же разработчики которые чего-то знают и чего-то умеют, они так же в России себя не продают.

Наверно на этот вопрос ответить однозначно не получится, давайте ограничим вопрос так: сколько стоят фрилансеры работающие через популярные площадки? В качестве примера возьмем www.oDesk.com

Алгоритм работы: зайдем на oDesk - далее Find Providers -> раздел Web Development, в форме поиска выберем самый высокий рейтинг, уровень знания английского языка: 5 из 5, тип работников: фрилансеры. Десять первых результатов запишем в табличку: (цены в долларах США за час работы специалиста)

Страна 1 2 3 4 5 6 7 8 9 10 Среднее
Западная Европа - Италия, Франция, Финляндия, Германия, Швеция UK 30 22 24 21 15.60 19.50 30 13.33 16.67 38.00 23.00
Восточная Европа - Россия, Украина, Молдова 20 24 22.22 12.22 17 27 30 11.11 33.33 11.11 20.80
Восточная Азия - Филиппины, Сингапур, Китай 17.78 13.33 8.89 4.44 17.00 27.00 30.00 11.11 8.88 12.22 15.05
Южная Азия - Индия Пакистан 33.33 22.22 12.22 44.44 16.67 13.33 16.67 24.00 27.00 22.22 23.21
Северная америка: США, Канада 55.56 44.44 55.56 18.00 33.33 27.78 38.89 55.56 18.33 42.22 38.97
Латинская Америка - Уругвай, Бразилия, Мексика, Венесуэла, Аргентина 25.56 22.22 21.00 16.67 18.89 22.22 20.00 44.44 11.11 30.00 23.21
Другие страны - Израиль, Игипет, Южная Африка, Новая Зеландия, Израиль, Саудовская Аравия, ОАЭ 16.67 20.00 16.67 14.00 11.11 8.89 22.22 7.78 21.67 16.67 15.53

Сколько зарабатывают на oDesk

Как видно из таблички самые высокие цены у программистов из Северной Америки, далее в равных долях идет Южная Азия и Латинская Америка, затем с минимальным отставанием Западная Европа. Следом с заметным отрывом Восточная Европа, к коей и приписывают Россию, а замыкают хит парад Восточная Азия и т.н. другие страны (это по версии oDesk: Израиль, Игипет, Южная Африка, Новая Зеландия, Израиль, Саудовская Арания, ОАЭ)

Данное исследование не претендует на полноту, и возможно не отражает реальное положение вещей, простая математика ничего больше. Речь здесь идет о максимальных цифрах (Top-10) - средние цены гораздо ниже.

P.S. И теперь угадайте где будет лучще всего продаваться российский программист? Ответ: правильно, в Северной Америке - закон спроса и предложения, ничего личного.

 

Коментариев: 2

 
  2008-10-03

Замечательная статья о программировании

Наткнулся на замечательную статью о программировании написанную программистом который этим занимался с самого начала.

 

Коментариев: 1

 
  2008-10-02

Zip и UnZip на PHP

Сегодня встала задача сделать поддержку компрессии и декомпрессии в программе на PHP. На первый взгляд задача простая т.к. PHP5 уже содержит методы для работы с архивами ZIP. Во первых это функции вида zip_open, zip_read. Во вторых - есть шикарный класс ZipArchive который выполнит за вас всю грязную работу.

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

Нашел два решения данной проблемы - оба в использовании библиотеки gzip.

Первое решение состоит в использовании PhpConcept Library Zip - написанная Винсентом Блаветом и распространяемая по лицензии GNU/LGPL

Второе решение нашел совершенно случайно в phpMyAdmin - если глянуть в папку /libraries/ то там можно найти два файла zip.lib.php и unzip.lib.php которые содержат классы для паковки и распаковки zip файлов соответственно.

 

Коментариев: 1

 
  2008-09-22

OpenID

Доделал вход на сайт по OpenID, дело оказалось проще чем я поначалу думал. И хотя на сайте пока реализована только клиентская часть, идея OpenID мне определенно понравилась.

Использовал библиотеку PHP OpenID Library. В целом в код особенно не погружался, но в целом сделано качественно, правда сделано для обоих версий PHP, из за чего нужно гасить ошибки STRICT, ну да будет время поправлю.

 

Коментариев: 10

 
  2008-09-17

Singular vs. Plural как называть таблички или тупики развития информационных систем.

Как то само собой получилось что традиционно таблицы в реляционных базах данных называются в множественном числе как то users, pages, items. Однако последнее время наметилась тенденция к переходу на имена в единственном числе как то user, page, item возможно такая тенденция связана с объектно ориентированным подходом когда каждая запись рассматривается как объект. На мой взгляд множественное число более предпочтительно так как таблица это все же коллекция объектов а не сам объект однако многие фреймворки предлагают совершенно новый подход взаимодействия с базами данных исключая или минимизируя написание программистом непосредственно SQL запросов при помощи различного рода ОО маппингов.

Не могу сказать что использование ОО маппингов это верх технологической мысли. Наоборот это технологический нонсенс. Задумайтесь, язык SQL изначально был предназначен для общения человека с реляционной базой данных не машины а именно человека. Именно поэтому он основан на простых конструкциях английского языка SELECT INSERT UPDATE. Со временем написание комманд на языке SQL стало уделом программистов и системных администраторов. Пользователи же получили GUI, оконный интерфейс и мышу. Однако SQL все также используется для общения с базой данных однако теперь на нем разговаривают не люди и компьютеры а только компьютеры то есть сами программы. То есть программы разговаривают друг с другом на естественном языке! Язык разработанный как средство для общения человека с машиной де факто стал стандартом общения машин между собой. Но программам очень не удобно общаться между собой на естественном языке а тем более программистам совсем не удобно писать программы которые будут использовать этот язык для работы с данными поэтому придумали ОО маппинг технологию когда реляционная модель заменяется объектной. То есть для облегчения хождения на протезах были изобретены костыли. С костылями на протезах ходить намно-о-о-ого приятней. Но может быть пора попробовать что нибудь новое оригинальное. Например, попробовать встать на собственные ноги тем более что они у нас слава богу вроде бы есть взять к примеру те же объектно-ориентированные базы данных.

К слову сказть, также дела обстоят и с протоколами Интернета SMTP, HTTP, POP3 - все они разрабатывались как текстоввые протоколы для работы через телнет. Со временем telnet заменили на специализированные программы - браузеры и майлклиенты а протоколы остались без изменений. Отсюда и тонны спама и проблемы совместимости браузеров и сложности настройки почтовых клиентов. Возможно когда нибудь кретинизм в высоких технологиях и будет побежден но пока клубок противоречий запутывается все сильнее.

 

Оставить комментарий

 
  2008-09-16

как обработать BMP изображение используя PHP

Как известно библиотека GD не поддерживает возможность прочитать файлы формата BMP а пользователи (особенно малограмотные пользователи) часто так и норовят закачать на сайт фото или картинку в формате BMP. Как быть если закачать нельзя но очень хочется? Оказывается есть способ.

Здесь работающая демка а здесь сходник

Собственно всю грязную работу выполняет класс написанный Джеймсом Хайнрихом (James Heinrich) для своего проекта getID3(). Что интересно, в последних версиях проекта класс уже не умеет преобразовывать BMP в GD а только читает метаинформацию. На старую версию класса наткнулся совершенно случайно - она есть в phpThumb уже в полном варианте. Большое спасибо Джемс :)

 

Коментариев: 4

 
  2008-06-30

Таскание мышью используя JavaScript

Здесь работающий пример как сделать сабж. Потаскайте мышью красный квадрат. Работает в IE и FF, в других браузерах тоже должно, хотя и не тестировал.
 

Оставить комментарий

 
  2008-06-20

Как проставить неразрывный пробел ( ) с использованием document.createTextNode

Долгое время не получалось при работе со структурой документа использовать спец символы типа   - если пишешь что-то типа document.createTextNode('&nbps') то получается не неразрывный пробел а его html представление поэтому приходилось присваивать свойство innerHTML вместо того чтобы оставаться в рамках модели XML DOM что не очень то красиво.

Просто createTextNode не понимает html разметки, ему нужно скармливать символы как они есть без использования html замен, но вот беда, на клавиатуре у нас нет неразрывного пробела - есть только обычный. Оказывается набрать неразрывный пробел можно на клавиатуре - подсказка в виндовой таблице символов - нажимаем alt и не отпуская набираем на дополнительной клавиатуре 0160 (в режиме Num Lock), отпускаем alt - появляется пробел - но это не обычный пробел а самый что не на есть неразрывный, html код которого и есть   его можно вставлять в createTextNode без проблем.

 

Оставить комментарий

 
  2008-06-19

Private методы и свойства в JavaScript

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

Оставить комментарий

 
  2008-06-05

onReady

Сегодня клиенты пожаловались что если что нибудь на странице не загрузилось то не работатет часть JavaScript'овского функционала - конкретно у них не сработала загрузка видео с ютуба - чето последнее время у них не быстро там все работает. Просто основная логика на странице подключается с использованием события onLoad - в принципе штука не обязательная в человечьих браузерах, но вот в Эксплорере при попытки поменять что либо до этого события возникает очень плохая ошибка.

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

Оказывается вносить изменения в объектную модель браузера можно и до возникновения события onLoad, т.е. когда не все изображения еще подгружены

ниже привожу функцию для отслеживания момента когда в браузере становится возможным вносить изменения в объектную модель документа. Идея позаимствована из JQuery

/** * faster way to load content in browser idea taken frin JQuery * this allows do not wait until data will be completely loaded * seems only opera can allow load faster using this function - * though in JQuery they say it's supported... */ //alert(document.addEventListener); function bindReady(){ if ( bindReady.readyBound ) return; bindReady.readyBound = true; if (document.addEventListener){ document.addEventListener( "DOMContentLoaded", bindReady.ready, false ); } // Mozilla, Opera (see further below for it) and webkit nightlies currently support this event // If IE is used and is not in a frame // Continually check to see if the document is ready if ( Object.isIE && window == top ) (function(){ if (bindReady.isReady) return; try { // If IE is used, use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ document.documentElement.doScroll("left"); } catch( error ) { setTimeout( arguments.callee, 0 ); return; } // and execute any waiting functions bindReady.ready(); })(); if ( Object.isSafari || Object.isOpera ) { var numStyles; (function(){ if (bindReady.isReady) return; if ( document.readyState != "loaded" && document.readyState != "complete" ) { setTimeout( arguments.callee, 0 ); return; } bindReady.ready(); })(); } } bindReady.readyBound = false; bindReady.isReady = false; bindReady.ready = function(){ bindReady.isReady = true; var i; for (i=0;i

Тестировал в IE6/IE7, Safari, Opera, FF. Не нравится только как работает в Опере - там скрипт срабатывает позже onLoad, в остальных браузерах гораздо раньше

 

Оставить комментарий