All streams
Search
Write a publication
Pull to refresh
46
0
iv_s @iv_s

User

Send message
Да и второй не сильно отличается:)(и третий тоже:)(чтобы не засорять топик:)))
Насчет 3, на чем именно медленне? Есть бенчмарки? Я обычно именно wx использую, интересно узнать про подводные камни. Или это и вправду совсем имхо из серии «джава тормозная»?:)
Впринцепе что wxRuby, что QTRuby, что FoxRuby — все для большого-пребольшого ГУЯ подходят(в с++ то на них такое и пишут).
С байндами сложнее(эх, как же все круто было в первой интерпретируемой версии JavaFX:)). Чесно говоря, я такого не видел. Хотя, если мы в листенере устанавливаем значение переменной, это не тот же байнд получается?:)(ну не так синтаксически красиво конечно).

С анимацией можно использовать ruby-opengl, там почти один в один отображение сишного апи.
Также, если рисовать 2D анимацию, можно попробовать gosu. Это библиотека для 2D игр. Хотя и у нее есть байндинги к ogl, вон даже Rubystain(клон Wolfenstain) на ней написали:)
Посмотрел sem, и мьютексы через него же делаете?
Забавная вещь получается, покрайней мере интерфейсно — один в один как Java:)

Мне вот еще интересно, а какой алгоритм помещения переменных в shared mem?
Просто при запуске все глобальные?
Ведь я правильно понял, что sem просто предоставляет буфер для обмена данными в виде ключ/значение?

Тогда будут проблемы с синхронизацией значений переменных, или в shm_put_var значение передается по ссылке?

Кстати, там в комментах пишут:
«shm_put_var has no protection against race conditions. If two scripts insert the same key at the same time php might segfault» — такое тоже придется отлавливать.

И еще, я же могу динамически во время исполнения переопределять функции?(PHP я почти не знаю, вот и спрашиваю:))
То есть что то типо eval("function a(){}"); притом, что `a` уже определена.
Если я сделаю так в одном потоке, нужно автоматически сделать тоже в других(переопределить eval?:)).
Ну только учитывая контекст естественно.
Ruby, первый пункт.
puts "ok" if a =~ /\d{1}/
— как такое не использовать?:)

В языках где нет синтаксической поддержки регэкспов, иногда бывает проще написать маленький метод.
Т.к. синтаксический, проверка шаблона выливается срочки в три минимум, создание объекта, компиляция регулярки, сама проверка.
Проще что-нибудь типо if a.length = 1 and a[0] > ?0 and a[0] < ?9 .

Отсюда и такие ответы, перорвцы и рубисты в большинстве своем голосуют за пукт 1(ну вместе с пхпшниками еще наверно, там процедурная работа с регулярками, что немного лаконичнее оопшной), а остальные за пункт 3.

