Ошибочный редирект после авторизации в админке WordPress

Возникла у меня как-то при переезде на новый хостинг проблема — ппосле авторизации в админке я попадал не в саму админку, а на страницу с ошибкой о том, что она не существует.
В интернете просто огромное количество «решений» данной проблемы, но ни один мне не подошел. Также очень много комментариев, что я не один такой, кому не подходят все описанные советы. Читать дальше

Установка камеры заднего вида на Toyota Auris в комплекте с зеркалом-дисплеем

Казалось бы, не такая уж большая машина — Тойота Аурис, чтобы испытывать проблемы с парковкой. Но почему-то я совершенно не чувствую «зад» при движении задним ходом. Из-за этого частенько при парковке мне приходилось выходить из машины и глядеть, нет ли там каких-нибудь препятствий на пути в виде столбиков и вообще хватает ли места. Установить камеру заднего вида для меня стало мечтой и я все-таки решился на ее приобретение. Купить то еще пол беды, а вот как я ее буду устанавливать я вообще не представлял. Но и платить кому-то за полчаса работы тоже не хотелось, инженер я в конце концов или нет? :)

Камеру выбрал такую, чтобы встраивалась вместо одной из двух лампочек подсветки номера. А т.к. в штатной магнитоле монитора нет, отображать видео решил на чудо китайской инженерной мысли — салонное зеркало заднего вида со встроенным дисплеем. Заказал все, естественно, с Китая, дабы избежать наценки. Все вместе купил всего за 1350 рублей.

mirror-working

Читать дальше

Как я писал бота для Clash Of Clans. Работа с Bitmap и OCR

Подсел я как-то на игрушку «Clash of Clans» — это такая стратегия, где нужно строить свою деревеньку с шахтами и казармами, а войсками воевать с другими такими же онлайн. Противник подбирается случайным образом, исходя из количества трофеев (кубков) в текущий момент. При успешной атаке число кубков увеличивается, при поражении — уменьшается. Опять же, если на тебя напали и разбили, то кубки забирают, а если недобили — прибавляются. Но на эти кубки мне пока все равно, главное — ресурсы.
Для поиска соперника нужно нажать кнопку «Attack!», а затем «Find a Match». Среди сотен тысяч игроков найдется жертва и мы видим ее базу.

База противника в Clash of Clans

Слева в верхнем углу — ресурсы, которые мы получим, если разгромим все шахты и/или хранилища. Если игрок давно не заходил, шахты заполняются, а с каждым нападением на него они забираются из хранилищ. Таким образом, у брошенных деревень мы видим полные шахты и пустые хранилища — легкая добыча для дешевых воинов.
Игра заключается в том, чтобы нажатием на кнопку подобрать себе противника, у которого было бы достаточное количество ресурсов, но, одновременно с этим, вы смогли бы их у него забрать своим войском. Игроку ничего не остается, как раз за разом кликать кнопку «Next», подыскивая жертву пожирнее. К слову, подготовка одной моей армии для нападения обходится в примерно 180 тысяч эликсира. Поэтому нападать на базы, с которых можно вынести меньше, невыгодно.
Иногда кнопку Next тыкать надоедает и соглашаешься уже на кого-то не столь богатого. Плюс ко всему глаз замыливается и можно легко протыкать базу с большим количеством ресурсов чисто по инерции. Мне стало лень напрягать глаза на эту игру и я озадачился апгрейдом своего мини-бота.] Читать дальше

ExtJS NumberField и пустые поля

Задумались мы на днях, что неправильно это — при редактировании циферных полей каждый раз, прежде чем написать число, стирать ноль. То есть, если до этого в строке ничего не было, то выводится ноль, который при редактировании надо выделить мышкой. В итоге получается от двух лишних щелчков до некоторого количества нажатий клавиш, если догадаться стирать ноль клавишами Delete или BackSpace. Поэтому я решил исправить эту ситуацию. Читать дальше

Ширина колонок при создании Excel документа с помощью NPOI

