понедельник, 26 декабря 2011 г.

Фильтры в Битриксе

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

Когда передаёшь в компонент имя переменной-фильтра через 'FILTER_NAME', Битрикс ожидает имя глобально доступной переменной. Там прямо в исходниках любого компонента можно увидеть вызов

global ${$arParams['FILTER_NAME']}
или, во всяком случае, аналог этого кода. А раз используется поиск переменной средствами ключевого слова global, то без шаманства можно забыть о таких интересных вещах, как динамическая генерация фильтра внутри объектов классов или вообще внутри любого lexical scope, отличающегося от глобального.

Сегодня же до меня дошёл смысл этого global. Фильтр надо просто сохранять как элемент массива $GLOBALS, вместе со всеми остальными глобальными переменными. Это, по-видимому, самый надёжный способ генерировать фильтр и передавать его имя в компонент.

Следующие две инструкции могут быть теперь вообще где угодно, как угодно глубоко внутри иерархии классов и/или стека вызовов:

$GLOBALS['similar_items'] = array(
 '=EXTERNAL_ID' => getSimilarItems($arResult)
);
$APPLICATION->IncludeComponent(
 "bitrix:catalog.section",
 "",
 Array(
...
  "FILTER_NAME" => 'similar_items',
...
 )
);

Я знаю, вы всегда мечтали хранить временные данные в глобальной области видимости, не правда ли?

Пиздец.

понедельник, 17 октября 2011 г.

Complex integration and Theta-functions in Haskell

Just posted two packages to the Hackage. My intentions to it was that from now everyone from Haskell community can simply google for "Haskell integration of complex functions" and It will be clear as a day that package complex-integrate provides them with needed functionality. Second package is a library with implementation of Theta functions. Hope it helps someone. Details below.

понедельник, 26 сентября 2011 г.

Дефис в названии базы данных MySQL

Кстати, а вы знаете, что если в MySQL в названии базы данных есть дефис, то вы просто так не сможете её удалить? %)


mysql> drop database xxx-dev;
ERROR 1064 (42000): You have an error in your 
SQL syntax; check the manual that corresponds 
to your MySQL server version for the right syntax 
to use near '-dev' at line 1

Надо, оказывается, окружать название БД back-tick'ами:


mysql> drop database `xxx-dev`;
Query OK, 55 rows affected (0.13 sec)

Решение найдено в описании MySQL Bug #461. Создаются базы данных с дефисами в названии без проблем.

Some publishing work on AFCALC

Today I am packaging some modules used by AFCALC and my own writings.

In the AFCALC GitHub repo I am placing the Wiki page which lists every external link relevant to the project. Also I plan to write a short article explaining what's going on in AFCALC to the wide public.

Initial paper which was used as an article accompanying my diploma project was uploaded to Scribd: Numerical Modelling of the 2D Explosion of the Elliptic Charge using the Multithreading

Integration module which bundled with AFCALC will be published with the name Data.Complex.Integrate to the HackageDB.

Theta module which bundled with AFCALC and used by the reference model will be published with the name Numeric.Functions.Theta to the HackageDB.

I'll cabalize Integrate and Theta right after finishing this post.

суббота, 17 сентября 2011 г.

Учёт логинов в MySQL базе данных часть 2: поиск прямо из Bash

Собственно, как я и ожидал, учёт логинов в MySQL базе данных ужасно неудобен, когда надо срочно быстро вспомнить логин/пароль для какого-то сайта. Даже при наличии дополнительной функции find_login всё равно нужно сначала запускать mysql-клиента, заходить в базу данных... долго. Надо быстрее.


Status update of AFCALC development

Well, AFCALC development goes smoothly and I reached the important milestone. Code base substantially shrunk — I was mostly fixing bugs, not adding features.

AFCALC now equipped with one testing model with exp() as transforming function and one real-world model of explosion made in 1970's by Kotlyar L. M.. It's successfully plotting the simplified version of Kotlyar's model, and it is very promising result.