А в плане производительности, на небольших текстах и если не миллион раз в цикле вызывается, то микрооптимизацией можно не заморачиваться.
А как у вас с мьютексами?
И с дэдлоками:)
Хотя, как я понял, это эмуляция потоков процессами, следовательно общей памяти нет.
Чтобы полностью эмулировать потоки, в килобайт кода думаю не уложиться:)
Кстати, для PHP есть еще порт pthreads.
Просто не смотреть и все;)
Я делаю так — у меня в отдельном потоке запущен джаббер бот(на каждый эксепшн логониться долго), который отправляет описания всех критических ошибок, которые програмно не получилось обработать. На почту же отправляются полная инфа об эксепшене, т.е. весь бэктрэйс + параметры. Притом каждому сообщению присваиваю уникальный индетификатор [123] Some exception, что бы легко можно было на почте найти сообщение, которое в джаббер пришло. Очень удобная схема.
Но это больше для тестового периода подходит, в релизнутом приложении эксепшн не чаще чем раз в полгода должен происходить:)
Смотря какие эксепшены. Все подряд логгировать конечно нет смысла. А вот если база отвалилась или еще что-нибудь такое страшное, то тут не только на почту и в джаббер, тут и смски прикрутить можно:)
Кстати, еще удобно эксепшены отправлять на специальный ящик, а особо важные — джабберботом.
Как я понял, это эмуляция механизма catch/throw в Ruby(для классических исключений там используется синтаксис begin/rescue/ensure/raise).
Для иллюстрации можно привести пример кода из популярного фрэймворка Sinatra.
Есть блок catch(:halt), который отлавливает комманду halt в контроллере. Как только она вызывается, обработка контроллера прекращается, и результат отправляется пользователю. Таким же методом можно реализовать и редирект.
Отличие rescue/raise(классические эксепшены) и catch/throw(по сути «умный» goto) в том, что первый для исключительных ситуаций, когда что то пошло не так, а второй для вполне нормальных, типо редиректа(ну, конечно если причиной редиректа не послужмла ошибка).
В языках где нет такого разделения использоваиние исключений для не исключительных ситуаций хоть и идеалогически неверно, но все же иногда очень удобно:)
Начинать нужно с низов. Ассемблер конечно перекосы, но на нем очень хорошо архитектуру ЭВМ учить:)
Лучше всего начать с С. Обычное процедурное программирование. Ручное управление памятью, выделение, высвобожднние. Паскаль в этом плане ну уж слишком академический.
Затем, освоившись с этим перейти к строгому ООП языку, например Java или C# — и наслаждаться самой концепцией ООП и, что самое главное — динамическим массивами и сборщиком мусора(первое время после си — ну просто супер:))
Затем, если на этом этапе не остановитесь конечно, посмотреть какой-нибудь динамический язык — Perl Python или Ruby.
Лучше все три, по очереди:) Сам, как рубист, борюсь с желанием советовать первым изучить Ruby, но, не пограммировав на других языках вы не поймете всей прелести Ruby. Как извесно познание приходит в сравнении;)
Php, если не собираетесь работать на нем, лучше не смотреть, ничего нового/полезного там нет.
А если избрали его для будущей работы — не смотрите никакие другие динамические языки. Работать потом не сможете:)

После такого курса — любой следующий императивный язык будет осваиваться за три-четыре вечера. Потому что будет понимание как оно внутри работает©, что такое ООП(Java/C#), что такое динамическая типизация, всякие фишки типо метапрограммирования(Ruby/Python).

Дальше уже можно осваивать технологии, если решили идти в вебдев — то HTTP, сесии, куки, HTML, Javascript, сервера(Apache,Nginx,Lighttpd).
Тут(да и на всех предыдущих этапах) очень полезен юникс какой-нибудь. Были сложности с линуксами — поставте самый простой ubuntu. Проще чем виндовс ставится.

Опять же, нужно изучать не только языки, но и технологии. Банальная работа с файлами, базы данных(SQL), работа с сетью(сокеты), окошки(GUI).

Очень хорошо во время обучения ставить себе задачу. Например написать какую-нибудь утилитку типа будильника.
Тут сразу осваивается язык и библиотеки. Освоите GUI для рисования окошка и работу со звуком(или даже проигрывание mp3:)). Такие учебные программы обычно по десять раз переписываются с нуля, потому что все время приходит в голову мысль что «все не так, а должно быть так».

А вот после всего этого курса можете посмотреть что-нибудь функциональное. И сломать себе мозг после императивщины:)
Про cohesion и loose coupling вы конечно загнули:) Это уже на более поздних стадиях, когда о проектировании архитектуры задумываться нужно.
Хм, ну мне и без надобности, я рубист. Но, по крайней мере с Mysql из инстоллера проблем не было.
Не знаю как 10.4, но на 10.5 Apache и PHP прямо из коробки. А для Mysql есть официальный инстоллер, даже иконку управления в System Preferences.
Прочитав на хаюре пост про устройство светового пистолета, не выдержал приступа ностальгии и купил себе денди:)
Кстати, этот самый световой пистолет на LCD телевизоре не работает… Пришлось достовать старый телик и чулана:)
Присоединитесь к блогу, а затем в редактировании поста выберите этот блог.
А я так и не нашел, подумал что ляп — это iPhone в правом нижнем углу:)
В исходниках функция likeFunc овечает за обработку LIKE, просто ее переписать и собрать измененный исходник.
Тоже вариант, тогда и REGEXP тоже до кучи, мне ее в SQLite всегда не хватает.
И, как понимаю, вы от зависимости от ICU избавились?

Information

Rating
Does not participate
Works in
Registered
Activity