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)
Ответ на: комментарий от X-Pilot

Ха. Сначала уход от нативщины осуществлялся как раз для кроссплатформенности. Теперь, когда почти в каждом коммуникаторе armhf, а набор ОС потихоньку превращается в зоопарк, всё наоборот... Куда катится мир...

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

Вся проблема в том, что jQuery - это далеко не только $.each... Ну, последние версии модульные, но всё равно весь ненужный мусор не выкинешь...

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

это для каких это ос софта нет? на яву - куча, на ios с androidом и того больше, симба тоже не страдает от недостатка. вот у всяких там blackberry и webOS да, нехватка есть, но кому они нафиг сдались?

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

Я даже не объёме, я о грузности архитектуры либы в целом. Там почти всё делается через одно место (в буквальном смысле), а то, что не через него, то жуткий ООП...

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

Мне вот как раз jQuery не нравился недостаточным использованием ООП.. :)) Короче, моя позиция в том, что jQuery использовать можно, лишь бы с умом. А то вечно прибьют логику гвоздями к морде, да ещё и выбирают по нескольку раз одно и то же, а потом jquery виноват остаётся.

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

jquery бесполезная либа. Во-первых, постоянно сканирует входящие параметры регулярными выражениями, во-вторых содержит много лишней логики для простых задач, в частности для «декларативного» биндинга, в-третьих мне вообще не нравится идея сканирования дом дерева, но сейчас только так работают везде, не только в jquery. Т.о. присутствует несколько мест существенного неоправданного снижения производительности без какой-либо пользы. Как бы я ни ценил вклад Ехуды в руби проекты, jquery это бред.

special-k ★★★★
()
Последнее исправление: special-k (всего исправлений: 1)
Ответ на: комментарий от Binary

в ff коллбек от xhr или setTimeout выполняется в другом потоке параллельно основному, а в хроме, как положено, будет исполнено только когда основной поток прекратится. Весёлые, знаете ли, сайд-эффекты бывают.

никогда setTimeout (и xhr) НЕ не выполняется внутри параллельного потока.. ни в Firefox , ни в других браузерах... :) .. это просто было смешно предположить параллельный поток...

если в Firefox вы используете блокирующие функции — то код setTimeout выполняется внутри этих блокируюзих функциях , НО КОД НЕ ВЫПОЛНЯЕТСЯ ПАРАЛЛЕЛЬНО — НИ КОГДА (кроме как через worker)..

если не веришь — вот тебе простой тест. :)

$ cat index.html

<!DOCTYPE html>

