singlepost

Tools << На главную или назад  

В мире существуетмного хороших инструментов для программирования и библиотек. И если правильно их подобрать, то любую багу можно будет обойти, примерно, как инспектор Гаджет выходит из какой-нибудь невероятной ситуации при помощи своих железяк.
Предлагаю составить список вкусностей, которыми мы пользуемся, но вписывать стоит только общие решения, то есть библиотека для рисования круглых кнопочек для языка TCL думаю не очень подходит. Кроме самого инструмента еще краткое описание и ссылку на производителя.

17 ответов в теме “Tools”

  1. 17
    Владимир Веревкин ответил:

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

  2. 16
    Алексей Злобин ответил:

    Денис, ты не совсем прав: последние версии AspectJ работают с аннотациями и умеют перестраивать уже скомпилированный код, в том числе во время выполнения (вроде нужно их ClassLoader использовать для rt-weaving'а, хотя не уверен). Spring AOP использует ту-же технику, описания аспектов, но сколько я понял не перестраивает байт-код, а просто выдаёт наружу прокси-объекты.

    Олег, разжуй пожалуйста для новичка(где-то вередина мана) ещё раз: в Руби АОП часть языка, или дописывается в сторонних библиотеках а-ля Spring AOP?

  3. 15
    Dmitry Sharov ответил:

    Давно хотел сказать огромное спасибо за Fiddler Денису, но всё было как то лень, и вобщем, спасибо ОГРОМНОЕ! =) Я уже собирался свой а то писать =)

  4. 14
    Роман Торстэн ответил:

    да ребята, вы жжете :)
    типа описывать язык для которого библиотека предназначена не нужна, да ?
    Ну а почему тогда тема не названа net & java tools ?

  5. 13
    Олег Андреев ответил:

    Во-первых, рельсы – не монолит. Ты можешь использовать active_support вообще как отдельный джем (так оно и есть, btw). Открой irb, набери require 'active_support' и тебя будут 10.days.ago сразу безо всяких моделей и контроллеров.

    Во-вторых, alias не копирует метод, а дает ему новое имя (это как новую переменную по ссылке завести). Можно, не делая классов-наследников, открыть нужный класс, сделать алиас на старую версию метода, переопределить старое имя метода, внутри сделать что-то свое и вызвать переопределенный метод (по новому имени, благодаря alias).

    В-третьих, acts_as_something – это просто вызов метода в определении класса. А делает этот метод, как правило, вызов has_many, belongs_to, создает набор методов, инжектирует модули и т.д. Причем тут АОП? А при том, что функциональность "версионного контроля", "работы с ценами", "сортировки деревом" и т.п. – это _аспекты_ моделей. И более того, может быть несколько моделей, которые себя ведут подобным образом. Общая функциональность выделяется в плагин, который подключается как вызов acts_as_aspect.

    Допустим, пишешь:

    class Document < ActiveRecord::Base
    acts_as_versioned
    end

    И получаешь метод .diff(other), сохранение копии при стандартном .save и т.п.

    На самом деле, есть 2 способа сделать это – "множественное наследование" (в Руби такого нет, но есть include модулей – любого количества; не хуже множественного наследования в Си-плюсах) или вызов метода. Но последний более гибкий, т.к. внутри него можно не только инклюдить методы, но и вызывать методы текущего контекста (has_many, например).

    Насчет проблем: "кто угодно может переопределить" – это опасение за то, в твоей команде есть идиоты? Во-первых, система – в исходниках, поискать по ключслову во всем сорс-коде – не проблема, не утонешь. Во-вторых, вся идеология Руби – "идиотов – в жопу" (в отличие от Джавы: "наймем 500 идиотов и дадим молоток, обитый войлоком, чтоб никого не поранили"). Т.е. весь дизайн языка направлен на удобство для тех, кто думает головой. Лентяев и тупиц – по боку. То же и про "тут приходит рубиист и переопределяет пару методов".

    Насчет доков: я читал исходники рельсов – там все очень хорошо организовано. Да, модуль, скажем, ActiveRecord, открывается в куче файлов – но это же namespace, а не класс. Классы – все помещаются в один файл (чтобы не размазывать класс, отдельную функциональность выносят в модули, которые потом подключают к классу).

  6. 12
    Михаил Голуб ответил:

    Кстати допишу о переоткрывании классов. Я как жавер, отношусь к ней все-таки с настороженностью, хотя философию руби – мы ничего не запрещаем.. делайте все, а наткнетесь на грабли – ваши проблемы в отличие от жавы – мы запрещаем все, зато будете спокойнее спать, я как-то более менее принял

    В чем вижу проблемы:
    1. Кто угодно может переопределить core-библиотеку.. и об этом можно даже не догадаться. Или доопределить. Я удивляюсь, почему масштабно это никто не делает, разве только модуль к рельсам – ActiveSupport, но там полезные штуки.
    2. Затрудняется поиск документации: описания классов размазаны по многим файлам.. особенно мне – новичку тяжело..(пока плохо представляю стандартное API) в документации описание не нашел, приходится лазить по сорцам проекта или по его докам.. и искать дальше.
    3. Создатели некой библиотеки заоптимизировали ее по самое не балуй..
    Тут приходит рубиист и переопределяет пару методов, как ему кажется лучше. В итоге вся оптимизация сходит на нет. Хотя.. тут негативных примеров пока не встречал.

    В Java это реализуется через final – невозможность наследования от класса.

  7. 11
    Михаил Голуб ответил:

    ruby это далеко не java, это динамический язык со всеми вытекающими:
    Пусть Олег меня поправит.. ибо я не шарю :)
    1. Переоткрывание классов: определение класса никогда не закрывается, то есть можно переопределить сущности прямо в классах из core-библиотеки.. ну вообще в любых классах.
    2. alias делает новую копию метода и присваивает ей другое имя, используется, например, когда перекрываешь старый метод и хочешь все же оставить его (под другим именем), чтобы если что… дернуть.
    3. const_missing: каждому классу в ruby соответствует константа – его имя, соответственно, когда класс не найден == константа не найдена, дергается данный метод. Если его перекрыть: можно прямо в рантайме создать новый класс, дать ему имя.. ну или еще что-то сделать.
    4. method_missing верно.
    5. acts_as – для меня самая таинственная штука. Ибо я лишь о ней пока читал, но не использовал. Она изменяет функциональность модели, опираясь на какие-то соглашения в ее структуре. Например, acts_as_decimal сохраняет модель в базе данных, как integer, но работаешь ты с ней, как с decimal. Ну или acts_as_list позволяет работать с дочерними объектами (связь has_many), как с обыкновенным списком.

  8. 10
    Денис Рысцов ответил:

    Получается, что кроме генезиса они с Ruby не связаны)

    Олег, не пугай меня такими словами как acts_as_***, переоткрывание классов и const_missing + method_missing + alias. Я с Ruby не знаком, но по такому потоку названий технологий запросто решить, что эта еще одна Java.
    Вспоминая Xotcl могу предположить, что method_missing это название метода класса, который вызывается в случае, когда вызываемый метод в классе не найден. Верно? А что значат другие страшные слова?

  9. 9
    Олег Андреев ответил:

    Заточка js-либ вот в чем:
    1. Их делают рельсовцы
    2. Их делают для рельсов
    3. Их делают вместе с соответствующими рельс-хэлперами и RJS
    3. Их делают на языке а-ля Руби (jQuery сделали с оглядкой на prototype.js, btw)
    4. Если тебя припрёт добавить фенечку специально для джавы или дот-нета, твой коммит не примут.
    5. Они лежат в dev.rubyonrails.org :)

    Никто не говорит, что ты не можешь использовать эти либы в ASP-сайте, скажем, или вообще в любом html. Но нужно помнить, что они делаются другими людьми, со своим инструментарием, "под себя".

    Рецепт AOP:
    1. acts_as_***
    2. переоткрывание классов
    3. const_missing + method_missing + alias

  10. 8
    Михаил Голуб ответил:

    хм.. не знаю. писать тут или нет.. а то отклоняемся от темы:

    а в чем проявляется заточка prototype и scriptaculous под ror кроме баннера на главной страничке сайта?

    и на тему АОП в рельсах… ты что имеешь ввиду? interceptors? или там что-то еще навернуто?

  11. 7
    Олег Андреев ответил:

    Денис, ты что-то перепутал. И prototype, и scriptaculous – это взаимодополняющие библиотеки (кстати, заточенные под Ruby on Rails).

    prototype.js – это общие экстеншны языка + аякс (от scriptaculous не зависит)
    script.aculo.us – это библиотека для интерфейса – эффекты, перетаскивание, элементы управления и т.п. (требует prototype)

    А чтобы понять, как АОП выглядит без костылей, посмотрите на ruby on rails.

  12. 6
    Денис Рысцов ответил:

    AspectJ – по сути, является другим языком, для которого существует свой компилятор. Было бы странным, если бы Java переварила следующий код:
    Public aspect AutoLog {
    Pointcut publicMethods() …
    }
    Утрируя можно сказать, что AspectJ хитрый препроцессор, а работа с макросами отличается кривизной и неудобностью. Postsharp предлагает иную модель. Программа изменяется уже после компиляции, поэтому при разработке можно использовать привычные средства, а так как функциональная часть кода программы не меняется (в код добавляются только атрибуты), то даже без post compile обработки получается валидная программа. На сайте postsharp есть видео, оно все проясняет

    С prototype согласен – отличное средство, но script.aculo.us это уже решение, по-моему, есть идеологическое различие. С помощью prototype ты творишь, а script.aculo.us подстраиваешь под себя.

  13. 5
    Михаил Голуб ответил:

    Аннотации это уже изменение кода :)
    Делается все проще (во-всяком случае в java) (для разработчика).. инжектится нужный байткод при компиляции.. или прямо в рантайме.

    Для этого есть фреймворки: springAOP и AspectJ.

  14. 4
    Олег Андреев ответил:

    ruby-lang.org
    rubyonrails.org
    prototypejs.org
    script.aculo.us

    И джава с дот-нетом с кривой и неудобной реализацией АОП курят в стороне.

  15. 3
    Денис Рысцов ответил:

    Fiddler – средство для перехвата своего http трафика в мирных целях. Позволяет перехватить http-пакеты, изменить их и послать дальше. Средство полезно при web разработки, например, как средство мониторинга за AJAX компонентами. Я его использовал, когда писал паука для одного сайта. Паук почему то не получал данные с сайта, Fiddler подсказал, что в моем запросе не хватает нужных header'ов.
    Сайт разработчика, к сожалению умер.

  16. 2
    Денис Рысцов ответил:

    Jayrock – low-level AJAX библиотека. Состоит из двух частей. Первая позволяет сериализовывать .NET объекты в JSON формат и vice versa. Уже за эту часть полезное средство, но за вторую часть утверждаю, что великая библиотека. Jayrock позволяет писать web-службы на C# (любом .NET языке) а клиента на javascript'е. Взаимодействие происходит асинхронно, вместо SOAP используется JSON. Если пишите сайты на ASP.NET, то обязательно присмотритесь. А если на другом языке тоже, и подумайте, а не стоит ли его сменить.
    Сайт //jayrock.berlios.de/

  17. 1
    Денис Рысцов ответил:

    Postsharp – low-lever AOP библиотека. AOP – аспектно ориентированное программирование, которое существует со времен Smalltalk. Активно использовать в mainstream программировании AOP начали недавно, и почти каждый создатель frameworka сосредоточивается на частном его аспекте, и притом не правильно его понимая. Поэтому советую почитать об AOP, до того, как придумали слово AOP, например,
    //media.wu-wien.ac.at/doc/tutorial.html#interce...
    описание расширения tcl – xotcl'а, которых копирует объектную систему smalltalk. Если кратко, то есть валидный код работающей программы, и мы хотим узнать, сколько раз срабатывает метод x (например, для решения стоит его оптимизировать или нет). Необходимо эти сделать, не изменяя функциональную часть кода, то есть добавить код в начало метода нельзя. В .NET'е/языке Java это можно сделать через атрибуты (аннотации) и последующем изменении сборки (класс файла). То есть:
    Код.cs(.java) X –C–> программа.exe(.class) Y –M–> программа.exe(.class) Z
    X – исходный код программы с добавленным атрибутом
    Y – обычная программа
    Z – программа с перехваченным вызовом метода
    Именно эту возможность реализует Postsharp
    Сайт //www.postsharp.org/

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.