25.10.2010
Для начала идем в /etc/login.conf и добавляем туда профиль пользователя для UTF-8
#
# Russian User Accounts with UTF-8
#
russian-utf|UTF-8 Russian User Accounts:\
:charset=UTF-8:\
:lang=ru_RU.UTF-8:\
:lc_all=ru_RU.UTF-8:\
:tc=default:
Далее применяем профиль к целевому пользователю
$ cap_mkdb /etc/login.conf
$ pw usermod < user > -L russian-utf
$ pw usershow < user >
< user >:*:1001:1001:russian-utf:0:0:User &:/home/< user >:/bin/sh
Устанавливаем язык по умолчанию в gdm
Комментарии со старой версии блога
Алекс:
13.07.2013 в 16:44
Русский GNOME2 на FreeBSD 8.4 (без gdm):
keyrate=»fast»
keymap=»ru.koi8-r.win»
scrnmap=»koi8-r2cp866″
font8x16=»cp866b-8×16″
font8x14=»cp866-8×14″
font8x8=»cp866-8×8″
setenv LANG ru_RU.KOI8-R
setenv MM_CHARSET KOI8-R
setenv LC_TYPE ru_RU.KOI8-R
setenv LC_LANG ru_RU.KOI8-R
setenv LC_MONETARY ru_RU.KOI8-R
setenv LC_TIME ru_RU.KOI8-R
setenv LC_NUMERIC ru_RU.KOI8-R
setenv LC_COLLATE ru_RU.KOI8-R
setenv LC_MESSAGES ru_RU.KOI8-R
setenv LC_ALL ru_RU.KOI8-R
/usr/local/bin/gnome-session
Запускаем startx
MrDekk:
18.07.2013 в 20:39
Ежели работает – отлично :)
25.10.2010
Если после установки гнома в бзде не появляется поле ввода логина пароля, а видна только тоненькая строчка и все, то надо проделать следующие пассы руками.
и написать туды
UPD: для заметки, гномий листик при старте хранится тут:
/usr/local/share/pixmaps/backgrounds/gnome/background-default.jpg
20.10.2010
Сегодня займемся создание простого проекта для red5 под eclipse. Будем считать, что red5, eclipse, flashdevelope, flex sdk вы уже поставили, поэтому сразу перейдем к делу.
Запустите eclipse, выберите пункт меню File->New Project, далее Java Project, далее Next, далее наберите «appz» в поле имя проекта, затем нажмите Finish.
Вы создали новый проект и теперь можете видеть его в диспетчере проектов, используется стандартная JRE установленная в вашей системе. Нажмите правой кнопкой на проекте, далее New->Folder, наберите WEB-INF. Создайте подкаталоги classes и src в только что созданной папке WEB-INF.
Нажмите правой кнопкой мыши на каталоге WEB-INF/src -> Build Path -> Use as Source Folder, теперь вы установили WEB-INF/src как корневой каталог для исходных текстов.
Теперь необходимо установить WEB-INF/classes как каталог куда буду складываться объектные файлы после компиляции. Для этого в контекстном меню проекта надо выбрать Properties, Далее пункт Java Build Path, в нем закладка Sources, там внизу Default Output Folder следует нажать Browse и выбрать папку WEB-INF/classes или просто ввести этот путь в поле ввода.
Все почти готово. Нет только нужных конфигурационных файлов. Для этого откройте Ваш любимые файловый менеджер и скопируйте файлы red5-web.properties, red5-web.xml, web.xml из готового проекта в вашу папку WEB-INF.
Теперь переключитесь обратно в eclipse, нажмите правой кнопкой на проекте appz и выберите Refresh, эти файлы появятся в каталоге WEB-INF.
Базовое серверное приложение
Теперь мы готовы чтобы создать новое серверное приложение. Для этого нажмите правой кнопкой на WEB-INF/src выберите New->Class, введите src для package и Application для имени класса. Затем нажмите Finish.
Это будет наш основной класс, поэтому мы должны реализовать в нем интерфейс ApplicationAdapter. Добавьте red5.jar в библиотеки, для этого выберите в контекстном меню проекта Properties -> Java Build Path -> Libraries -> Add External Jars, выберите red5.jar в корневом каталоге red5. Теперь eclipse может компилировать проект для нас.
Создайте функции appStart и appStop следующим образом:
package src;
import org.red5.server.adapter.ApplicationAdapter;
public class Application extends ApplicationAdapter
{
public Boolean appStart ( )
{
}
public void appStop ( )
{
}
}
Теперь надо импортировать интерфейс для работы с пользовательскими соединениями
import org.red5.server.api.IConnection;
public boolean appConnect( IConnection conn, Object[] params )
{
return true;
}
public void appDisconnect( IConnection conn)
{
super.appDisconnect(conn);
}
Для отладки нашего приложения нам нужно журналирование, поэтому для создания журналов воспользуемся библиотекой apache commons logging. Возможно Вам придется скачать ее с официального сайта.
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Журналируем потихоньку:
private static final Log log = LogFactory.getLog( Application.class );
public boolean appStart ( )
{
log.info( "Red5First.appStart" );
return true;
}
public void appStop ( )
{
log.info( "Red5First.appStop" );
}
public boolean appConnect( IConnection conn , Object[] params )
{
log.info( "Red5First.appConnect " + conn.getClient().getId() );
return true;
}
public void appDisconnect( IConnection conn)
{
log.info( "Red5First.appDisconnect " + conn.getClient().getId() );
super.appDisconnect(conn);
}
Теперь нам нужно немного тестовой логики, поэтому давайте сделаем так, если клиент передает true в соединении, то мы его принимаем, если false – то нет
private static final Log log = LogFactory.getLog( Application.class );
public boolean appStart ( )
{
log.info( "Red5First.appStart" );
return true;
}
public void appStop ( )
{
log.info( "Red5First.appStop" );
}
public boolean appConnect( IConnection conn, Object[] params )
{
log.info( "Red5First.appConnect " + conn.getClient().getId() );
boolean accept = (Boolean)params[0];
if ( !accept ) rejectClient( "you passed false..." );
return true;
}
public void appDisconnect( IConnection conn)
{
log.info( "Red5First.appDisconnect " + conn.getClient().getId() );
super.appDisconnect(conn);
}
В итоге код выглядит следующим образом
package src;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.red5.server.api.IConnection;
import org.red5.server.adapter.ApplicationAdapter;
public class Application extends ApplicationAdapter
{
private static final Log log = LogFactory.getLog( Application.class );
public boolean appStart ( )
{
log.info( "Red5First.appStart" );
return true;
}
public void appStop ( )
{
log.info( "Red5First.appStop" );
}
public boolean appConnect( IConnection conn, Object[] params )
{
log.info( "Red5First.appConnect " + conn.getClient().getId() );
boolean accept = (Boolean)params[0];
if ( !accept ) rejectClient( "you passed false..." );
return true;
}
public void appDisconnect( IConnection conn)
{
log.info( "Red5First.appDisconnect " + conn.getClient().getId() );
super.appDisconnect(conn);
}
}
Теперь разберемся с кофигами, они должны выглядеть примерно так:
log4j.properties:
application-related logging parameters
red5-web.properties:
webapp.contextPath=/firstapp
webapp.virtualHosts=localhost, 127.0.0.1
red5-web.xml:
<bean id="web.handler"
class="com.milgra.Application"
singleton="true" />
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>/firstapp</param-value>
</context-param>
После всего скопируйте все содержимое каталога WEB-INF вместе с ним в каталог red5/webapps и перезапустите сервер.
Создаем клиента на flash
Хорошо, с серверной частью все хорошо. Теперь займемся клиентом. Для этого открываем FlashDevelope и создаем проект (ActionScript 3), называем его например fp
Выглядеть он должен примерно следующим образом
package fp
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.NetStatusEvent;
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
import flash.text.TextField;
/**
* ...
* @author MrDekk
*/
public class Main extends Sprite
{
private var nc : NetConnection;
private var tf : TextField;
public function Main():void
{
if ( stage )
init( );
else
addEventListener( Event.ADDED_TO_STAGE, init );
}
private function init( e : Event = null ) : void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
tf = new TextField( );
tf.x = 10;
tf.y = 10;
tf.width = 300;
tf.height = 700;
stage.addChild( tf );
nc = new NetConnection( );
nc.objectEncoding = ObjectEncoding.AMF0;
nc.addEventListener( NetStatusEvent.NET_STATUS, onNetStatus );
nc.connect( "rtmp://10.0.0.202/appz", false );
}
private function onNetStatus( event : NetStatusEvent ) : void
{
trace( event.info.code );
tf.appendText( event.info.code );
tf.appendText( "\n" );
if ( event.info.code == "NetConnection.Connect.Rejected" )
{
trace( event.info.application );
tf.appendText( event.info.application );
tf.appendText( "\n" );
}
}
}
}
После этого загоняем его в любимый браузер и запускаем. Если мы передали false, то увидем следующее
NetConnection.Connect.Rejected
you passed fals . . .
NetConnection.Connect.Closed
Теперь заменим false на true, перекомпиляем проект и посмотрим снова
nc.connect( "rtmp://localhost/firstapp" , true );
NetConnection.Connect.Success
Все работает! Ура!
08.10.2010
Задача простая – есть поле в базе данных MySql. Требуется сделать чтобы значение этого поля начиналось с большой буквы, весь остальной текст остался таким каков есть.
запрос такой
SELECT
concat(upper(LEFT(description_short,1)),substring(description_short,2,char_length(description_short)-1)) AS x
FROM am_product_lang
WHERE description_short > ''
LIMIT 10;
По мотивам этого запроса можно написать любой нужный update.
28.09.2010
Для дальнейшей работы с node.js нам потребуется еще несколько библиотек. Для того чтобы поставить эти библиотеки нам потребуется пакетный менеджер для node.js – npm.
Для выполнения всех действий делаем следующие шаги:
-
Ставим последнюю версию node.js
$ fetch 'http://nodejs.org/dist/node-v0.2.2.tar.gz'
$ tar -xvf node-v0.2.2.tar.gz
$ cd node-v0.2.2.tar.gz
$ ./configure
$ make
$ make install
$ rehash
-
Ставим пакетный менеджер npm
$ fetch 'http://download.github.com/isaacs-npm-v0.2.2-0-g00adb09.tar.gz'
$ tar -xvf isaacs-npm-v0.2.2-0-g00adb09.tar.gz
$ cd isaacs-npm-6acdb76
$ make
$ rehash
-
Ставим библиотеку htmlparser
-
Ставим библиотеку jsdom
-
Ставим библиотеку http-agent
Далее можно подключать jQuery и делать паука. Но об этом в следующих статьях