<html>
    <head>
        <meta charset="utf-8" />
        
        <title>firefox-thread-safe-test</title>
        
        <style>
            /*<![CDATA[*/
                body {
                    font-family: sans-serif;
                    background: white;
                    color: black
                }
                
                a {
                    color: blue;
                }
                
                .page {
                    margin: auto;
                    max-width: 1000px;
                }
            /*]]>*/
        </style>
        
        <script>
            //<![CDATA[
                (function (global) {
                    'use strict'
                    
                    var module = global.app_main = {
                            THREAD_SAFE_ERROR_STR: '*** ВНИМАНИЕ!! ОБНАРУЖЕНО ЧТО БРАУЗЕР (функция setTimeout) НЕ ЯВЛЯЕТСЯ ПОТОКОБЕЗОПАСНЫМ!!! ***',
                            
                            THREAD_COUNT: 100, // количество потоков [на самом деле -- лишь ПСЕВДОпотоков получаемых через setTimeout()]
                            THREAD_TIMEOUT: 1, // количество миллисекунд для setTimeout()
                            
                            create_test_object: function () {
                                var test_object = {
                                        _is_unsafe_state: false, // переменная отвечающая за НЕбезопаснось состояния
                                        
                                        get_state: function () {
                                            if (test_object._is_unsafe_state) {
                                                // XXX ПРОВЕРКА #1
                                                
                                                alert(module.THREAD_SAFE_ERROR_STR)
                                                return
                                            }
                                            
                                            return test_object._state_value
                                        },
                                        
                                        set_state: function (value) {
                                            if (test_object._is_unsafe_state) {
                                                // XXX ПРОВЕРКА #2
                                                
                                                alert(module.THREAD_SAFE_ERROR_STR)
                                                return
                                            }
                                            
                                            test_object._is_unsafe_state = true
                                            test_object._state_value = value
                                            test_object._is_unsafe_state = false
                                        },
                                        }
                                
                                return test_object
                            },
                            
                            run_test: function (test_name, test_object, status_line_elem) {
                                var new_value = test_name + ': ' + Math.floor(Math.random() * 1000000).toString()
                                
                                test_object.set_state(new_value)
                                
                                status_line_elem.textContent = 'Обновлённое состояние: ' + new_value
                                
                                if (test_object.get_state() != new_value) {
                                    // XXX ПРОВЕРКА #3
                                    
                                    alert(module.THREAD_SAFE_ERROR_STR)
                                    return
                                }
                                
                                setTimeout(function () {
                                        module.run_test(test_name, test_object, status_line_elem)
                                }, module.THREAD_TIMEOUT)
                            },
                            
                            main: function () {
                                var test_object = module.create_test_object()
                                var status_line_elem = document.querySelector('.status-line-object')
                                
                                status_line_elem.innerHTML = ''
                                
                                // запускает МНОГО паралельных тестов (потоков/превдопотоков)
                                for (var name_i = 0; name_i < module.THREAD_COUNT; ++name_i) {
                                    module.run_test('Я есть поток #' + name_i.toString(), test_object, status_line_elem)
                                }
                            },
                            }
                    
                    document.addEventListener('DOMContentLoaded', module.main)
                }) (this)
            //]]>
        </script>
    </head>
    <body>
        <div class="page">
            <h1>firefox-thread-safe-test</h1>
            
            <p><span class="status-line-object">...</span></p>
            
            <p>Примечание: если браузер (например Firefox) использует разные потоки для setTimeout() [а не один и тот же main loop] -- то мы увидим ошибку</p>
        </div>
    </body>
</html>

выполняя этот тест внутри Firefox — ошибка НЕ появится.

так что я как всегда убеждаюсь в том что критикуют Javascript именно те люди которые НЕ знают толком его.. :-)

user_id_68054 ★★★★★
()
Последнее исправление: user_id_68054 (всего исправлений: 4)
Ответ на: комментарий от MiniRoboDancer

Dalvik - просто виртуальная машина, держать на нём всю систему незачем.

так есть же уже нативный режим. именно то о чем ты говоришь.

на HTML5 уже масса онлайн-софта, нужна лишь его адаптация под окружение FFOS да и вообще под маленький тачскрин.

и чем это лучше жабы?

olegsov
()
Последнее исправление: olegsov (всего исправлений: 1)
Ответ на: комментарий от essir

вот я и говорю - android единствевнный под который есть какой-то софт, который в большинстве г-но и игры ненужные (не говоря о симбе и иос).

и это только благодаря силе гугля.

а все эти мертворожденные мобильные оси софта не имеют в принципе.

зачем нужно еще одно мертворожденное создание? кто будет его пробивать? Если они даже не смогли противостоять экспансии хрома, неужели они осилят бороться с гуглем на рынке мобильных ОС?

olegsov
()
Последнее исправление: olegsov (всего исправлений: 1)
Ответ на: комментарий от olegsov

так есть же уже нативный режим

Вот только внутридальвиковый системный софт на нём вряд ли перепишут, по понятным причинам.

и чем это лучше жабы?

Тем, что на Ведре не жаба, и никакую десктопную жабопрогу ты на нём без полного переписывания гуя и сопутствующего ему кода не заведёшь, хотя бы потому, что там нет ни AWT, ни Swing.

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

Ну да, конечно, именно поэтому, когда отлаживаю HTTP Binding, в Firefox при брейкпоинте следущий запрос куда-то пропадает, а в хроме работает нормально.

которые НЕ знают толком его

Покажите свой код ;)

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

Уменьшение к-ва кода и велосипедов в оном. А также возможность использования готовых виджетов и плагинов, что, опять же, негативным образом сказывается на велосипедной промышленности.

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

Вот только внутридальвиковый системный софт на нём вряд ли перепишут, по понятным причинам.

какая разница, на чем система написана?

Тем, что на Ведре не жаба, и никакую десктопную жабопрогу ты на нём без полного переписывания гуя и сопутствующего ему кода не заведёшь, хотя бы потому, что там нет ни AWT, ни Swing.

