Мар 23

1С 7.7 и MySQL

Внезапно!
Потребовалось сделать выгрузку в MySQL, всё решилось быстро и хорошо через ODBC

con = CreateObject("ADODB.Connection");
con_param = "dns=1c";
con.Open(con_param);
con.Execute("insert test set `text`='"+Текст+"';");
РекордСет = СоздатьОбъект("ADODB.Recordset");
РекордСет.ActiveConnection = con; 
РекордСет.Open("select * from test");
Пока РекордСет.EOF = 0 Цикл
	Сообщить(РекордСет.Fields("text").Value);
	РекордСет.MoveNext();                    
КонецЦикла;   
РекордСет.Close();
con.Close();

Устанавливаем MySQL ODBC Connector (x86 обязательно!) и добавляем базу в системный DNS.
На 2008 x64 добавлять через odbcad32.exe (иначе не видно драйвер x86)

Янв 31

Собственный git с преферансом и поэтессами

Заметка скорее для себя, на память…
Цель работы:
Настроить репозиторий git с доступом по протоколу HTTP и web-интерфейсом

Приборы и материалы:

  • сервер с ubuntu (debian)
  • apache2 (будем работать по HTTP)
  • git (ради него все и затевалось)
  • gitweb (веб-морда)

Continue reading

Янв 28

Одной строчкой

Гуляя по просторам интернетов, наткнулся на такую прикольную штуку:

#include <stdio.h>
#include <stdint.h>
 
int main(int argc, char** argv){
 
        uint32_t t;
        for(t=0;;t++)
            putchar((t*3&t>>7)|(t*5&t>>10));
        return 0;
}

gcc main.c
./a.out | aplay и будет круто
Утянуто у VIznut (там можно подсмотреть еще формулы интересные)
послушать онлайн тут

UPD

Можно и на питоне (работает на N9)

import sys
t=0
while 1:
 sys.stdout.write(chr(( (t*3&t>>7)|(t*5&t>>10)) % 256))
 t+=1

запустать так же: python file.py | aplay

Окт 15

Аппаратный I2C (TWI) в микроконтроллерах AVR

При наличии на борту AVR аппаратной реализации I2C почему-то многие предпочитают программные реализации. Хотя, на мой скромный взгляд — использование железного варианта проще, стабильнее и удобнее.

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

Описывать шину I2C не имеет смысла, исчерпывающие описание можно найти на википедии, Казусе и конечно у DI HALT’a. Последняя ссылка заслуживает особого внимания, там основное внимание уделяется именно AVR, но в качестве примеров используется RTOS, что несколько абстрагирует от последовательности работы. Именно для того, чтобы дополнить статью DI HALT’a (а так же, чтобы не забыть что и как самому) и была написана эта небольшая заметка.
Continue reading

Окт 10

CCTV: Motion и дурные IP-камеры

Привез с китая на попробовать внешнюю IP-камеру, все хорошо, и IR-подсветка будь здоров, и показывает в принципе не плохо, да вот беда — авторизация через Web-страничку. А motion умеет только через url авторизовать. Подумав недолго и посмотрев куки было решено научить motion отправлять куки из конфига. Правда на куках проблемы не кончились: китайский веб-сервер очень, очень хотел увидеть в HTTP заголовке Host соответствующий порт, если он отличается от стандартного. Тоже решилось.
motion-3.2.12 в конфиге добавлен параметр netcam_cookie в качестве значения — куки (в формате name1=value1; name2=value2)
Патч под катом

Continue reading

Май 28

AVR использование таймеров ( ATMega8 TIMER0)

Timer0 — 8битный таймер.
В ATMega8 и ему подобных, timer0 ну очень простой таймер. Он умеет только считать, только от 0, и только до 255. Считает он с заданной частотой, и это пожалуй единственная настройка, которую можно настроить. Хотя и тут выбор не так велик, как хотелось бы.
Счетный регистр TCNT0 (8-и разрядный, как не сложно догадаться), доступен на чтение и запись, при переполнении (когда значение меняется с 0xFF на 0x00) дергается прерывание по-вектору TIMER0_OVF (если конечно разрешено битом TOIE0 в регистре TIMSK и глобально включено командой sei). Так, вот, благодаря доступу на запись, можно немного мухлевать, или даже много, например если в прерывании таймера в TCNT0 загнать, например 127, то считать он будет порядком (двоичным порядком) веселее. Таким образом даже шимить можно. Если очень нужно.

Параметры таймера задаются регистром TCCR0 , точнее первыми 3-мя битам (Clock Select) этого регистра: CS00,CS01,CS02 – выбор тактового источника

Continue reading