В принципе, не имеет значения, может и сервер, может и клиентская сторона проверить. Вопрос только в том, как это сделать.
Ответ
Проверяйте содержимое navigator.userAgent на наличие подстрок "iphone", "android", "blackberry", "webos", и т.д.
В принципе, не имеет значения, может и сервер, может и клиентская сторона проверить. Вопрос только в том, как это сделать.
Проверяйте содержимое navigator.userAgent на наличие подстрок "iphone", "android", "blackberry", "webos", и т.д.
Вертексные буферные объекты. Отрисовка треугольников одного материала для снижения количества переключений между текстурами, цветом и компилированными шейдерами. Удаление из кадра ненужных объектов. Рефакторинг кода стандартными методами. Перенос матричных операций с мировыми координатами объектов в шейдеры. Рендер спецэффектов в другой программе и отрисовка их из готового файла. (Используется больше памяти, но быстрее так как не нужно проводить предварительные расчеты для отрисовки спецэффекта.) Использование diffuse карт для дешевого выбивания полигонов из модели без потери качества. Mipmapping. Использование где это возможно заранее заготовленных карт освещения вместо real-time расчетов Использование triangle strips для экономии памяти. Использование большего числа текстур текстур с размерами кратными степени двойки. Перенос real-time расчета освещения в шейдеры. Исключения из тела главной функции, которая отрисовывает кадр, всех сложных математических операций, замена их заранее обсчитанными статичными объектами. Перенос кода для детектирования столкновений, AI и других функций не связанных напрямую с отрисовкой картинки в отдельный поток выполнения вызываемый с меньшей частотой чем FPS Представление атрибутов вертексов в виде массива структур, а не структуры массивов(x1,y1,z1,x2,y2,z2,x3,y3,z3 вместо x1,x2,x3,y1,y2,y3,z1,z2,z3) Под 3D движком понимается программа обертка над OpenGl, которая подготавливает массив аттрибутов вертексов для подачи в трехмерный конвейер, естественно не поддерживающая программный рендеринг при котором сам конвейер запрограммирован внутри кода движка. Под оптимизацией понимается оптимизация по многим параметрам, быстродействию, качеству картинки, экономии памяти, читабельности кода и.т.д Интересуют только реальные методы легко и быстро реализуемые на практике прикладным программистом. Методы из советского ВТУЗовского курса вычислительной математики и численных методов, а также алгоритмические-компиляторные методы вроде замены деления на два битовым сдвигом повсюду внутри кода просьба не предлагать.
Навскидку: Атласы - замена мелких текстур одной большой (что-то похожее видел в Вашем посте, но недопонял, о чём речь там). Occlusion query - отрисовываем простейшую модель вместо сложной, спрашиваем у видеокарты, сильно ли она перекроется, и узнаём, надо ли её рисовать. Использование временной когерентности для того же отбрасывания невидимых объектов. Instancing. Вообще говоря, Вы мешаете в кучу и графику, и игровую логику, так что конкретный ответ дать сложно. Более того, некоторые техники взаимоисключающие. Оптимизации применяются тогда, когда возникают узкие места, иначе толку от них нет. Например, если Вы упёрлись в fillrate, никакое применение VBO толку не даст, и наоборот, если основная проблема в диком количестве геометрии - можно не заморачиваться с атласами, оптимизацией шейдеров и тд,а сосредоточиться на отбрасывании невидимых треугольников и LOD. В общем случае, на неполностью загруженную видеокарту пытаются переложить все распараллеливающиеся задачи, а не только графику, в то время как процессору обычно отдают игровую логику(если видеокарта занята).
update `t_map_atms` set phone='3e43' WHERE id=37 Для проверки дала такой вот простенький запрос. Вышло: #1436 - Thread stack overrun: 8240 bytes used of a 131072 byte stack, and 128000 bytes needed. Use 'mysqld --thread_stack=#' to specify a bigger stack. Гуглила. Нашла вариант, как исправитья: в файле my.cnf надо одну строчку привести к виду thread_stack = 256K такого файла не нашла, нашла только my.ini. Подобной строки нет, сама вставила (для эксперемента), но не работает. Что мне делать?
Как бы смешно это ни звучало, я нашла второй my.ini. С какого фонаря у меня их два, я не знаю, но нужную строку в нем я нашла и изменила. Все теперь пашет.
Вопрос простой. В каких случаях разработчик должен смотреть на нереляционные базы? Java, Web.
Есть мнение, что разработчик должен смотреть на структуру данных, которые он хочет хранить. И потом, исходя из этого, уже выбирать где это будет удобнее хранить. Если все сведется к тому, что данные легко и очевидно ложатся на key-value — вот и случай, когда реляционные БД не будут нужны (будут избыточны). Например, если все что надо держать в БД — текущие прогнозы погоды по городам или сессию со списком-историей последних просмотренных, ходящим по видеохостингу пользователем, клипов, то что-то типа memcached или Redis будет вероятно близко к оптимальному решению. Обратный подход (есть БД, нужно запихать в нее определенных данные) имеет смысл если речь идет о уже имеющейся инфраструктуре. Там неудобства разработки компенсируются неудобством введения и обслуживания новых элементов (еще одной БД) в уже имеющуюся инфраструктуру.
Добрый день! Стоит ли использовать БЭМ (Блок Элемент Модификатор (Яндекс)) и, что означает независимый блок в контексте БЭМ?
БЭМ, это соглашение о наименованиях. Не MVC, и не исключает совместное использование с каким-нибудь MVC.
БЭМ помогает решить ряд определенных проблем:
Исключить зависимые имена классов. При разработке долгоиграющих проектов или при большой команде это приводит к разъезжающимся страницам
Существенно уменьшить усилия на изучение проекта для нового разработчика. Все части вёрстки разложены по файлам и папкам с интуитивно понятными именами
Избавиться от копипаста в рамках страницы/сайта/портала. Блок это готовая часть вёрстки, его можно и нужно повторно использовать. Элементы и модификаторы позволяют точечно вносить изменения для каждого случая использования этого блока, избегая взаимное влияние использования модифицированных блоков на одной странице
Избавиться от копипаста, если необходимо внести изменение в определенный компонент вёрстки. Не нужно делать правки в 100500 местах, правки вносятся в одном месте
Ценой этого является высокий порог входа к использованию БЭМ. Это принять БЭМ в сердце, разобраться с инструментами сборки, применимыми к вашему случаю, донести БЭМ до окружающих коллег. Стоит ли заплатить эту цену, решать вам.
Про АНБ в контексте БЭМ хорошо сказано здесь https://ru.bem.info/forum/issues/-46/
По сути это два правила:
Всем элементам внутри блока надо задать классы, т.е. не опираться в CSS на имена элементов
Все классы, на которые накладываются стили этого блока, должны быть уникальными, например, начинаться с имени класса корневого элемента
Доброго всем времени суток господа
Пользуюсь phpexcel'ем, причем не первый день. Одну штуковину упорно не могу найти в мануале (или нет ее там). Ищу перенос внутри ячейки. Вот допустим вам нужно вставить 200 знаков в ячейку, и они не влезают. В экселе есть кнопка - перенос текста. Вот интересует как нужную ячейку отформатировать, что бы этот перенос был. Можно ли так вообще?
Смысл в том, что текст помещается в ячейке, путем автоматического переноса по строкам. Вот собственно и все, только команды не знаю, ее и спрашиваю.
p.s.
// выдернул из кода
// выравниваю как надо
$page->getStyle("".$jax."".$stroka."")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
$page->getStyle("".$jax."".$stroka."")->applyFromArray(array("font" => array( "bold" => true)));
// вставляю данные, и проклятая переменная $for, неприлично длинная
$page->setCellValue("".$jax."".$stroka."", "".$for."");
Насколько мне не изменяет память, то так: $page->getStyle("".$jax."".$stroka."")->getAlignment()->setWrapText(true);
Пишу небольшую игрушку на WPF, и для одновременного воспроизведения многих звуков использую DirectSound. До этого пытался использовать AudioVideoPlayback, но была точно такая же проблема. Я добавил в проект ссылку на DirectSound.dll из папки DirectX.
Прописал
using Microsoft.DirectX.DirectSound;
Вот эти строки отвечают за инициализацию:
Microsoft.DirectX.DirectSound.Buffer sp;
Microsoft.DirectX.DirectSound.Buffer deathSp;
Device m_SoundDevice;
В конструкторе окна выделяю память, подгружаю все:
m_SoundDevice = new Device();
m_SoundDevice.SetCooperativeLevel((new system.Windows.Interop.WindowInteropHelper(this)).Handle, CooperativeLevel.Priority);
sp = new Microsoft.DirectX.DirectSound.Buffer("Shot2.wav", m_SoundDevice);
deathSp = new Microsoft.DirectX.DirectSound.Buffer("Death1.wav", m_SoundDevice);
Проблема состоит в том, что если в свойствах проекта стоит .NET 4.0 или выше, то при отладке студия иногда просто зависает, и закрывается только завершением процесса студии, иногда сразу же выдает ошибку, как при версиях 3.Х. Скомпилированный при этом экзешник выдает ошибку при запуске. Если понизить версию .NET до 3.5 или 3.0, то при отладке программа запускается, но вылетает при инициализации, которую я указал выше. Пишет следующее:
Нет доступных исходных файлов. В стеке
вызова содержится только внешний код.
XamlParseException не обработано
"Вызов конструктора для типа
"Game.MainWindow", удовлетворяющего
указанным ограничениям привязки,
привел к выдаче исключения.": номер
строки "3" и позиция в строке "9".
Я не пойму, в чем причина. Где эта третья строка - тоже. В xaml в 3ей строке ничего интересного, как и в самом коде на 3ей строке.
Уфф, я разобрался в проблеме. Причина была в том, что задавать CooperativeLevel для SoundDevice нельзя во время инициализации нашего MainWindow. Инициализацию всего DirectSound нужно вешать на событие OnLoad нашего главного окна, либо в любой момент после завершения его инициализации.