• Эффективность C++ на современных ПК
    +3
    В Cocoa есть несколько примеров решения подобной задачи:

    1. NSTableView создает столько строк, сколько помещается на экране, и переиспользует их при прокрутке. Данные для каждой видимой строки выдает объект-источник данных.

    2. Для некоторых объектов тяжелого класса NSView используются легковесные объекты класса NSCell, которые отвечают лишь за отрисовку содержимого. Например, матрица 10x10 является объектом NSView, а отрисовкой занимаются 100 клеток NSCell. Во время какого-нибудь события ОС не должна сообщать о нем каждой ячейки, а только одной матрице. А она уже сама разберется что с ним делать.

    3. Если в окошке присутствует 100 текстовых полей, было бы неэффективно создавать объект-редактор для каждого поля (тормоза при создании + использование памяти). Вместо этого, окно содержит единственный редактор текста, а каждое поле при получении фокуса спрашивает его, размещает как следует и принимает данные.

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

    Т.е. забота перекладывается на программиста, но зато программист работает с понятным фреймворком и всегда знает как организовать свой код.

    Универсально оптимизировать работу с большим количеством однотипных объектов можно с помощью аллокатора, который размещает объекты одного класса в гомогенный массив. Но это будет лишь оптимизация доступа к данным самого объекта в цикле, а все остальные объекты, на которые он ссылается, будут размещены где попало.
    Ну, еще malloc будет реже вызываться если переиспользовать освобожденные объекты. Но если переиспользовать объекты, то их порядок в массиве будет случайным, что существенно снизит и так низкую эффективность.

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


  • «OOC для C, — это как Scala для Java»
    0
    Кстати говоря, не только в «GUI» приложениях случаются события. Возьмите любой веб-сервер или CLI (командную строку).

    Если же в каком-то месте создается много объектов которые имеет смысл удалить, не дожидаясь окончания обработки текущего события (чтобы не занимать слишком много памяти), то можно создать локальный пул. При этом в данном конкретном месте автору кода будет совершенно очевидно где этот пул должен быть очищен и какие объекты нужно retain-ить перед очисткой.

  • «OOC для C, — это как Scala для Java»
    0
    Управление памятью ручное, но совершенно понятное: кто сделал alloc, copy или retain, тот и делает release. Ни разу не приходилось «извращаться» или что-то проталкивать. Например, properties сами делают retain/release при записи и retain+autorelease при чтении. Так что единственное, что следует делать вручную — присвоить nil всем свойствам в методе dealloc (что автоматизируется благодаря информации о свойствах и их типах доступной в рантайме).

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

    Иными словами, интересно не то, что правильнее — наличие GC или отсутствие, а среда в которой делается работа. Например, андроидная джава ничем не удобнее и не гибче objective-c. И там и там — статические типы и многословные конструкции. И думать про дизайн и производительность нужно гораздо больше времени, нежели писать [something release].

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

  • «OOC для C, — это как Scala для Java»
    0
    «Где и кто будет освобождать память?»

    В objective-c эта проблема решена довольно остроумно. Во-первых, для всех объектов типа NSObject используется подсчет ссылок. Во-вторых, есть autorelease pulls, в которые как раз и попадают возвращаемые объекты. Если возвращенную строку никто к себе не забрал, то она будет удалена при очистке пула. Пулы живут только на одном потоке и могут быть вложенными. В каждом приложении есть основной поток, в котором есть основной RunLoop, который имеет свой пул, очищаемый после обработки каждого события.

    Работает так:

    NSObject* autoreleasedObject()
    {
    // autorelease поместит объект в ближайший пул в текущем потоке
    return [[[NSObject alloc] init] autorelease];
    }

  • Ежедневный Git
    0
    Нет, такое гит не поддерживает: вы клонируете весь репозиторий и делаете с ним, что хотите. Поддерживается лишь хранение юникс-атрибутов rwx, но это не ограничивает доступ.

    Если хотите разграничить доступ — разбивайте проект на разные репозитории, кладите на защищенный сервер и ограничивайте доступ к каждому репозиторию (например, с помощью gitosis, а можно и просто юникс-средствами ограничить доступ к определенным директориям на сервере).

  • userjs для хабраката
    0
    Согласен. Можно начать с js-плагина и байесовского фильтра о том, что по теме, а что — нет.
  • Обучение Ruby и Rails, частные занятия
    +1
    Это круто когда у вас любовь с апачем и странными хостингами. Если что-то сложное нужно вертеть, то лучше кластера собственных демонов под нгинксом ничего нет. Апач посередине — это дополнительный расход памяти и cpu. Но если сложности не нужны, то mod_rack — отличная штука (мерб и прочие rack-совместимые приложения оно тоже вертеть умеет, поэтому переименовали в mod_rack)
  • Обучение Ruby и Rails, частные занятия
    +8
    за вами приедут
  • Чем полезен Мой Круг в кризисные времена
    +1
    «не вызывая подозрений у работодателя, который подчас может нервно среагировать на вывешивание резюме на популярных работных сайтах»

    Какое-то феодальное восприятие. Сотрудник, ценящий свою работу и себя, может всегда быть в поиске работы. Ровно как работодатель — всегда в поиске новых, лучших, сотрудников. Нервничать нужно когда производительность падает или настроение ухудшается.
  • Плагинописателям.
    0
    github.com

    Народ уже давно собирается там и выкладывает плагины, патчи и документацию на вики-страницах.
  • Офис Google в Санкт-Петербурге
    –1
    та же самая моторола.
  • Проектирование сетевых протоколов
    0
    См. также savingtheinternetwithhate.com/design.html

    Секция «Protocol Overview (opinions for all)»
  • Как я заново открыл для себя инкапсуляцию в java.
    0
    >> более защищённый код, обусловленный политикой компании <<

    Вот это мне и интересно. Чем руководствуются авторы политики защиты private-переменных от инсайдеров. Наличием злобных инсайдеров?

    >> Язык предоставляет право выбора механизма и политики, а так же право смешивать их. <<

    разумно
  • Как я заново открыл для себя инкапсуляцию в java.
    0
    Тут нет спора. Товарищ мне ответил на «т.е. недопрограммеры так и норовят загрузить util.reflect и залезть в private-поля?» тем, что да, норовят. Мне становится интересно, где же водятся такие страшные программеры. Соображения инкапсуляции тут ни при чем. И спора тоже нет. Раз есть суровые челябинские программеры, нужно защищаться, конечно. Просто это как-то сюрреалистично смотрится.

  • Как я заново открыл для себя инкапсуляцию в java.
    0
    Я имею в виду, что предлагается писать System.setSecurityManager(new SecurityManager()) чтобы не дать Васе завести свою переменную через java.util.reflect. Возникает вопрос: почему бы Васю не уволить, или научить, что делать a.getClass().getDeclaredField(«x») не следует. Или, что лучше, поинтересоваться, по какой такой причине ему нужно залезть в класс именно так. Мож, он баг какой так хитро патчит.
    К инкапсуляции и ооп мое любопытство не имеет прямого отношения.

  • Как я заново открыл для себя инкапсуляцию в java.
    0
    Уважаемое хабрачмо, хватит тут минусовать коллегу! Если идет дискуссия, есть два мнения. А минусовать нужно за спам и глупости. Опускание оппонента в _дискуссии_ не идет на пользу никому.
  • Как я заново открыл для себя инкапсуляцию в java.
    0
    Иными словами, вы относитесь к своим программерам почти как к внешним хакерам, а не к товарищам по команде? Жестко у вас там.
  • Программистам Microsoft запрещают читать open source код?
    +1
    С ним-то все окей. Просто из-за того, что весь опенсорс у директоров ассоциируется с GPL, даже реально свободный софт требует длительного аппрува.
  • Как я заново открыл для себя инкапсуляцию в java.
    0
    Не только для отладки. А вообще для метапрограммирования, для генерации кода. Посмотрите на API ActiveRecord, DataMapper — отличные примеры грамотной (в меру :-) генерации кода.
  • Как я заново открыл для себя инкапсуляцию в java.
    +2
    т.е. недопрограммеры так и норовят загрузить util.reflect и залезть в private-поля?
  • Как я заново открыл для себя инкапсуляцию в java.
    +2
    Подскажите, а так скрывать поля нужно по соображениям заповедей или практической необходимости? Хакиры меняют вам значения констант?
  • Программистам Microsoft запрещают читать open source код?
    +1
    Из-за большой известности GPL-коммунистов без двухмесячных консультаций с юристами нельзя использовать даже BSD/MIT/Apache2 код.
  • Расширяем Хабр
    0
    Ну что, круто! Молодца.
  • Расширяем Хабр
    0
    и здесь потестирую
  • Расширяем Хабр
    0
    и тут потестирую
  • Расширяем Хабр
    0
    я тоже потестирую
  • Вопросы html-верстальщику
    +1
    Супер, спасибо. Т.е. какой-нибудь блок тумбнейлов или колонок внутри документа имеет смысл всегда помечать как overflow:hidden/auto чтобы барахло внутри плавало и никому больше не мешало?
  • Вопросы html-верстальщику
    0
    Вот, расскажи мне:
    1. как очистить поток?
    2. почему очистка потока clear'ом не всегда удачное решение, — почему overflow:hidden?

    Я использую дубовый [br clear=«both»] потому что он работает, а clear:both в последнем элементе и/или контейнере — нет.

  • Правильный цикл работы с версиями SVN
    +1
  • Новый логотип .Net
    –2
    Когда они догадаются переименоваться в «dotnet»? Поисковые системы не всегда правильно понимают что пользователь имел в виду под ".net"
  • Small Basic: сделать программирование доступным всем!
    +2
    Интерфейс приятный. Обидно, что детей учат использовать Goto (см. мануал в pdf).
  • time management и bash
    0
    «Это, кстати, одна из тех фишечек, которая возможна только в command-line интерфейсе.»

    Скромно замечу, что это одна из тех фишечек, которая специально для command-line и задумана. В оконной среде эта фишечка болтается в углу экрана еще начиная с Norton Commander.

    «И непонятно, почему сторонники WIMP и CL не соберутся как-нибудь и не выберут из обоих подходов всё самое лучше, и не смешают всё в удобных пропорциях?»

    Уже смешали: NEXTStep, Mac OS X.
  • TeachMate.org
    –1
    Упячка!
  • Делаем вращательный регулятор.
    +1
    Колесом мыши крутить, конечно, можно. Только оно крутится не в той плоскости, что ручка на экране, так что вариант не катит.
    А вообще, единственный способ проверить удобство — сделать несколько вариантов и поиграться с ними на реальном макете. Всё остальное — домыслы. Неудобство любых круглых ручек в компьютерных интерфейсах я уже успел проверить на себе. Потому и предостерегаю модных джаваскриптеров от дурацкого времяпрепровождения.

  • Делаем вращательный регулятор.
    0
    А еще круглая ручка занимает меньше места.
  • Делаем вращательный регулятор.
    +3
    Скромно замечу, что вращательный регулятор на экране — очень неудобная штука. Потому что рука на мышке лежит так, что мышкой удобнее возить влево-вправо, а не по кругу. На физическом же устройстве крутить горизонтальный ползунок менее удобно, чем круглую ручку из-за того, что необходимо упереть кисть во что-нибудь для повышения точности настройки. Круглую ручку можно крутить двумя пальцами в то время, как кисть может висеть в воздухе.
    Каждый элемент интерфейса выглядит так, как выглядит не потому, что у дизайнера в жопе зачесалось, а потому что так удобнее решать поставленную задачу в конкретных условиях.

    Это я все к тому, что я не люблю неудобные глючные вертелки, а люблю удобные и неглючные. Не делайте так, как описано в этой статье.
  • О киберсквоттерстве… опяяяяяять…
    +2
    Мы наш, мы новый мир построим =) Советский союз, вы, видно, в зрелости не застали. Там было много деятелей, которые не просто могли рассуждать на тему кому, чего и сколько можно «в одни руки», но и имели власть принимать соответствующие решения.

  • О киберсквоттерстве… опяяяяяять…
    +8
    Общество решило договориться об едином списке доменных имен. Таким образом, каждое доменное имя может принадлежать только одному лицу. Отсюда — куча проблем. Почему, скажем, oleg.ru должен принадлежать тому Олегу, а не этому?

    С другой стороны. Открываем мобильный телефон и видим: «Олег», «Маша К.», «Таня (бухгалтерия)» и т.п. Очевидно, что у каждого из нас в мобильном телефоне свой собственный список имен. Глобальные лишь безличные номера из десятка цифр.

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

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

    Какой следует сделать вывод? ДНС как каталог красивых имен уже перестал быть релевантным. Никто не ищет кондиционеры, набирая адрес airconditioners.ru или kondizionery.ru. Все идут в гугл, яндекс и каталоги, которым доверяют. Доменное имя может быть сколь угодно дурацким и оно никак не повлияет на видимость компании. (За исключением, разве что, чего-нибудь вроде zhopa.ru.)

    Доменное имя, как и безмерно красивые урлы («как мне сделать адрес вида /articles/nazvanie-zametki?») — это развлечение для веб-мастера. Как и красивый программный код, удобный и эстетически приятный разработчику, но не имеющий отношения к конченому пользователю.

    Если сайт стоящий, то на салфетке и asd1234.ru будут писать, не переломятся.
  • Чистые функции
    –1
    набашорг =)
  • Еженедельные встречи стартапщиков
    +5
    Я могу рассказать что-нить про cloud computing, strokedb, web crawling. Язык — руби, платформа — POSIX.