• 0
    на втором и мини айпадах 60, на третьем 52. телефон для книжки не актуален, не пробовали. да и на этом экране больше всего партиклы трмозят, шейдер не влияет вообще ;)

    а вот кривое зеркало с рассчетом текстурных координат для деформаций иногда просаживает до 30, и никаких ифов…
    Покадровые анимации и шейдеры в iOS
  • 0
    из наших опытов (и это сходится с документацией) — больше всего убивает производительность расчёт текстурных координат в пиксельном шейдере, это убивает кеширование текстур.
    Покадровые анимации и шейдеры в iOS
  • +1
    Можно попробовать в принципе, но в нашем случае этот шейдер на FPS не повлиял вообще
    Покадровые анимации и шейдеры в iOS
  • +11
    Это палец по экрану двигается и волосы на него реагируют ) Наверное стоило это упомянуть.
    Покадровые анимации и шейдеры в iOS
  • +1
    Еще один велосипед, этот C-style :)

    1. function isDigit(ch) {
    2.   var code = ch.charCodeAt(0);
    3.   return code >= '0'.charCodeAt(0) && code <= '9'.charCodeAt(0);
    4. }
    5.  
    6. function readDigits(s, i0) {
    7.   var result = 0;
    8.   for (var i = i0; i < s.length; i++) {
    9.     var digit = s.charCodeAt(i) - '0'.charCodeAt(0);
    10.     if (digit < 0 || digit > 9) break;
    11.     result = result * 10 + digit;
    12.   }
    13.   return { number: result, position: i };
    14. }
    15.  
    16. function strnatcmp(s1, s2) {
    17.   var i1 = 0;
    18.   var i2 = 0;
    19.   while (true) {
    20.     if (i1 >= s1.length) return i2 >= s2.length ? 0 : -1;
    21.     if (i2 >= s2.length) return 1;
    22.  
    23.     var ch1 = s1.charAt(i1);
    24.     var ch2 = s2.charAt(i2);
    25.  
    26.     if (isDigit(ch1)) {
    27.       if (!isDigit(ch2)) return -1;
    28.  
    29.       var n1 = readDigits(s1, i1);
    30.       var n2 = readDigits(s2, i2);
    31.  
    32.       if (n1.number < n2.number) return -1;
    33.       if (n1.number > n2.number) return 1;
    34.  
    35.       i1 = n1.position;
    36.       i2 = n2.position;
    37.       continue;
    38.     }
    39.     
    40.     if (isDigit(ch2)) return 1;
    41.     if (ch1 < ch2) return -1;
    42.     if (ch1 > ch2) return 1;
    43.  
    44.     i1++;
    45.     i2++;
    46.   }
    47. }
    * This source code was highlighted with Source Code Highlighter.
    Естественная сортировка строк на JavaScript
  • +3
    Абстрактный пользователь просто нажмет энтер не читая.
    Если в результате ничего не произойдет (т.е. по умолчанию будет «нет») — подумает "#$%" и повторит прошлые действия выбрав не-дефолтный вариант мышкой (все так же не читая текст).

    Толку от вопросов «Вы уверены?» ноль — они в 99% случаев либо вообще не читаются, либо со второго раза закрываются на автомате, вплоть до механического нажатия «шифт+дел, энтер» для удаления файлов в винде.
    Социальная инженерия в Facebook и не только. Разбор новой «уязвимости»
  • 0
    Речь шла о поддержке «из коробки», следовательно использование штатного распаковщика из Finder'a вполне уместно
    Ubuntu против Windows: а воз и в 10.10 там
  • +4
    кстати кирилица в архивах там тоже крякозябрами :))
    Ubuntu против Windows: а воз и в 10.10 там
  • +3
    Еще стоит добавить что при изменение стандартной темы в новой версии ОС, свои «улучшеные» элементы управления часто остаются в старом стиле.
    Советы программисту-дизайнеру интерфейсов
  • +2
    А это и будет компилиться. В шарпе :)
    Результаты конкурса на лучшую #codejoke
  • +2
    дак речь о версии драйвера :)
    Chrome 5.0 DEV
  • +3
    кстати технически наследование тоже меняет код конструктора — в IL между инициализаторами полей и телом конструктора вставится вызов конструктора базового класса.
    C#: Этюды, часть 2
  • +1
    кстати из-за этого появился такой креатив :)))

    if (1) for (int i =…
    На чём и как писать (часть 1. Eclipse и Java)
  • +3
    Насчет устарелости MS VS — в контексте C/C++ 2005 и 2008 студии не особо отличаются, а если не лезть в GUI, то и Express от полной не сразу отличить :)
    На чём и как писать (часть 1. Eclipse и Java)
  • 0
    Прошу прощения за глупый вопрос, но там макрорсы работают более интеллектуально сишных? В плане наличия контроля типов, локальных переменным, by-value аргументом, отсутствия сайд-эффектов и прочих радостей препроцессора на уровне потока лексем.
    Цена вызовов
  • 0
    Ну тут лично у меня скорее интерес «как оно внутри работает» :)
    Цена вызовов
  • +1
    Кстати, пример с девиртуализацией/профайлингом уровня JIT не совсем корректен — у нас есть два случая:
    — передаем интерфейс, полчаем один метод сортировки на все случиа компарера и выбираем реализацию сравнения через механизм виртуальных вызовом
    — передаем тип в параметры генерика, получаем по одной копии сортировки на каждый вариант компарера, зато избегаем виртуальных вызовов.

    Так сказать «закон сохранения бяки» :) Или тип в генериках, или виртуальные вызовы. А разрешать копилятору самому выносить аргументы-интерфейсы в параметры генериков особо смысла нету — всегда хочется иметь выбор :)
    Цена вызовов
  • +1
    1. да, уверен, проверял, убиралось. Кстати даже у Рихтера написано что все null-проверки удаляются если в генерик приходит value тип )

    3. Вариант с протаскиванием типа навеян STL из C++, там это сделано для обеспечения компилятору доступа к информации о типах и последующего разворачивания inline-методов. Как по мне — чем раньше появится доступ к информации, тем проще ее использовать. Насчет хака — да, в идеологии нынешней версии фреймворка — это хак, но ведь всякое может еще случится :)

    4. Ну я вообще изначально С-шиник, мне не привыкать ко всяким ужасам. Да и вряд-ли есть смысл писать код требующий такие оптимизации на шарпе — проще и логичней сделать специализированную либу или сервер для ресурсоемких частей :)
    Цена вызовов
  • +1
    Если верить тому, что я видел где-то в блогах MSDN, то CLR вообще не умеет инлайнить функции у которых есть аргументы передаваемые по значению (в том числе int).

    И еще мои наблюдения за результатами работы JIT показали что оно на данном этапе эволюции разворачивает только статические методы классов. Если с методами классов еще понятно — нужны всякие проверки, то со структурами это выглядит странно.
    Цена вызовов
  • +1
    1. В первом случае проверки на null удаляет JIT поскольку int таковым быть не может.

    2. Не совсем понял насчет девиртуализатора, но callvirt генерируется шарповским компилятором всегда, и главная причина — проверка чтоб инстанс не был null (кстати в С++ как правило можно запросто вызывать методы для NULL указателя если они не используют данные инстанса)

    3. В CIL информация о типах то есть, только инструкция записи в массив, как оказалось, одна на все ссылочные типы и принимает Object :)

    4. Вообще-то писать на C#/.Net нагруженный вычислениями код слегка не логично — не для этого он предназначен. Но если приходится, то как правило все средства хороши, и тут указаны только наименее хардкорные оптимизации :)
    Цена вызовов
  • +4
    Алгоритмов сортировки есть много и разных, я знаю примеры когда оптимальным является самый обычный «тормозящий» пузырёк :) Не в алгоритме сортировки тут суть :)
    Цена вызовов
  • +2
    Всякий интеллектуальный синтаксический сахар как раз усложняет докапывание до внутреннего устройства, а дефайны и инклуды как раз наоборот работают до ужаса тупо на уровне склеивания кусков текста :)

    А вообще я о другом — постоянно появляется что-то новое, целостное. Потом в него включает все новые модные штучки и делают помойку. Потом все устаканится и появится новый язык, чистый и стройный. И все по кругу :)
    C# 4.0, и несуществующие методы
  • +1
    <sarcasm>И эти люди говорят что C++ сложная каша из парадигм, а C# новый чистый язык...</sarcasm>
    C# 4.0, и несуществующие методы
  • +2
    При разовой правке дискомфорта нету, а если работы много — начинаешь на автомате жать привычные хоткеи, а в ответ происходит непонятно что. А это как раз занимает много времени — хочешь что-то сделать как обычно, происходит какая-то лажа, ищешь как вернуть обратно, пробуешь по-другому…

    Я лично VS пользуюсь еще с VC6, к его дефолтам и привык, а всякие финты вроде «пересунуть Solution Explorer в правый сайдбар» (началось с 7.0) меня ужасно расстроили… Хорошо хоть начиная с 2005 можно при установке выбрать привычные опции :)
    Vim и Visual Studio
  • 0
    он же закрытый, кто его знает как они шифруют и шифруют ли вообще.

    Вопрос закрытости протокола оставим в стороне, но если бы они не шифровали вообще, или плохо шифровали, то наверное протокол давно уже бы расковыряли народные умельцы :D
    eBay грозит переделать протокол Skype
  • 0
    Word, Excel и Lotus вполне умеют читать и писать стандартизированые документированые форматы, пусть и не с полным функционалом. Что касается Oracle, PL/SQL базируется на стандартном ANSI SQL. Так что в данном случае проблемы стыковки с альтернативным ПО особо нетую, в отличие от Skype, который «вещь в себе»…
    eBay грозит переделать протокол Skype
  • 0
    Спорить смысла нету — это вопрос опредения понятия «виртуальный конструктор», которое отсутствует в С++. Фабрики ближе к понятию «метакласс», но по большому счету оба паттерна по-своему подходят под это название.
    Виртуальный конструктор
  • +3
    Фабрика вообще-то самый популярный способ реализации «виртуального конструктора». А метод clone (оно же паттерн прототип) это по сути некий аналог аналог «виртуального» конструктора копии, более узкий случай.
    Виртуальный конструктор
  • 0
    Вообще само по себе определение «виртуальный конструктор» не совсем корректно — виртуальный метод выбирается зависимо от реальной интстанции объекта стоящего за указателем на базовый класс. К конструктору то применить вообще-то нельзя :)

    С другой стороны, если пойти в торону метаклассов, то конструктор есть методом метакласса, и тогда надо делать объект Type с виртуальным методом CreateInstance. Получим абстрактную фабрику.

    В этом примере действительно смущает оператор switch, такой код в принципе несложно переписать с фабриками и он будет выглядеть более изящно. Для выбора по элементу энама можно сделать например массив фабрик.

    Впрочем это все философия на тему что такое «виртуальный конструктор» вообще. Термин не определен языком С++, так что спорсить особо некуда :)
    Виртуальный конструктор
  • –1
    ну хорошо если так, только главное чтоб там буфера не копировались, а шарились :)
    Opera — скорость работы в linux
  • –1
    Поясню проблему с сокетами в данном случае: отправка большой текстуры в сокет вынуждает прокачку этих данных процессором. Это сводит на нет всякие DMA — да, видеокарта захватит данные из оперативы напрямую, только сначала мы их через процессор прокачаем из одного приложения в другое.

    Принятие решения о том, что видеоподсистема (Х-сервер) работает на одной машине с приложением (Х-клиент), может существенно повысить производительность не снижая стабильность и независимость компонент.
    Opera — скорость работы в linux
  • +3
    Когда придумали концепт Х-сервера:
    1. компьютеры были дороги и возлагались большие надежды на терминальные решения
    2. графика не была настолько жирной — гонять по сети фактически векторные картинки (линии/прямоугольники + текст + пара иконок xmp формата 16х16 на 256 цветов) не проблема

    Сейчас требования поменялись, а архитектура — нет.
    Opera — скорость работы в linux
  • –3
    Дело в том, что с этим слоем не обязательно через сокет общаться :)
    В виндах тоже много «слишком сложных» решений, но общение с видеоподсистемой через сокеты не самое быстрое решение, особенно во времена больших «декоративных» текстур…
    Opera — скорость работы в linux
  • Комментарий из публикации, перенесённой в черновики.
  • Комментарий из публикации, перенесённой в черновики.
  • Комментарий из публикации, перенесённой в черновики.
  • 0
    Имхо лучше тогда на планшетке схемы рисовать, чтоб потом по них скелет строился. А голосом, особенно в офисе, будет жесть :)
    Написание программ голосом