LINUX.ORG.RU

Mozilla Phones for Apps

 , , ,


2

2

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

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

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

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

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

Deleted

Проверено: Shaman007 ()

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

Да он какой-то ни рыба, ни мясо.

Это как?

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

Вполне справедливое желание. Если вы приведете примеры мук, я постараюсь развеять ваши страхи.

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

закопать, ибо ничего хорошего из этого не выйдет.

блестяще

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

За всё нужно платить. За динамические плюшки мы получаем определённый риск. Чем больше мощи мы получаем от конкретной платформы(в данном случае ЯП) - тем выше риск, что мы напортачим. Вы призываете ограничить ЯП, ОС и вообще всё что можно до уровня, когда пользователь не сможет случайно выстрелить себе в ногу? Может, лучше ответственно подходить к любому делу, в том числе и к написанию ПО? А не бояться, что что-то пойдёт не так.

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

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

В динамической типизации? Замечательный способ обфускации.

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

А что вам не нравится? Разве instanceof можно использовать с примитивами? Насколько я знаю - нельзя. instanceof отлично работает с классами, но не с встроенными в ЯП примитивами.

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

Вполне справедливое желание. Если вы приведете примеры мук, я постараюсь развеять ваши страхи.

Отлаживать как?

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

Вы призываете ограничить ЯП

Нет, в питоне можно делать то же самое, и я весьма доволен им.

Может, лучше ответственно подходить к любому делу

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

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

Метакласс может изменять класс в зависимости от контекста. Декораторы позволяют изменить объявленный выше класс. А monkey-pathicng позволяет изменять уже созданный экземпляр класса(объект). Всё это в Java Script реализуется очень просто.

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

С практической стороны это иногда удобно. В некоторые ЯП специально в дополнение к обычным классам, добавляли ещё и динамические классы.

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

Даже если пока NDK для Firefox OS не опубликован, его по любому опубликуют. Не будут же игры на JS писать...

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

Не будут же игры на JS писать...

Будут.

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

Разве instanceof можно использовать с примитивами? Насколько я знаю - нельзя

Выходит, что нет. Однако, можно есть ещё «класс» Boolean, который ведёт себя совсем иначе. Вообще, с приведением к boolean в js тоже веселье: к false приводятся только undefined, null и 0, всё остальное — всегда true. Весьма запаривает после питона, у которого к false приводятся и пустой массив, и пустая строка... Но это можно посчитать за синдром утёнка. И тут вопрос: а где тогда искать логику в js? Я её нашёл в том, что неопределённые св-ва у объектов === undefined, значит удобно делать такое:

if (obj.x) {
  // св-во определено
} else {
  // св-во не определено
}

И всё прекрасно... пока не натыкаешься на св-во, которое равно нулю... :( И вот таких мелочей — вагон и маленькая тележка, на языке не так удобно и приятно писать, как на том же питоне. Понятно, что придраться к чему-то конкретному весьма сложно: «тут так принято», но ощущения от работы с языком уже не те. Несколько облегчают жизнь всякие jQuery, но добавляют много лишнего кода и обёрток, затрудняющих отладку. А уж о расширении jQuery я вообще молчу, прототипами там и не пахнет...

И вот если повспоминать, дофига таких мелочей, которые накаляют.

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

Класс можно модифицировать по такому же принципу, как в js

Нельзя, в js можно применять изменения ко всем объектам с заданным прототипом (равно как и в руби ко всем объектам класса), в питоне это невозможно.

special-k ★★★ ()

Синус, выложи где-нибудь твою предыдущю аватарку с Сержем! Очень уж прикольная. =) Сорри за оффтоп.

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

к false приводятся и пустой массив, и пустая строка...

О_О

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

Иногда приходится иметь дело с чужими классами. Как-то, изменяя поведение одного класса из стандартной поставки Prestashop, я столкнулся с тем, что метод данного класса нужно было изменить, не затрагивая исходный файл с данным классом. Пришлось в override закинуть файл с классом, который наследовался от оригинального, и подменял нужный мне метод на мой. А ведь в Java Script я мог бы решить данную проблему куда элегантней, и без наследования.

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

Метакласс может изменять класс в зависимости от контекста

Можно это развернуть?

Декораторы позволяют изменить объявленный выше класс

Функции высшего порядка есть вообще много где, вся соль питоновских декораторов как раз в синтаксическом сахаре, которого в js нет и в помине, а есть в js уродливые конструкции, тонны их.

А monkey-pathicng позволяет изменять уже созданный экземпляр класса(объект)

