войти зарегистрироваться

ТелекомыМегафон, роуминг и грабли: обычное дело с необычным концом

image
История про Мегафон, роуминг и… собственно, этим уже всё сказано.

Началась эта история в конце июля, когда я решил сьездить в отпуск на Украину через Белоруссию, из родного Питера. Сменив пару лет назад своего оператора с Мегафона на Теле2, я оставил симку Мегафона и периодически кидал на неё 100-300 рублей, с настроенной переадресацией на Теле2. К сожалению, Теле2 не работает за пределами Питера и области, поэтому я решил воспользоваться мегафоновским номером, закинул на него денег до баланса порядка 500 рублей, и поехал.
Через день, где-то на территории Белоруссии, мне приходит СМС от Мегафона:
«Услуга Роуминг временно приостановлена. Роуминг подключится автоматически при балансе более 1500 руб. Справки *101#». Ну и, собственно, всё! Связи нет вообще, предлагаемый *101#, естественно, не набрать.

Блог компании МосиграКакие ошибки в письмах делают люди и роботы

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

CMSCMS своими руками. Теория велосипедостроения

Как много веселых ребят
И все делают велосипед.
А один из них как-нибудь утром
Придумает порох.
Виктор Цой.

image

Сначала я хотел написать в раздел «Я пиарюсь» статью о том какой я молодец и какую замечательную штуку сделал но, немного поискав в сети, я без удивления обнаружил, что я совсем не единственный в своем роде. Тогда я решил пойти от обратного: наверное, практически каждый Веб-программист хотя бы раз в своей жизни пытается написать полноценную CMS. При этом, в процессе проектирования (а это процесс, зачастую, наступает уже во время написания кода) у разработчика непременно возникают вопросы. С этими вопросами он обращается к поисковикам и попадает на сайты тех, кто по подобным граблям уже прошествовал.

Итак, я стал смотреть, по каким же запросам попадают ко мне начинающие «разработчики велосипедов», и постарался осветить некоторые вещи, которые для меня самого были неочевидны в начале работ.

Персональные блоги Заказчик и его грабли

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

PerlОсобенности национальных выражений

Захотелось мне поделиться с хабравчанами-перловодами одним интересным случаем, произошедшим у нас на работе. В процессе ревизии старого кода была обнаружена некая загадочная конструкция (здесь и далее реальный код несколько сокращён и приглажен):
sort { my ($x, $y) = ($a, $b); ($x =~ s{/}g) <=> ($y =~ s{/}g); } @array;
Казалось бы, обычная сортировка с переопределённой функцией сравнения. По изначальной задумке автора здесь должна была быть сортировка массива строк по количеству прямых слэшей в этих строках (известно, что выражение замены возвращает в качестве значения количество произведённых замен), однако что-то в этой функции не то. Вроде бы, «заменительная» часть выражения s/pattern/replace/g никогда не была опциональной, однако именно это мы видим в выражениях $a =~ s{/}g. Как же оно работает? Вот с этим мы сейчас и будем разбираться.

Я пиарюсьБег с препятствиями или создание одного проекта

О чем разговор


chefonline.ruChefonline.ru – это кулинарный портал, как бы банально это ни звучало. У нас есть персональная и общая книги рецептов, есть возможность создавать списки покупок, планировать меню, хранить избранное, можно писать в коллективный блог или просто читать его, есть другие интересные и полезные сервисы для любителей и сочувствующих.

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

Персональные блоги CakePHP. Behaviors — измена!

Как обычно я не ищу лёгких путей, и как обычно сталкиваюсь с задачами не рассмотренными в book.cakephp.org ;-)

Всегда, самой хлопотной частью проекта для меня являлся paginate и всё что с ним связано (выборки, сортировки).

И вот сейчас, я в очередной раз наступил на грабли, причём ответа на мой вопрос — нет.

Итак, в чём состояла задача:

Model A — hasMany Model B
Model B — belongsTo Model A

Model B — actAs ('Image')

Image — чудесный behavior Евгения Томенко, который служит для связки записи в модели с сохранённой картинкой.

В случае запроса Model B ->… любой формы — behavior срабатывал как часы, и я получал нужные мне данные, в данном случае — картинки.

Однако, когда стала задача построить запрос вида

Model B -> Model -> A ( с условиями, где выборка идёт по полям Model A)

оказалось — что поиск и педжинация работают отлично, однако в результатах связанной Model B — нет и следа работы behavior… Я просто получал поля модели, без нужных мне «искривлений».

Никакие танцы-пляски с Contain, порядком запроса и т.д. — ни к чему не привели. Ответа так же нет и в гуглегруппе.

А сегодня я нашёл ещё одни грабли, но уже с behavior Translate. Если воспользоваться инструкцией, и сделать как там советуется — всё работает отлично, кроме мой любимой педжинации…

А именно — сортировать по полям, расположенным в i18n таблице — нельзя. Не получится. Только по тем полям, которые присутствуют в явном виде. Вот так.

Я, конечно, не хочу сказать, что сортировка построенная через i18n таблицу будет работать быстро, или в принципе будет работать вменяемым образом. Может и не будет. Но в таком случае, если необходимо как-то сортировать результаты кроме id,created — то никаких шансов использовать этот behavior у вас нет. Он не сработает. :(

И если первые грабли можно обойти вторым запросом (сначала получив список id Model B, а потом затребовать непосредственно из Model B все записи (тут-то behavior сработает). То во вторых граблях, единственный способ сортировать — обходиться без коробочного behavior.

2All: Если кто-то решил данные вопросы — поделитесь решением в комментариях. Речь идёт о CakePHP 1.2.3.8166

C++Порядок инициализации в конструкторах

Итак, вот небольшая программа на C++:

#include <iostream>

class A {
private:
  int a;
  int b;
public:
  A(int x) : b(x), a(b) {}
  void dump() {
    std::cout << "a=" << a << " b=" << b << std::endl;
  }
};

int main() {
  A a(42);
  a.dump();
  return 0;
}

Если вы считаете, что она выдаст

a=42 b=42

PerlОно случилось.

Привет.
Случайно вот…
Подкаст, Перл, Для начала про каталист.
прослушан 923 раза