Наконец-то вышел php 5.3 final. Теперь можно долго и нежно мучаться чтобы код работал на 5.2 и 5.3 одновременно и юзал новые фишки по возможности :)
Новые вкусности: оператор goto и метки, namespaces, LSB, анонимные функции и замыкания и т.д.
Новые вкусности: оператор goto и метки, namespaces, LSB, анонимные функции и замыкания и т.д.
Вчера закончился icfp 2009, которого я ждал наверное месяца 3 чтобы "показать всем" после неудачных контестов icfp 2008 и sapka :)
( Read more... )
( Read more... )
Походу пора увольняться из этой ипанутой фирмы. Во первых меня начали афигенно активно напрягать какими-то тупыми эстимейтами, немсотря что я пашу на проекте полный рабочий день. Так еще и после ухода Веприка мне реально не с кем поговорить о насущных задачах на проекте. Сижу и афигиваю от мысли, что делаю какой-то трехколесный четырехпедальный велосипед и некому мне показать где я не прав...
Было бы прикольно если бы в описании объектов в javascript'е
something,
понималось бы как
"something": something
если там просто переменная а не сложное выражение
а то приходится писать разные
{
name: name,
data: data,
callback: callback
}
something,
понималось бы как
"something": something
если там просто переменная а не сложное выражение
а то приходится писать разные
{
name: name,
data: data,
callback: callback
}
Только что мне кинули линк на одну крутую библиотеку. Оставляю потомкам :)
http://osteele.com/sources/javascript/f unctional/
http://osteele.com/sources/javascript/f
Согласно http://ua.php.net/manual/en/language.na mespaces.definition.php привему 2, определение namespac'а должно быть первым statement'ом в скрипте. И соответственно не получится сделать вещи типа:
if (0 <= version_compare(PHP_VERSION, '5.3')) {
namespace Test;
}
чтобы использовать namespac'ы и чтобы скрипт при этом работал в PHP < 5.3.
Таким образом получается что либо никто namespac'ы использовать не будет аж до выхода PHP 6, либо придется поддерживать 2 версии скрипта под 5.3+ и под [5.2-5.3) что напряжно, либо надо будет делать PHP 5.3 requirement'сом проекта, что вряд ли кто-то себе позволит.
if (0 <= version_compare(PHP_VERSION, '5.3')) {
namespace Test;
}
чтобы использовать namespac'ы и чтобы скрипт при этом работал в PHP < 5.3.
Таким образом получается что либо никто namespac'ы использовать не будет аж до выхода PHP 6, либо придется поддерживать 2 версии скрипта под 5.3+ и под [5.2-5.3) что напряжно, либо надо будет делать PHP 5.3 requirement'сом проекта, что вряд ли кто-то себе позволит.
Купил себе сегодня планшет Wacom Bamboo Fun Medium A5. Сижу привыкаю :)
Завтра еще обещают комп новый дособрать наконец-то, так что я весь блин в обновках...
Завтра еще обещают комп новый дособрать наконец-то, так что я весь блин в обновках...
- Mood:
happy
Сижу, изучаю оптимизацию javascript'а. И прусь.
http://blogs.msdn.com/ie/archive/2006/0 8/28/728654.aspx
Меня всегда удивляли заявления типа "Avoid Using the ‘with’ Keyword". Заявления типа что код с ним получается not verbose это большое хмм. Заявления что типа можно ошибиться в кинуть переменную в global namespace это из тож же серии что и забывать "var" ставить для локальных переменных.
Конечно with добавляет новый scope и конечно же это замедляет выполнение, но performance tip тогда должен звучать "избегайте лишних scop'ов", а не "избегайте with"!!!
Попутно решил проверить сколько времени вообще отнимает лишний scope и с удивлением обнаружил что - дофига.
( source )
FF3 выполняет это:
work1 - 287ms
work2 - 315ms
work3 - 7ms
IE8:
work1 - 89ms
work2 - 165ms
work3 - 9ms
Вообщем лишние scop'ы действительно надо избегать. Но если вам нужен scope и это должно быть не замыкание, то лучше использовать with а не анонимные функции...
http://blogs.msdn.com/ie/archive/2006/0
Меня всегда удивляли заявления типа "Avoid Using the ‘with’ Keyword". Заявления типа что код с ним получается not verbose это большое хмм. Заявления что типа можно ошибиться в кинуть переменную в global namespace это из тож же серии что и забывать "var" ставить для локальных переменных.
Конечно with добавляет новый scope и конечно же это замедляет выполнение, но performance tip тогда должен звучать "избегайте лишних scop'ов", а не "избегайте with"!!!
Попутно решил проверить сколько времени вообще отнимает лишний scope и с удивлением обнаружил что - дофига.
( source )
FF3 выполняет это:
work1 - 287ms
work2 - 315ms
work3 - 7ms
IE8:
work1 - 89ms
work2 - 165ms
work3 - 9ms
Вообщем лишние scop'ы действительно надо избегать. Но если вам нужен scope и это должно быть не замыкание, то лучше использовать with а не анонимные функции...
Кстати, вернулись вчера с CodeCamp'а. Ощущения странные. Хоть кое-что и было интересным (типа Sapka results), но вообще доклады выглядят непрофессиональными. Есть ощущение что на наших IT-Talk'ах и то доклады получше. Но может я просто слишком критично ко всему отношусь... хз.
С удивлением обнаружил что Sapka была сделана где-то 4-5 человеками. И получилась в принципе вполне себе ничего (учитывая что это был первый раз). Так что надеюсь они продолжат это нелегкое дело.
Еще удивил директор GlobalLogic'а. Он сказал что им всем уже надоела Программания и он даже сказал что-то типа "Stanfy подхватила эстафету". Вообщем будет жаль если Программании больше не будет...
С удивлением обнаружил что Sapka была сделана где-то 4-5 человеками. И получилась в принципе вполне себе ничего (учитывая что это был первый раз). Так что надеюсь они продолжат это нелегкое дело.
Еще удивил директор GlobalLogic'а. Он сказал что им всем уже надоела Программания и он даже сказал что-то типа "Stanfy подхватила эстафету". Вообщем будет жаль если Программании больше не будет...
Профайлил сегодня свой проект в IE8 и увидел что .data() жрет много времени. Полез в сорсы смотреть что же это может быть и обнаружил, что в функции .data идет trigger события setData, которое к тому же как и все события в jQuery (с некоторых пор) баблится вверх по DOM'у. В итоге .data стала просто неюзабельной...
Workaround на это дело юзать jQuery.data(node, name[, value]) вместо jQuery(node).data(name[, value]) и jQuery(...).each(function() { jQuery.data(this, name, value) }) вместо jQuery(...).data(name, value)
Но вообще меня Резиг удивляет. Автобаблинье событий вверх вместо того что оставить это браузеру, триггер события в .data, отсутствие поддрежки cross-frame скриптов, глюки с пессимистической обратной выборкой в селекторах - вообщем jQuery меняется куда-то не туда...
Workaround на это дело юзать jQuery.data(node, name[, value]) вместо jQuery(node).data(name[, value]) и jQuery(...).each(function() { jQuery.data(this, name, value) }) вместо jQuery(...).data(name, value)
Но вообще меня Резиг удивляет. Автобаблинье событий вверх вместо того что оставить это браузеру, триггер события в .data, отсутствие поддрежки cross-frame скриптов, глюки с пессимистической обратной выборкой в селекторах - вообщем jQuery меняется куда-то не туда...
Недавно меня посетила бредовая идея сделаь свой язык программирования :)
Чтобы облегчить себе задачу, да и вообще для лучшей совместимостью с миром, я решил посмотреть в сторону parrot'а чтобы заюзать его VM. Как оказалось то что вышла уже версия 1.0.0 ни о чем не говорит. Там отсутствует множество необходимых вещей.
Более того, видимо у разработчиков нету единого мнения как это все будет выглядеть в итоге. Они мечутся из стороны в сторону то добавляя новые opcod'ы, то заменяя их PMC. В итоге в языке будет набор opcod'ов и набор стандартных PMC (в глобальном неймспейсе), вместо того чтобы разнести разные вещи по разным библиотекам.
Получается что сейчас parrot непригоден для программирония, да и вообще вряд ли будет пригоден в дальнейшем. Так как в нем будет перемешен фукнциональный стиль (opcod'ами) с объектым (PMC'ами).
Хотя задумка конечно в начале была хорошая...
Чтобы облегчить себе задачу, да и вообще для лучшей совместимостью с миром, я решил посмотреть в сторону parrot'а чтобы заюзать его VM. Как оказалось то что вышла уже версия 1.0.0 ни о чем не говорит. Там отсутствует множество необходимых вещей.
Более того, видимо у разработчиков нету единого мнения как это все будет выглядеть в итоге. Они мечутся из стороны в сторону то добавляя новые opcod'ы, то заменяя их PMC. В итоге в языке будет набор opcod'ов и набор стандартных PMC (в глобальном неймспейсе), вместо того чтобы разнести разные вещи по разным библиотекам.
Получается что сейчас parrot непригоден для программирония, да и вообще вряд ли будет пригоден в дальнейшем. Так как в нем будет перемешен фукнциональный стиль (opcod'ами) с объектым (PMC'ами).
Хотя задумка конечно в начале была хорошая...
неплохо было бы иметь в CSS какой-то параметр типа order которым можно было бы устанавливать порядок отрисовки элементов. тогда div'ами + CSS можно было бы действительно сделать все что угодно...
- В javascript'е имеем хороший оператор ||, надо чтобы был еще и ||| который бы проверял только на undefined
Давно тут не постил, надо это дело исправлять :)
В копилку хотелок для идеального языка программирования:
- методы в объектах/классах должны возвращать this (ссылку на объект) по дефолту.
В копилку хотелок для идеального языка программирования:
- методы в объектах/классах должны возвращать this (ссылку на объект) по дефолту.
Обгорел, простудился, устал как собака. "Отдых" - сакс
З.Ы. Как же у вас в харькове холодно...
З.Ы. Как же у вас в харькове холодно...
Сегодня писал снова на пхп и задумался над "как было бы классно если бы..."
Вот например простейшая задача вернуть массив и его обнулить, типа:
function test() {
$ret = $this->mas;
$this->mas = array();
return $ret;
}
казалось бы в те времена когда космические корабли... нам приходится делать временную переменную и то что логически должно быть записано в 2-ух строках превращать в 3
как было бы классно иметь язык который бы понял что-то типа:
function test() {
return $this->mas;
} finally {
$this->mas = array();
}
Вот например простейшая задача вернуть массив и его обнулить, типа:
function test() {
$ret = $this->mas;
$this->mas = array();
return $ret;
}
казалось бы в те времена когда космические корабли... нам приходится делать временную переменную и то что логически должно быть записано в 2-ух строках превращать в 3
как было бы классно иметь язык который бы понял что-то типа:
function test() {
return $this->mas;
} finally {
$this->mas = array();
}
Если на секунду предположить что веб аппликейшены это круто, то вот что я бы от них хотел
1) Nested applications. То есть чтобы можно было встраивать другие аппликейшены в свои настраивая при этом какой уровень доступа к моему приложению они будут иметь.
2) Разные APIs и Views. То есть чтобы каждый аппликейшен мог иметь кучу разных апи и кучу разных вариантов вывода. Чтобы это поддерживалось на уровне интегрируещей системы.
3) Mashups. Чтобы система позволяла юзать другие аппликейшены как источники данных для машапов и сама машапила их юзая какой-нить язык описания, а еще лучше визуальный редактор под это дело.
4) Свои сервера для бесплатных аппликейшенов (с ограничениями на ресурсы)
5) Everithing dynamic. Чтобы сам аппликейшен решал что и как кешировать. Но запросы на сторону аппликейшена чтобы были, а не как полустатический profile's box в фейсбуке.
Список неполный. Типа мысли вслух...
1) Nested applications. То есть чтобы можно было встраивать другие аппликейшены в свои настраивая при этом какой уровень доступа к моему приложению они будут иметь.
2) Разные APIs и Views. То есть чтобы каждый аппликейшен мог иметь кучу разных апи и кучу разных вариантов вывода. Чтобы это поддерживалось на уровне интегрируещей системы.
3) Mashups. Чтобы система позволяла юзать другие аппликейшены как источники данных для машапов и сама машапила их юзая какой-нить язык описания, а еще лучше визуальный редактор под это дело.
4) Свои сервера для бесплатных аппликейшенов (с ограничениями на ресурсы)
5) Everithing dynamic. Чтобы сам аппликейшен решал что и как кешировать. Но запросы на сторону аппликейшена чтобы были, а не как полустатический profile's box в фейсбуке.
Список неполный. Типа мысли вслух...
Столкнулся недавно с facebook'ом...
Мое мнение такое, что ради сомнительного прироста аудитории за счет части пользователей этой социальной сети, некоторые люди готовы дублировать свои сайты в формате фейсбука, насильно загоняя себя в исскусвенные рамки. Если они пытаются продублировать сайты наименьшими силами, это еще понятно. Но когда люди начинают думать о том, что на уже написанных сервисах от фейсбука можно будет каким-либо образом съэкономить, это уже просто глупо.
Вообщем пример очередной попытки скрестить ужа с енотом, а именно более-менее нормальную социальную сеть с плохим движком веб приложений...
Мое мнение такое, что ради сомнительного прироста аудитории за счет части пользователей этой социальной сети, некоторые люди готовы дублировать свои сайты в формате фейсбука, насильно загоняя себя в исскусвенные рамки. Если они пытаются продублировать сайты наименьшими силами, это еще понятно. Но когда люди начинают думать о том, что на уже написанных сервисах от фейсбука можно будет каким-либо образом съэкономить, это уже просто глупо.
Вообщем пример очередной попытки скрестить ужа с енотом, а именно более-менее нормальную социальную сеть с плохим движком веб приложений...
ООП в пхп - полный отстой. И изменения в 5.3 никак это не изменят.
Вообще популярность такого убогого языка как пхп в нашем обществе свидетельствует о невежестве большинства людей. Хотя казалось бы в IT сфере должны быть более менее умные люди...
Вообще популярность такого убогого языка как пхп в нашем обществе свидетельствует о невежестве большинства людей. Хотя казалось бы в IT сфере должны быть более менее умные люди...