Ничего подобного, класс можно точно так же поменять. Мне пример, что ли, приводить, или как-нибудь своим ходом?

Всё это в Java Script реализуется очень просто

соу? Как это противоречит мне?

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

Нельзя, в js можно применять изменения ко всем объектам с заданным прототипом (равно как и в руби ко всем объектам класса), в питоне это невозможно.

Мы с тобой уже по этому поводу спорили, мне не хочется снова тебе же объяснять, что ты не прав.

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

Ну приведи мне кусочек кода, где в инициализированные объекты добавляется метод после его добавления в класс.

special-k ★★★ ()
Ответ на: комментарий от special-k
>>> class X(object):
...   pass
... 
>>> x = X()
>>> x.x()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'X' object has no attribute 'x'
>>> X.a = lambda self: 5
>>> x.a()
5
Binary ★★★★★ ()
Ответ на: комментарий от Binary

пока не натыкаешься на св-во, которое равно нулю... :(

отучиваемся от Си и все будет в порядке.

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

В динамической типизации? Замечательный способ обфускации.

Все функции в документации prelude.ls снабжены сигнатурой. Для задач написания фронтенда этого вполне достаточно.

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

отучиваемся от Си и все будет в порядке

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

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

Отлаживать как?

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

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

О, юнит-тесты в js это отдельная большая тема. Но я, может, быдлокодер, но js без отладчика использовать абсолютно не готов, что бы там в него ни транслировалось.

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

в питоне это невозможно

class Number:
    def __init__(self, value):
        self.value = value
    def return_something(self):
        return self.value * 2

a = Number(5)
b = Number(6)
print a.return_something(), b.return_something() #10 12

def return_something_else(num):
    return num.value * 3

Number.return_something = return_something_else

print a.return_something(), b.return_something() #15 18
PolarFox ★★★★★ ()
Ответ на: комментарий от Anatolik

Кстати, а что мне юнит-тесты то, трейсбеки дадут в оттранслированном коде, и что с ними делать?

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

ИМХО, очевиднее некуда, куда уж нам до прототипов :))

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

А си то ни при чём

Желание приводить шопопало к булеану...

Ты неправильно проверяешшь наличие свойства. a.x может возвращать false не только в отсутствие свойства, но и когда есть a.x == false, или a.x == undefined.

Так проверять вообще нельзя.

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

в руби и js объект и класс/функция-конструктор, не имеют ничего общего, это разные объекты.. разные пространства, как мне могло прийти в голову такое))

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

Дык, если a.x == undefined, то можно сказать, что св-ва то и нет? Или как тогда проверять? hasOwnProperty?

Ну вообще да, согласен, что тут, скорее, синдром утёнка, больно удобно в питоне с пустыми строками и массивами.

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

Я вообще не понял, причём тут функция-конструктор? А так, всё очевидно, тебе надо пропатчить класс — ты патчишь класс, что тут такого особенного? Или уже привычка ходить окольными путями?

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

тебе надо пропатчить класс — ты патчишь класс

верно, надо пропатчить объект - патчишь пространство объектов, а не оба сразу.

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

Где ты видел оба сразу? И что такое «пространство объектов»?

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

А надо объект, так объект. Соответственно, миксины добавляешь, или в классы, или в объекты (extend/include). В руби все собрано и довольно гармонично. В js все разобрано - делай что хочешь, но, в целом, много общего.

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

Пример манкипатчинга одного объекта

import types

class Number:
    def __init__(self, value):
        self.value = value
    def return_something(self):
        return self.value * 2

a = Number(5)
b = Number(6)
print a.return_something(), b.return_something() #10 12

def return_something_else(num):
    return num.value * 3

def return_something_completely_different(num):
    return num.value * 5

Number.return_something = return_something_else

print a.return_something(), b.return_something() #15 18

a.return_something = types.MethodType(return_something_completely_different, a)

print a.return_something(), b.return_something() #25 18

Функция и bound method — две разные сущности, и ко второй надо явно приводить. Как бонус — self не указывает на чёрти что, в отличие от this в js.

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

В общем твоё незнание питона не делает js менее убогим недоязычком.

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

Ты создал аттрибут у класса, он стал доступен из объекта этого класса. Что не так?

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

Какие миксины в js вообще? Я вообще потерял нить твою, абсолютно на корню.

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

Проблема даже не в том, тут несколько человек уже ему объясняли всё это, довольно долго и доходчиво. Время прошло, а пойти посмотреть, что там как на самом деле, он не догадался, а стал дальше распространять легенды.

Binary ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.