Раньше мы работали с какой-то древней библиотекой по работе с Excel-документами — MultiTable. Этот проект изначально написан на Java и был портирован в .Net, и получилось так, что большинство функций скрыто и плохо документировано. Использование предопределенных стилей в этой библиотеке просто ужасное — есть у нас гигантский постоянно дополняемый список стилей, а вот создать свой стиль в процессе генерации документа не представляется возможным. Плюс ко всему библиотека совсем не умеет работать с xlsx. В общем, решили поискать библиотечку для чтения файлов и их генерации посвежее. Читать дальше

Минификация CSS и Javascript в Website проекте ASP.NET

Про минимизацию javascript и css знают все. Ну если кто не знает, то, вкратце, это уменьшение объема файлов за счет удаления комментариев, разметки, переносов строк и прочего. Особенно акуально оно для интернет сайтов, которые при первом же визите пользователя должны порадовать его своей производительностью. Но наш проект, во-первых, работает в локальной сети, а во-вторых, используется на одних и тех же компьютерах изо дня в день, поэтому мы долгое время совсем не задумывались об оптимизации скриптов и стилей. Пока не стали плотно работать с ExtJS.

Созданная страничка («Расчетный документ» = сокращенно РД) со всеми подключенными скриптами и стилями весит больше 5 Мб (около 200 файлов). Одно только сгенерированное DOM-дерево в коде HTML содержит более 500 000 байт. Работать с системой пользователь может начать не раньше, чем через 5 секунд после загрузки страницы (инициализация скриптов, ExtJS  и т.п.).

Как оказалось, несмотря на наличие локальной сети у заказчика и частую работу с одними и теми же страницами (должно же быть встроенное кэширование в браузере), иногда с загрузкой страниц возникают проблемы. Поэтому было решено уменьшить количество запросов к серверу и поработать над общей производительностью ExtJS в IE8. Читать дальше

Ускорение работы grid за счет удаления подсветки строки по событию mouseover

В ходе оптимизации нашей странички РД возникла мысль о том, что у пользователя в IE8 наш здоровенный грид лагает из-за-то того, что при наведении на любую строку grid добавляет этой строке дополнительный класс и удаляет его с тех строк, над которыми уже нет курсора. Сама по себе операция то должна быть недолгая, но манипуляции с DOM-деревом (а наше дерево в рабочем состоянии включает больше 500 Кб)  лучше лишний раз не выполнять. В интернете у меня не получилось быстро найти решение проблемы, несмотря на то, что я натыкался на очень много вопросов по этой теме. Читать дальше

Обновление одной записи при редактировании ячеек Grid ExtJS 4.1

В целях оптимизации мне хотелось, чтобы при редактировании какой-нибудь ячейки грида (используя плагин CellEditing) данные с сервера получались не полностью, а только для одной редактируемой записи. Это снизило бы как количество передаваемых данных, так и время обработки запроса на сервере — получить данные для одной строки по идентификатору бывает на порядок быстрее, чем для всей страницы из 25 или 50 записей.

Справка на сенче показала мне, что эта проблема не реализована полностью в ExtJS, а гугл — что она мучает не только меня. Перепробовав все предложенные варианты, я понял, что в 4.1.3 не один из них не работает. Пришлось лезть в исходники и чуточку доделать. Читать дальше

Попытка перехода на ExtJS 4.2.1 с 4.1.3

Заказчик последнее время жалуется на великие тормоза нашей системы, а так как работают они сейчас только с одной страницей («Расчетный Документ» далее  просто РД), то и оптимизировать следовало ее в первую очередь.

Прежде всего мы задумались о переходе на новую версию ExtJS в надежде улучшения производительности, ведь это (казалось бы 😉 ) наиболее быстрое решение, если предположить, что разработчики постоянно совершенствуют свой продукт. Когда-то я уже задумывался об этом, когда делал страницу заводов, на которой отображалось сразу несколько тысяч записей, сгруппированных по одному из полей. И вот оно первое нововведение этой версии — возможность использования BufferedRenderer. Читать дальше