десктопные гуи на телефоне всё равно бесполезны. а логику можно и перекомпилировать.

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

Слушай, мне ещё в тот раз надоело писать тебе одно и то же, так давай я хоть в этой теме не буду повторяться?

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

Хотя, похоже, я допустил ошибку в тесте. Буду дальше ковырять, почему у меня поведение разное в браузерах. Возможно, особенность файрбага.

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

Я никем не назывался. Ну например, реализация контекстных меню, куча всяких лайтбоксов, которые, впрочем, есть и на других фреймворках, но тем не менее, куча разных виджетов, типа chosen и иже с ними. Вот ещё есть jquery.transit, который представляет для CSS3 transitions интерфейс, совместимый с jquery.animate, чем делает возможным программировать транзишны, независимо от браузера. И это, прошу заметить, проблема совсем не только с IE. К тому же, таким образом можно делать фоллбек обратно на анимацию jquery.

А вы как делаете анимацию?

Ну и, всё-таки, обработку событий jquery кое-как упрощает, есть плагины для всяких свайп ивентов. Всё это можно и без jquery, конечно, но смысл велосипедить?

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

Вот, кстати, случай из недавнего: событие onscroll прекрасно обрабатывалось в хроме, но фейлило в фаерфоксе, а $(this).scroll() работало нормально и там, и тут.

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

Всё-таки, реально подвёл файрбаг. Нехорошо получилось. Когда отлаживаешь им, проблема воспроизводится, без него — нет. Впредь буду отлаживать хромом.

Но вот с хромом недавно возникла тоже интересная история: приходит картинка в base64, производится её раскодирование из base64, используя CryptoJS, а потом подсчёт SHA-1 хеша. Так вот, в новом хроме из генты, если не использовать отладчик, хеш считается неправильно. Если же просто поставить любой брейкпоинт, даже который никогда не сработает (с условием false, например), то хеш, волшебным образом, начинает считаться правильно. В фф или более старых хромах такой проблемы нет. Скорее всего, это временный баг и надо использовать хром стабильный, но всё равно случай забавный.

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

куча всяких лайтбоксов

position: fixed;
width: 100%;
height: 100%;

chosen

Технически календарь-таки сложнее) Если я пишу крупную систему, то смешно привязываться к jquery из-за такой мелочи.

А вы как делаете анимацию?

Да как-то никак касаемо UI.. вообще transition для этого. Но все должно непременно выпригивать?)

jquery.transit jquery.animate

Жесточайшее смешение логики и отображения.

$(this).scroll() работало нормально и там, и тут.

зато ты не разобрался почему у тебя не работало onscroll.

special-k ★★★★
()
Последнее исправление: special-k (всего исправлений: 1)
Ответ на: комментарий от special-k
position: fixed;
width: 100%;
height: 100%;

Это даже не смешно.

Технически календарь-таки сложнее) Если я пишу крупную систему, то смешно привязываться к jquery из-за такой мелочи.

Есть примеры крупных систем, написанных тобой без jQuery? Контрпримеров то за глаза... И вообще:

Если я пишу крупную систему, то смешно привязываться к %anything% из-за такой мелочи.

Поправил. Не благодари.

К тому же, а за сколько ты напишешь chosen без jQuery? Ну вот так, навскидку оцени? За ТЗ возьмём этот: http://harvesthq.github.io/chosen/

Жесточайшее смешение логики и отображения.

Это веб, детка :) К тому же, разделять логику и отображение мешает тебе что? Или если js, то это сразу логика?

зато ты не разобрался почему у тебя не работало onscroll

Ой спасибо, сейчас буду для каждого браузера выяснять. Когда это уже сделали за меня и любезно написали обёртку, я буду городить свои костыли, совсем не лучшие костыли, т.к. чтобы сделать хорошие, надо потратить действительно немало времени. Привет, велосипед! ©

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

Есть примеры крупных систем, написанных тобой без jQuery?

Зачем тебе?) Ну пройди по последней ссылке в профиле.. как вариант.

Поправил. Не благодари.

Правильно поправил)) суть именно такая.

Или если js, то это сразу логика?

