LINUX.ORG.RU

Mozilla Phones for Apps

 , , ,


2

2

В попытке подстегнуть разработку программ под свою операционную систему, компания Mozilla приняла решение раздавать телефоны Geeksphone Keos бесплатно для разработчиков ПО под нее.

Акция Phones for Apps напоминает похожие акции от Nokia в прошлом, которые позволили в свое время развить экосистему MeeGo/Maemo.

Для подачи заявки достаточно описать цель проекта и какие технологии будут использованы в процессе разработки.

Форма для заявки

>>> Официальный анонс Phones for Apps

Deleted

Проверено: Shaman007 ()
Последнее исправление: cetjs2 (всего исправлений: 3)

Ответ на: комментарий от Deleted

Я это к тому говорил, что многие языки с поддержкой ООП на самом деле реализуют далеко не все возможности ООП. В частности, у них проблема с динамическим изменением классов. А прототипное программирование позволяет легко изменить класс тогда, когда вам захочется. Прямо на ходу, во время выполнения программы.

lucentcode ★★★★★
()
Ответ на: комментарий от lucentcode

Ну и пусть неудобно, зато можно стоя в гамаке, ага :)

Deleted
()
Ответ на: комментарий от tp_for_my_bunghole

Или LuaJit, готовая для ARM и PPC, разработана чуваком из какого-то университета в Германии. Легка в использовании и отладке, рекордно низкое потребление памяти, связка с C.

tp_for_my_bunghole
()
Ответ на: комментарий от Binary

Нет, не много. Насколько я знаю, ECMA не описывает специфику работы main loop. Это значит, что любое поведение(как у Opera, Firefox или Chrome), корректно. Нужно просто помнить про особенности реализации ECMAScript в разных окружениях. Вот когда в стандарт пропишут пункты о работе main loop, тогда сайд-эффекты и исчезнут.

lucentcode ★★★★★
()
Ответ на: комментарий от lucentcode

Окей, т.е. некоторое «неудобство» всё-таки присутствует. А как вам такое?

>>> true instanceof Boolean
false

>>> typeof(true) == 'boolean'
true
Binary ★★★★★
()
Ответ на: комментарий от lucentcode

Я это к тому говорил, что многие языки с поддержкой ООП на самом деле реализуют далеко не все возможности ООП. В частности, у них проблема с динамическим изменением классов.

Зачем динамическое изменение классов? Класс эти тип, зачем динамически изменять? Реализуй заранее что надо и не мучай аккумулятор.

tp_for_my_bunghole
()
Ответ на: комментарий от special-k

Хватит уже нахваливать свякую бесполезную маргинальщину, оставь на месте.

Да я не нахваливаю Geeksphone Keos. Просто упомянул LuaJit, то чему равныь нет среди динамических языков, по производительности на равне со статическими.

tp_for_my_bunghole
()
Ответ на: комментарий от tp_for_my_bunghole

производительности на равне со статическими

^_- да что ты. js - это самое производительное, плюс уверено идет к производительности таких языков как c# и java, но с меньшим потреблением памяти.

special-k ★★★★
()
Ответ на: комментарий от special-k

Наследование-то в js отлично получается

О, ну раз ты в теме, как раз вот сейчас мучаюсь вопросом: как класс-метод сделать?

Binary ★★★★★
()
Ответ на: комментарий от funeralismatic

Оно само сдохнет и сгниёт. Нет необходимости морать лопаты под это.

vova7890 ★★★
()
Ответ на: комментарий от Binary

Да ладно, кто это сказал? И зачем тогда в Python реализовали метаклассы? Да и магия на основанная на функции type тоже позволяет на ходу изменять класс. А декораторы фукнций и классов? Зачем их в Python 2.6 добавили? Добавили, когда осознали преимущества такого подхода(для интерпретируемого языка). Если вы используете Django, вы постоянно работаете с динамически изменяемыми классами. А вот до появления декораторов и метаклассов(в Python 2.6) люди шли на различные уловки. Хорошо, что Python позволяет весьма вольно менять классы по своему усмотрению.

lucentcode ★★★★★
()
Ответ на: комментарий от special-k

да что ты. js - это самое производительное, плюс уверено идет к производительности таких языков как c# и java, но с меньшим потреблением памяти.

Нет. Только V8 от Google, но luajit лучше, так как foreign function interface.

Но я считаю что всё это туфта для мобильных устройств. Только компилируемые в машинный код языки, все остальные затраты ценной энергии только на этапе разработки.

tp_for_my_bunghole
()
Ответ на: комментарий от Binary

О, ну раз ты в теме, как раз вот сейчас мучаюсь вопросом: как класс-метод сделать?

