> Общее адресное пространство для всех программ имхо убивает безопасность.
Нет. Посмотрите Singularity. В той же JVM в одном процессе могут работать изолированно разные апликации (основа J2EE). Все дело в том, что загружаемый код предварительно проходит валидацию на корректность, и таким образом искусственно отсекается невалидные операции с памятью. В Singularity вообще предлагают все выполнять в нулевом кольце защиты как один процесс.
Реальный бред — это передача ссылок между процессами. И уж тем более, если он претендует на распределенную модель вычислений. Апликации не живут вечно. Они жрут память, грохаются, иногда вместе с девайсами, апдейтятся.
По-моему. DZ делает для себя открытие велосипеда. Он не понимает или не видит современные тенденции развития ПО. В качестве модели того, что должна предоставлять операционка:
— Software Transactional Memory — граф объектов с транзакционным доступом. Вся память делится на репозитории, каждый из которых представляет собой граф объектов. Для доступа к каждому репозиторию извне используется SPI (Service Provider Interface), а ссылки действительны исключительно внутри графа. Persistence графа делается прозрачно внутри SPI по мере необходимости.
— Асинхронную модель параллельной обработки на базе Actors. Отказаться от тредов и процессов как таковых, ибо они лимитированы и плохо параллелятся.
— Единый Registry объектов и сервисов.
— Transport SPIs — сервисы приема-передачи данных.
А DZ зациклен на том, как посчитать сцылки и сделать вечными программы.
Мы его где-то лет пять назад и купили, после того, как увидели интерфейс JProfiler-а. И пользуем до сих пор. А со сглаживанием все сложнее. Переопределять paintComponent для всех компонентов свинга — дело накладное. Есть пара методов, например установить свой RepaintManager. Но с untrusted апплетами не работает.
Alloy во-первых, коммерческий, во-вторых уже лет пять как не развивается, в-третьих, не поддерживает сглаживание шрифтов. Тем не менее, наверное лучший LaF, который когда-либо был сделан для Java.
Для сложных операций с имиджами можно использовать ImageJ (http://rsbweb.nih.gov/ij/) — функционал, близкий к GIMP, плюс ГУИ. Недостаток — использует старый PixelGrabber API, поэтому не отличается производительностью.
Для ГУЯ можно использовать SwingWT — это обертка над SWT, которая предоставляет API от Swing-а (http://swingwt.sourceforge.net/) (соответственно скорость, быстрая загрузка, etc...). Поддерживается только подмножество Swing.
Не упомянут еще QTJambi — java-фронтенд для QT (в настоящее время не поддерживается).
Substance Look And Feel — симпатичный и настраиваемый L&F.
Flamingo Suit — набор виджетов как в MS Office (оба эти проекта сейчас хостятся на GitHub).
Не обойду стороной и новый JavaFX. В нем, учтены все прежние недостатки Swing, все упрощено, декларативный стиль, и интегрирован функционал SceneGraph (модель визуальных объектов, похожая на Flash). Позволяет быстро и безболезненно наклепать GUI. Можно встраивать существующие компоненты Swing. Обратное пока делается с геморроем. JFXtras — библиотека, расширяющая возможности JavaFX полезным функционалом и виджетами.
Кстати, одним из способов проигрывать видео можно тоже назвать JavaFX.
Под конец, многие java-девелоперы хотят, чтобы их продукт выглядел как нативная апликация и был независим от JVM. Помимо платного Excelsion JET можно порекоммендовать связку GCJ+SWT(SwingWT). Он хоть и уступает в производительности, но компенсирует за счет быстрого старта и нативного SWT.
Они наверное IT-шность страны пропорционально территории считали. ))
Это действительно манипуляция. Но цель отнюдь не ущемить Россию или кого-то там, а демонстрация переспективности вложений. Согласно отчету Гамбия переспективнее для IT-вложений, чем Россия. Вероятно, российские 3.6 балла — это то, что остается от первоначальных вложений после прохода многочистенных процедур распила и отката. ))
По-моему не учтены основные минусы библиотек:
— время на осваивание новой библиотеки сравнимо с разработкой требуемого функционала
— использование стороннего кода делает проект зависимым от стороннего разработчика
— разные члены команды могут использовать разные библиотеки, функционалы которых часто перекрываются, либо вообще повторяют друг друга
Настоящий говнокод — это решение влоб, покрывающее строго фиксированный интервал значений.
if ( n >= 1 )
System.out.println( «1» );
if ( n >= 2 )
System.out.println( «2-1» );
if ( n >= 3 )
System.out.println( «1-2-3» );
if ( n >= 4 )
Ыystem.out.println( «4-3-2-1» );
if ( n >= 5 )
System.out.println( «1-2-3-4-5» );
if ( n >= 6 )
System.out.println( «6-5-4-3-2-1» );
Лет 8 назад у меня тоже была детективная история. Чувак сломал наш сервис через SQL-injection. Дальше по логам вебсервера посмотрели с какого IP были запросы. Затем записи каких пользователей были апдейтнуты. Практически сразу нашли регистр пользователя. Затем взяли данные из полей email, пароль… ну вы поняли…
Вобщем, к вечеру у нас было его имя и факультет университета, где он учится. Затем кинули «затравку», типа нанимаем на работу аналитиков по безопасности. Ну и парень клюнул как ни в чем не бывало. Главное побольше лести, которая завуалирует ключевой вопрос:… и сервис XXX.com ты смог сломать? Ответ был утвердительный. Вобщем дело спустили на тормозах, ибо парень раскаялся и предложил помощь в ликвидации дыр.
Впрочем, ящик ломать вовсе необязательно. В социальных сетях самым главным палевом для человека является не его IP или емайл, а друзья. Из них можно выудить практически все. Лучшие друзья с радостью невзначай заложат неаккуратного хвастуна. Так что будьте аккуратны. Люди — самое слабое место в системе безопасности.
Есть мнение, хотя и не доказано, что PreparedStatement далеко не всегда спасает от SQL Injection. Особенно для «плоских» JDBC драйверов, которые на выходе PreparedStatement конвертируют в обычный SQL (JDBC MySql именно такой). Не думаю, что на sun.com использовали что-то другое…
Кстати, Vaadin можно вообще использовать для написания десктопных приложений. Компонентов в нем больше, чем в свинге и функциональность у них лучше, куча сторонних плагинов. Все, что должна делать апликация — это запустить embedded сервер и открыть окно с браузером на локальный порт.
Одно время стоял выбор между Vaadin и SmartGWT для интерфейса к системе. Выбор пал в пользу последнего ввиду очень кастомизируемых гридов. Да и, как уже говорилось, правильно, когда котлеты отдельно от мух (то есть как GWT). В фреймворках типа Swing, Eclipse RCP, QT рекомендуют использовать для этой цели паттерн MVC. Но на практике его никто не использует — вся модель и операции почти всегда замешаны с визуальными компонентами. То же самое будет происходить и при программировании на Vaadin. GWT же заставляет пользователя изначально отделять мясо от костей.
Кроме того хранить Client View на сервере немного расточительно. И почти каждый пользовательский клик пересылается на сервер, чтобы синхронизировать состояние. А в 99% случаев эти операции с интерфейсом не несут никакой смысловой нагрузки для бизнес логики сервера. Так что подход GWT мне кажется более правильным: клиенту клиентово, а серверу серверово ))
Как еще одна альтернатива есть фреймворк RichFaces с большим набором полезных компонентов. Однако у него та же проблема — View State для каждой страницы хранится на сервере, и при большом числе пользователей начинаются проблемы с памятью, если сессии не свопить в базу.
Идея правильная — компиляция в код некоей унифицированной виртуальной машины. Каждая из архитектур имеет свою реализацию этой ВМ, которая может следовать одной из стратегий:
1. Компиляция всего кода в native на этапе инсталяции или сборки приложения. Годно для смартфонов.
2. Выборочная «HotSpot» компиляция кода в native на runtime этапе — для desktop систем и серверов.
3. Полная интерпретация кода ВМ, либо аппаратная поддержка — для серверов.
Java VM для этой цели не очень хорошо подходит, ибо сильно завязана на сам язык, несмотря на то, что ее реализации на сегодняшний день одни из самых производительных ВМ.
А у меня проблема — в тестах я делаю гораздо больше ошибок, чем в коде ((((
Тесты помогают разработать правильную архитектуру, если следовать одному простому правилу: если у вас не получилось без лишних извратов протестировать модуль — меняйте дизайн. Таким образом правильный модуль будет иметь наименьшее число зависимостей от внешних факторов.
Если я возьму книгу и заменю в ней имена всех персонажей и место действия, а затем перепечатаю ее в другом формате и другим кеглем, будет ли это плагиатом? Однозначно! Это подтвердит любой эксперт, делая анализ текста.
Насчет языков программирования: взять многострадальную Java. Это язык, который используется в Android. Причем используется именно как язык — у него собственная реализация VM, не имеющая к Java никакого отношения. Однако Oracle все же подала в суд на Google именно потому, что Java как язык неотделим от платформы Java. По той же причине проиграла суд Microsoft.
В случае с игрой была сворована логика, принципы и даже диалоги. А это чуть ли не 50% всей игры. Логика игры должна быть неотделима от реализации также как язык Java неотделим от платформы Java, а сюжет книги неотделим от ее героев.
Не совсем понял специфику проблемы. Если вызов и callback идут в одном треде, то GC не должен вообще ничего удалять. Если же Вы делаете вызовы асинхронно, сначала передав указатель на callback, и затем ждете, что из JNI он будет вызван, то ссылку на callback нужно «закрепить» при помощи jobject NewGlobalRef(JNIEnv *env, jobject obj);
Нет. Посмотрите Singularity. В той же JVM в одном процессе могут работать изолированно разные апликации (основа J2EE). Все дело в том, что загружаемый код предварительно проходит валидацию на корректность, и таким образом искусственно отсекается невалидные операции с памятью. В Singularity вообще предлагают все выполнять в нулевом кольце защиты как один процесс.
Реальный бред — это передача ссылок между процессами. И уж тем более, если он претендует на распределенную модель вычислений. Апликации не живут вечно. Они жрут память, грохаются, иногда вместе с девайсами, апдейтятся.
По-моему. DZ делает для себя открытие велосипеда. Он не понимает или не видит современные тенденции развития ПО. В качестве модели того, что должна предоставлять операционка:
— Software Transactional Memory — граф объектов с транзакционным доступом. Вся память делится на репозитории, каждый из которых представляет собой граф объектов. Для доступа к каждому репозиторию извне используется SPI (Service Provider Interface), а ссылки действительны исключительно внутри графа. Persistence графа делается прозрачно внутри SPI по мере необходимости.
— Асинхронную модель параллельной обработки на базе Actors. Отказаться от тредов и процессов как таковых, ибо они лимитированы и плохо параллелятся.
— Единый Registry объектов и сервисов.
— Transport SPIs — сервисы приема-передачи данных.
А DZ зациклен на том, как посчитать сцылки и сделать вечными программы.
Для сложных операций с имиджами можно использовать ImageJ (http://rsbweb.nih.gov/ij/) — функционал, близкий к GIMP, плюс ГУИ. Недостаток — использует старый PixelGrabber API, поэтому не отличается производительностью.
Для ГУЯ можно использовать SwingWT — это обертка над SWT, которая предоставляет API от Swing-а (http://swingwt.sourceforge.net/) (соответственно скорость, быстрая загрузка, etc...). Поддерживается только подмножество Swing.
Не упомянут еще QTJambi — java-фронтенд для QT (в настоящее время не поддерживается).
Substance Look And Feel — симпатичный и настраиваемый L&F.
Flamingo Suit — набор виджетов как в MS Office (оба эти проекта сейчас хостятся на GitHub).
Не обойду стороной и новый JavaFX. В нем, учтены все прежние недостатки Swing, все упрощено, декларативный стиль, и интегрирован функционал SceneGraph (модель визуальных объектов, похожая на Flash). Позволяет быстро и безболезненно наклепать GUI. Можно встраивать существующие компоненты Swing. Обратное пока делается с геморроем. JFXtras — библиотека, расширяющая возможности JavaFX полезным функционалом и виджетами.
Кстати, одним из способов проигрывать видео можно тоже назвать JavaFX.
Под конец, многие java-девелоперы хотят, чтобы их продукт выглядел как нативная апликация и был независим от JVM. Помимо платного Excelsion JET можно порекоммендовать связку GCJ+SWT(SwingWT). Он хоть и уступает в производительности, но компенсирует за счет быстрого старта и нативного SWT.
Это действительно манипуляция. Но цель отнюдь не ущемить Россию или кого-то там, а демонстрация переспективности вложений. Согласно отчету Гамбия переспективнее для IT-вложений, чем Россия. Вероятно, российские 3.6 балла — это то, что остается от первоначальных вложений после прохода многочистенных процедур распила и отката. ))
— время на осваивание новой библиотеки сравнимо с разработкой требуемого функционала
— использование стороннего кода делает проект зависимым от стороннего разработчика
— разные члены команды могут использовать разные библиотеки, функционалы которых часто перекрываются, либо вообще повторяют друг друга
if ( n >= 1 )
System.out.println( «1» );
if ( n >= 2 )
System.out.println( «2-1» );
if ( n >= 3 )
System.out.println( «1-2-3» );
if ( n >= 4 )
Ыystem.out.println( «4-3-2-1» );
if ( n >= 5 )
System.out.println( «1-2-3-4-5» );
if ( n >= 6 )
System.out.println( «6-5-4-3-2-1» );
Вобщем, к вечеру у нас было его имя и факультет университета, где он учится. Затем кинули «затравку», типа нанимаем на работу аналитиков по безопасности. Ну и парень клюнул как ни в чем не бывало. Главное побольше лести, которая завуалирует ключевой вопрос:… и сервис XXX.com ты смог сломать? Ответ был утвердительный. Вобщем дело спустили на тормозах, ибо парень раскаялся и предложил помощь в ликвидации дыр.
Впрочем, ящик ломать вовсе необязательно. В социальных сетях самым главным палевом для человека является не его IP или емайл, а друзья. Из них можно выудить практически все. Лучшие друзья с радостью невзначай заложат неаккуратного хвастуна. Так что будьте аккуратны. Люди — самое слабое место в системе безопасности.
Кроме того хранить Client View на сервере немного расточительно. И почти каждый пользовательский клик пересылается на сервер, чтобы синхронизировать состояние. А в 99% случаев эти операции с интерфейсом не несут никакой смысловой нагрузки для бизнес логики сервера. Так что подход GWT мне кажется более правильным: клиенту клиентово, а серверу серверово ))
Как еще одна альтернатива есть фреймворк RichFaces с большим набором полезных компонентов. Однако у него та же проблема — View State для каждой страницы хранится на сервере, и при большом числе пользователей начинаются проблемы с памятью, если сессии не свопить в базу.
1. Компиляция всего кода в native на этапе инсталяции или сборки приложения. Годно для смартфонов.
2. Выборочная «HotSpot» компиляция кода в native на runtime этапе — для desktop систем и серверов.
3. Полная интерпретация кода ВМ, либо аппаратная поддержка — для серверов.
Java VM для этой цели не очень хорошо подходит, ибо сильно завязана на сам язык, несмотря на то, что ее реализации на сегодняшний день одни из самых производительных ВМ.
Тесты помогают разработать правильную архитектуру, если следовать одному простому правилу: если у вас не получилось без лишних извратов протестировать модуль — меняйте дизайн. Таким образом правильный модуль будет иметь наименьшее число зависимостей от внешних факторов.
Насчет языков программирования: взять многострадальную Java. Это язык, который используется в Android. Причем используется именно как язык — у него собственная реализация VM, не имеющая к Java никакого отношения. Однако Oracle все же подала в суд на Google именно потому, что Java как язык неотделим от платформы Java. По той же причине проиграла суд Microsoft.
В случае с игрой была сворована логика, принципы и даже диалоги. А это чуть ли не 50% всей игры. Логика игры должна быть неотделима от реализации также как язык Java неотделим от платформы Java, а сюжет книги неотделим от ее героев.
akka.io