Конечно)) С м.т.з. даже DOM это уже логика.

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

Возможности jquery это одно, возможности конкретного браузера, это совсем-совсем другое.

special-k ★★★★
()
Последнее исправление: special-k (всего исправлений: 1)
Ответ на: комментарий от special-k

Возможности jquery это одно, возможности конкретного браузера, это совсем-совсем другое.

Если тебе имеет смысл интересоваться возможностями браузеров, конечно.. а если нет, то вообще не стоит огород городить наверно.

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

Зачем тебе?) Ну пройди по последней ссылке в профиле.. как вариант

Мнэээ. Пример нерелевантный, там почти всё на канвасе, тут бы и я jQuery отложил в сторону, знаешь ли.

Правильно поправил)) суть именно такая

Так что же ты ещё не в машинных кодах строчишь?

Конечно)) С м.т.з. даже DOM это уже логика

Наверно, стоит на сей забавной ноте и остановиться :))

Возможности jquery это одно, возможности конкретного браузера, это совсем-совсем другое

Если тебе имеет смысл интересоваться возможностями браузеров, конечно.. а если нет, то вообще не стоит огород городить наверно.

Я вообще не понял, что это значит? Но то, что ты любишь велоспорт, это, видимо, как оно есть.

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

там почти всё на канвасе

лол, там ровно 2 элемента на канвасе: поле и миникарта. И штук 50 (крупных) виждетов интерактивно реагирующих на информацию с сервера.

Кстати, оценишь chosen?

Ну неделя-две, наверно, только нафига мне эти ui..

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

только нафига мне эти ui

ах вот оно как, не надо вам ui. ну так а что тогда мы тут спорим?

ты вот подумай, скажу я заказчику, что буду две недели делать chosen, вместо того, чтобы прикрутить готовый за полчаса, знаешь, какая будет его реакция?

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

интерактивно реагирующих

      if (this.is_multiple) {
        this.container.html('<ul class="chzn-choices"><li class="search-field"><input type="text" value="' + this.default_text + '" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chzn-drop"><ul class="chzn-results"></ul></div>');
      } else {
        this.container.html('<a href="javascript:void(0)" class="chzn-single chzn-default" tabindex="-1"><span>' + this.default_text + '</span><div><b></b></div></a><div class="chzn-drop"><div class="chzn-search"><input type="text" autocomplete="off" /></div><ul class="chzn-results"></ul></div>');
      }

И вот такая методика работы с dom тут врял ли подойдет.

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

какая будет его реакция?

А ты скажи ему правду.. скажи, что нахрен не нужна ему вся эта хрень, весь этот интернет, что все эти долбанные формы ему нахрен не сдались, что это пустая трата времени и денег. И посмотри на его реакцию.

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

А на хлеб с маслом мне вышлешь? Я тогда прям щас напишу...

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

что им надо было сделать? Использовать шаблонизатор?

Им не знаю, мне нет.

А какой сейчас для js в моде? :)

о, вот тут Как ныне принято писать на js? хорошо все обсудили.

special-k ★★★★
()
Последнее исправление: special-k (всего исправлений: 2)
Ответ на: комментарий от special-k

Им не знаю, мне нет

Ну расскажи, твой код обфусцирован, не могу приобщиться к прекрасному.

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

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

Там используется DSL, обсервер, а так же несколько абстракций типа виджет, контроллер... Суть DSL в динамической генерации элементов в конечном счете с помощью createElement, т.о. не нужно сканирование дерева, плюс становятся доступными такие вещи как удаление/возвращение элемента в дом, в общем куда более обширные возможности, чем если ты работаешь с элементами как с текстом. Вплоть до того, что ты можешь обновить содержимое текстового узла..

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

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

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

special-k ★★★★
()
Последнее исправление: special-k (всего исправлений: 1)
Ответ на: комментарий от special-k

Интересно.

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

А так что мешает?

т.о. не нужно сканирование дерева

Я не очень понял, где тут связь. Ты имеешь ввиду, что контроллер хранит в себе созданный ранее элемент и потом может его использовать, не ища снова? Ну так и с jQuery так можно.

плюс становятся доступными такие вещи как удаление/возвращение элемента в дом

А это почему с jQuery нельзя?

В общем, жду либу в опенсорс.

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