var Songs;

Songs = (function() {
  Songs._titles = 0;

  Songs.get_count = function() {
    return this._titles;
  };

  function Songs(artist, title) {
    this.artist = artist;
    this.title = title;
    Songs._titles++;
  }

  return Songs;

})();


Songs.get_count();

song = new Songs("Rick Astley", "Never Gonna Give You Up");

Songs.get_count();

song.get_count(); // error

Используй Coffeescript.

tp_for_my_bunghole
()
Ответ на: комментарий от lucentcode

И зачем тогда в Python реализовали метаклассы?

Как метакласс тебе поможет менять класс в рантайме? Метакласс управляет созданием класса, один раз. Посмотри пример реализации синглтона, или, из той же джанги, посмотри, как работают формы. Нет там никакой магии в рантайме, только при создании класса.

Да и магия на основанная на функции type тоже позволяет на ходу изменять класс

Что за магия?

А декораторы фукнций и классов? Зачем их в Python 2.6 добавили?

Опять: они вообще ни при чём. http://www.slideshare.net/j2a/decorators-recipes

Добавили, когда осознали преимущества такого подхода(для интерпретируемого языка).

Класс можно модифицировать по такому же принципу, как в js вообще без единого заклинания, что вы привели. И называют это питонисты обидным словом monkey-patching.

Если вы используете Django, вы постоянно работаете с динамически изменяемыми классами

Работаю постоянно, но с удовольствием об этом послушаю.

Дальше комментировать нет смысла.

Binary ★★★★★
()
Ответ на: комментарий от tp_for_my_bunghole

Нене, нахлебался я кофискрипта, даже с ним не работав толком, ну его в баню.

Пример какой-то... Зачем так сложно? Да и не сработает он, Songs === undefined, как модифицировать его _titles?

Binary ★★★★★
()
Ответ на: комментарий от Binary

Пример какой-то... Зачем так сложно?

Что там сложного?

Closure в котором хранятся статические переменные/методы класса Song.

как модифицировать его _titles?

Создай метод класса который модифицирует:

var Songs;

Songs = (function() {
  Songs._titles = 0;

  Songs.get_count = function() { return this._titles; };
  Songs.set_count = function(count) { this._titles = count; };

  function Songs(artist, title) {
    this.artist = artist;
    this.title = title;
    Songs._titles++;
  }

  return Songs;

})();
tp_for_my_bunghole
()
Ответ на: комментарий от Anatolik

Anatolik> Сейчас ведь очень много языков, которые компилируются в JS.

Это тотальное извращение. Лучше бы сразу в байт-код. А ещё лучше - в бинарники для системы и библиотеку, котрая позволит делать GUI на JS/HTML или чём-то подобном... OH SHI~! Есть же Qt!

Quasar ★★★★★
()
Ответ на: комментарий от Deleted

DDark> Принципиально новую - ЕМНИП они первые кто использует JS/HTML5 для мобильных приложений.

Не первые. См. WebOS и PhoneGap.

Quasar ★★★★★
()
Ответ на: комментарий от tp_for_my_bunghole

Что там сложного?

К чему там лишнее замыкание?

Closure в котором хранятся статические переменные/методы класса Song

Вот только ни одной переменной внутри замыкания не определено. Да и вообще код работать не будет, потому что Songs == undefined на четвёртой строке.

Создай метод класса который модифицирует

Это всё бессильно, когда приходится наследоваться от Songs.

Binary ★★★★★
()

Вообще правильнее всего было бы поступить как Nokia в случае с Nokia N800/N810/N900/N9 - сначала всё окружение написать, чтобы продавать не голое бесполезное устройство, а которым можно пользоваться для основной цели этого устройства. Приложения долэны быть придатком к мобилкам, но никак не тем, ради чего мобилка нужна.

Quasar ★★★★★
()
Ответ на: комментарий от Quasar

Приложения долэны быть придатком к мобилкам, но никак не тем, ради чего мобилка нужна.

Я хоть и не пользуюсь смартфоном, но большую часть времени телефон использую как ж-клиент и карту. Что тут плохого то? Звонить не люблю.

Binary ★★★★★
()
Ответ на: комментарий от lucentcode

Вот только зачем ресурсоёмкие вычисления реализовывать на Java Script?

Так вы говорите там ничего больше нет кроме js.

loz ★★★★★
()
Ответ на: комментарий от quiet_readonly

Есть крутой пример: есть браузеры, у которых у Array не реализован зело удобный метод filter, с прототипом такой метод добавляется на раз-два и, что самое приятное, сразу начинает присутствовать у всех массивов, даже созданных до того.

Но тут есть два но:

1) надо иметь чувство меры и понимать, к чему может привести то или иное колдунство

2) прототипы тут постольку-поскольку

Binary ★★★★★
()
Ответ на: комментарий от Binary

Кто такой FF?

«класс» наследник.. -_-

EDIT Feb. 2012: the answer below is no longer accurate. _proto_ is being added to ecmascript6 as «normative optional» which means it isn't required to be implemented but if it is must follow the given set of rules. This is currently unresolved but at least it will be officially part of JavaScript's specification.

special-k ★★★★
()
Ответ на: комментарий от special-k

Дык а более понятный пример не мог бы? Я ничерта не понимаю, что к чему с этим __proto__, если честно, колдунство какое-то, пример того, как не надо делать языки, ИМХО.

Binary ★★★★★
()
Ответ на: комментарий от Binary

Давай вот не будем, колдунство-неколдунство, одна строчка кода. Но вообще, я хочу тебе сказать, что не совсем корректно говорить почему в js нет того, или этого.. Сделай! Сделай свой замечательный конструктор (не в смысле конструктор из ООП, а в смысле конструктор от слова «конструировать») объекта, который будет уметь все что ты хочешь, давать тебе всю метаинформацию, какую ты хочешь.

special-k ★★★★
()

Написал заявку. Будет интересно попробовать, хотя в будущее самой платформы я не верю.

squizduos
()
Ответ на: комментарий от special-k

Давай вот не будем, колдунство-неколдунство, одна строчка кода

Лол, тебе на перле одну строчку показать? К тому же, абсолютно искренне прошу нормальный пример, правда, нужно.

Сделай! Сделай свой замечательный конструктор (не в смысле конструктор из ООП, а в смысле конструктор от слова «конструировать») объекта, который будет уметь все что ты хочешь, давать тебе всю метаинформацию, какую ты хочешь.

Так, ты понимаешь, сделал! Сделал, только как сделать класс-методы и класс-свойства — ума ни приложу. Могу даже рассказать, зачем мне это: есть система плагинов, плагин — это класс, нужно, не инстанцируя из него объект, вытащить из этого плагина метаинформацию: имя, дескрипшн, зависимости. Да ещё и так, чтобы потом от этого класса можно было наследоваться и метаинформация, не будучи переопределённой, тоже бы наследовалась чтобы.

Binary ★★★★★
()
Ответ на: комментарий от special-k

А вот это не проблема js, во-первых. Во вторых, в случае с сабжем у тебя нет такой проблемы.

Я вообще не понял мысли. Какая проблема js? О чём ты?

Binary ★★★★★
()
Ответ на: комментарий от Quasar

Это тотальное извращение.

Надеюсь, в хорошем смысле этого слова. Ведь учитывая распространенность JS, компляция в него вполне резонна.

Livescript — замечательный язык. Он предоставляет haskell'евский prelude и f#-ские пайпы; позволяет быстро писать простой, легко поддерживаемый код.

Это очень красиво. Замечательно сочетается с Angular'oм. И уже не нужно никакого jQuery.

Что касается Qt, то в нем ведь все равно придется обмазываться C++ на определенном этапе разработки, не так ли? А это ведь грустная перспектива.

Anatolik ★★
()
Ответ на: комментарий от Binary

Не мучьтесь, зачем же? JS — это низкоуровневый язык ведь:3

Лучше возьмите что-то, что в него компилируется. Livescript, например:

class A
  ->
    @x = 1
  @static-prop = 8
  method: ->
    @x + 2

class B extends A
  ->
    @x = 10

B.static-prop #=> 8
b = new B
b.x       #=> 10
b.method! #=> 12

Anatolik ★★
()
Ответ на: комментарий от Anatolik

Да он какой-то ни рыба, ни мясо. Но с кофискриптом я уже видел как люди мучаются, что-то не хочется самому.

Binary ★★★★★
()
Ответ на: комментарий от Binary
var Plugin1 = function(){console.log('ia plugin')};
//классовые методы
Plugin1.metainformaciya1 = 'метаинформация1'
Plugin1.metainformaciya2 = 'метаинформация2'
//объектные методы
Plugin1.prototype.v1 = 1
Plugin1.prototype.v2 = 2

//наследуем поочереодно

////1. сначала функцию конструктор (в js не существует понятия super)
var Plugin2 = function(){
  Plugin1.apply(this, arguments)
};

////2. затем прототип "класса"
Plugin2.__proto__ = Plugin1

////3 прототип "объекта"
Plugin2.prototype = Object.create(Plugin1.prototype)

console.log(Plugin2.metainformaciya1)
console.log((new Plugin2).v1)
special-k ★★★★
()
Последнее исправление: special-k (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.