Насколько реально найти в Таиланде удаленно работу в офисе программистом с з.п. уровня 5к$? (и по возможности удаленно пройти собеседование). Естественно, без знания тайского, только английский.
Много вещей, которые несомненно радуют.
Но какие-то все-таки эти ребята непоследовательные. C времен php 5.3 жду __getStatic() и __setStatic() вслед за __callStatic() и ничего… тихо.
Ок, объясню на примере: как вы предлагаете использовать этот метод __private__ для реализации закрытых или защищенных свойств в классе В, если у нас есть:
class A
class B extends A
class C extends B
?
То, что вы написали не является реализацией приватных/защищенных членов класса.
По поводу arguments.callee.caller — вот так могла бы выглядеть реализация protected static методов:
class A
myPrivateMethod = (x)->console.log 'hello', x
myPublicMethod: (x)->
@__protected__('myPrivateMethod',[x])
__protected__: (name, args)->
isAllowed = false
for key,val of @constructor.prototype
if arguments.callee.caller == val
isAllowed = yes
unless isAllowed
console.log 'Private access only!'
return
eval(name).apply @, args
class B extends A
myPublicMethod2: ()->
@__protected__('myPrivateMethod',[2])
#test case
a = new A
b = new B
a.myPublicMethod 1
b.myPublicMethod2()
a.__protected__ 'myPrivateMethod', [3]
Но я никак не могу рекомендовать кому-то использовать такой подход.
А вообще, завязывайте так извращаться, не нужно оно вам (я о костылях для модификаторов доступа). А новичкам в Cofeescript и подавно.
class A
constructor: (@value) ->
privated = (param) ->
@value + param
__private__: (name, param...) ->
eval(name).apply @, param if !@constructor.__super__
A::method = ->
@__private__ 'privated', 2
class B extends A
B::method = ->
@__private__ 'privated', 2
object = new A 1
object.method() # 3
object = new B 1
object.method() # undefuned
object.privated # undefuned
Как видите, член класса privated доступно только для членов базового класса!
Вот это вообще бред.
1) Я могу вызвать object.__private__ 'privated' извне точно так же, как внутри методов класса.
2)
if !@constructor.__super__
— вы сами понимаете смысл этой проверки? Условие будет выполнено, если у данного класса нет классов-предков, т. е. он первый в цепочке наследования, которая строится с помощью Coffeescript. Это абсолютно никак не помагает реализовать приватные свойства. Например, что мне делать, если я хочу заиметь такие вот приватные методы в классе B? Раз уж вы решили так поизвращаться, вам нужно было делать что-то типа такого:
if arguments.callee.caller == constructor
Но Function.caller is deprecated и не работает в strict mode
Хмм, сразу видно, что вы старались и проделали немалую работу над этой статьей, но по-моему это как-то идеологически неправильно — обучать азам ООП в Javascript сразу на Coffeescript. К тому же, у меня складывается впечатление, что те, кто не знали ООП в Javascript, из этой статьи, пардон, ничерта не поймут.
+ есть критика по закрытым и защищенным членам класса в вашей статье
Спасибо огромное за статью! Впервые узнал из нее о Phidgets, это именно то, о чем я мечтал (с Arduino все более муторно, как я понимаю).
Как считаете, на базе Phidgets есть смысл делать FPV квадрокоптер? Здесь все конечно же упирается в максимальное расстояние WiFi (может ZigBee как-то удастся к этому добру прикрутить, если с драйверами все будет ок).
Кстати, у вас опечатка: Arduino, а не Aurdino.
Еще вопрос: на каком именно сайте вы покупали компоненты phidgets?
Если будет интересно, то готовы рассказать про решение с видео потоком, ограничением скорости и о проблемах, которые возникли на этапе сборки, программирования и запуска, и как в итоге все решили.
Да, очень интересно! С нетерпением жду продолжения.
Прямо сейчас заняться замером к сожалению не могу, т. к. занят работой, но вот вам ссылки:
1. Здесь есть график по производительности Canvas & WebGL в общем на одинаковых задачах.
2. Что же касается самой библиотеки WebGL-2d, прямо в репозитории есть папочка с примерами, которую можно погонять у себя, а также кое-что в директории benchmarks
Обратите внимание, часть примеров нужно запускать только с http:// схемой (т. е., через веб-сервер), т. к. через file:// невозможно осуществлять ajax запросы.
Именно так. Вы просто подменяете объект, хранящий 2d контекст Canvas на этот новый контекст в своем коде, если браузер пользователя поддерживает WebGL.
В моем случае потребовалось добавить лишь пару строчек кода и приложение начало летать на WebGL (прирост производительности ощутимый).
Не без ложки дегтя — все-таки полной поддержки методов 2D контекста там нет, кое-что у меня отображалось некорректно (не хотели рисоваться тени, т. к. оказалось, что там нет реализации метода createRadialGradient и еще в некоторых случаях баги с цветопередачей).
Я планирую заняться допиливанием этой библиотеки, благо она хостится на гитхабе.
Ее прелесть в том, что можно ее просто взять и подключить, получив при этом хороший прирост производительности для пользователей, у которых работает WebGL (если повезет с наличием в WebGL-2D всех методов для работы с канвасом, которые вы использовали), никакой лишней работы.
А downgrade к обычному канвасу, в случае чего, никто не отменял.
Опечатка в той статье или здесь?
Если да, то где искать?
Было бы круто, если бы они дали ему работать над новой TBS, Battle for Wesnoth — чудесная игра.
Но какие-то все-таки эти ребята непоследовательные. C времен php 5.3 жду __getStatic() и __setStatic() вслед за __callStatic() и ничего… тихо.
Если, допустим, затачивать новый проект конкретно под хипхоп — еще вариант, то с компиляцией старых больших проектов, так сказать, пичалька.
class A
class B extends A
class C extends B
?
То, что вы написали не является реализацией приватных/защищенных членов класса.
По поводу arguments.callee.caller — вот так могла бы выглядеть реализация protected static методов:
Но я никак не могу рекомендовать кому-то использовать такой подход.
А вообще, завязывайте так извращаться, не нужно оно вам (я о костылях для модификаторов доступа). А новичкам в Cofeescript и подавно.
Вот это вообще бред.
1) Я могу вызвать object.__private__ 'privated' извне точно так же, как внутри методов класса.
2)
— вы сами понимаете смысл этой проверки? Условие будет выполнено, если у данного класса нет классов-предков, т. е. он первый в цепочке наследования, которая строится с помощью Coffeescript. Это абсолютно никак не помагает реализовать приватные свойства. Например, что мне делать, если я хочу заиметь такие вот приватные методы в классе B? Раз уж вы решили так поизвращаться, вам нужно было делать что-то типа такого:
Но Function.caller is deprecated и не работает в strict mode
Тогда уж не private, а static private
+ есть критика по закрытым и защищенным членам класса в вашей статье
К тому же, разработчики Coffescript, работая над классами в своем языке, ориентировались именно на черновики ES Harmony.
Как считаете, на базе Phidgets есть смысл делать FPV квадрокоптер? Здесь все конечно же упирается в максимальное расстояние WiFi (может ZigBee как-то удастся к этому добру прикрутить, если с драйверами все будет ок).
Кстати, у вас опечатка: Arduino, а не Aurdino.
Еще вопрос: на каком именно сайте вы покупали компоненты phidgets?
Да, очень интересно! С нетерпением жду продолжения.
Иначе смотрите PHP Mess Detector, PHP_CodeSniffer, PHP Depend
1. Здесь есть график по производительности Canvas & WebGL в общем на одинаковых задачах.
2. Что же касается самой библиотеки WebGL-2d, прямо в репозитории есть папочка с примерами, которую можно погонять у себя, а также кое-что в директории benchmarks
Обратите внимание, часть примеров нужно запускать только с http:// схемой (т. е., через веб-сервер), т. к. через file:// невозможно осуществлять ajax запросы.
В моем случае потребовалось добавить лишь пару строчек кода и приложение начало летать на WebGL (прирост производительности ощутимый).
Не без ложки дегтя — все-таки полной поддержки методов 2D контекста там нет, кое-что у меня отображалось некорректно (не хотели рисоваться тени, т. к. оказалось, что там нет реализации метода createRadialGradient и еще в некоторых случаях баги с цветопередачей).
Я планирую заняться допиливанием этой библиотеки, благо она хостится на гитхабе.
Ее прелесть в том, что можно ее просто взять и подключить, получив при этом хороший прирост производительности для пользователей, у которых работает WebGL (если повезет с наличием в WebGL-2D всех методов для работы с канвасом, которые вы использовали), никакой лишней работы.
А downgrade к обычному канвасу, в случае чего, никто не отменял.