Чат для локальной сети на jabber

Автор: · Ваш отзыв 

Эта статья написана для такого же как я человека, который впервые решил поставить подобный чат.

Назвал статью именно так, потому, что раньше искал в инете  решение именно по таким словам.

Когда то был моден мощный по тем временам проект Intranet Chat. Я тоже помнится все мечтал его где нить поставить. Чаты вообще были популярны. Но время шло и все менялось, как вдруг я поступаю работать в большую контору с большим документооборотом и файло-информационным обменом и что же я там вижу в 2010-м году- Intranet Chat…

Ужастно устаревший. Совершенно страшный, но тем не менее как-то  все еще решающий вопросы (Респект автору!)

Чат для конторы принципиален. Просто жизненно важен! И вопрос решать таки пришлось. Не долго думая выбор пал на протокол XMPP. На что же еще…

И так что нужно для корпоративного чата?

1. Общие групы. то есть списки всех членов группы, которые будут появляться и автоматически изменяться у каждого пользователя. У вас же каждый сотрудник не станет сидеть и полчаса набивать себе в ростер остальных сотрудников :)

2. Быстрая регистрация нового пользователя и желательно через веб-интерфейс.

3. Возможность отправки сообщений нескольким пользователям.

Сервер.

Попробовал разные. Openfire мне не понравится. Точнее понравился, но в тонкостях он не тащил. Ejabberd меня сначала напугал, но потом я его полюбил и выбрал для чата. Именно под корпоративный чат в нем есть все по дефолту. В частности бщие группы.

И так качаем ejabberd ставится с полпинка.

При установке спрашивает название сервера. Тут советую подумать сразу. Это не только сам хост но еще и часть любого жабберного логина. например chat.kontora.lo даст нам возможность создавать аккаунты типа name @chat.kontora.lo.

. А ДНС зона для этого хоста облегчит жизнь еще больше.

Запускаемся. Лезем в вебморду. Вот тут первое, на чем вспоткнулся-нужно писать логин в жабберном формате, то есть не admin а именно admin @chat.kontora.lo(ну естественно ваши данные)

Попадаем в интерфейс и видим что-то скромное и непонятное.

Так вот без особых заморочек сразу лезем в virtual hosts. Там видим наш только что созданный chat.kontora.lo и смело на него жмем. Увидите куда добавлять пользователей. Все просто логи пароль-аккант готов.

немного сложнее с общими группами.

Заходим в «общие группы»

Создаем группу например «Чат Нашей Конторы»

Затем заходим в нее и видим форму. В название пишем тоже самое «Чат Нашей Конторы»

Описание какой хотите. я пропустил.

Члены группы. ну тут понятно. копируем логины созданных напи пользователей и строчка за строчкой добавляем в группу тех кого там хотим видеть.

И наконец «Видимые группы». Это те группы которые будут отображаться у членов ЭТОЙ группы в списке. Ну дял насала стоит добавить саму группу «Чат Нашей Конторы». Иначе список вообще будет пуст. А дальше можете насоздавать еще групп и манипулировать ими как угодно.

Собственно все по серверу. Очень кратко и самая суть. Документации куча.

Клиент.

Теперь по клиентам.

Miranda и qip

Именно они умеют нормально соединяться разделяя хост написанный в логине и адрес сервера(ниже объясню)

Miranda штука интересная. НО ее долго собирать. Нужно прикрутить и настроить пару модулей, один для дизайна, второй для того что бы она умела рассылать сообщения нескольким контактам. При том вторую возможность еще нужно активировать  не только установкой модуля но еще и дополнительной  галкой в настройках. В общем qip.

qip для корпоратива я сделал хитрый. Во первых при установке я выбрал пункт, что бы он сохранял все в папке qip. Во вторых я создал ярлык для запуска кипа и дописал туда кличик /isolated. Это дало возмодность запускать кип без регистрации на его сервере с чистым локальным аккаунтов. ну и переименовал сам qip.exe в qipbin.exe чтобы не запутать юзера что именно тыкать дял запуска.

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

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

Статья сыровата. Потихоньку буду пополнять тонкостями. По ходу обкатки моего чата…

FTP-почта для виндовой сети при помощи FileZilla

Автор: · Ваш отзыв 

На новой работе завели привычку обмениваться файлОм с организациями в районах при помощи шар. На нашей стороне значит стоит виндовый «сервак»(свалка), на котором расшарена папка, в папке куча папок для районов. В районах есть доступ к этому серваку по впн. и право записи в папку. B самое обидное-шары везде монтируются как диски. То есть autorun чувствует себя очень даже в шоколаде. Ну вот из за обильного количества вирусов приходящих из районов сказали мне перетащить файлообмен(точнее почту, они так ее называют) на FTP.

Ок, собственно сам понимал, что надо.

Возможно правильнее было бы поднять почтовый сервер,  imap протокол и все такое. Я не знаю. У них свои тонкости в которые я пока не въехал.

Естественно я сразу полез в IIS. Для меня старого заядлого фряшника, на разборку с родным виндовым ftp-сервером ушло пол дня. Офигеть вообще. Но самое прикольное было, что после того, как я его таки поставил и запустил, вдруг, выяснилось что он не умеет сам ограничивать разрешения. Только средствами файловой системы. То есть да я создаю в винде пользователя и да я на каждую папку даю ему права. Твоюжежьмедь… Ну собствено ничего нормального от микрософта никогда и не ожидалось… пришлось снести…

Полез по софту. И сразу же наскочил на маленький простой, шустрый, а главное совершенно бсплатный FileZilla – сервер.

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

На сервере для пользователей организации есть папка «почта для районов»

______________________

почта для районов-

–Входящие 1 Район

–Входящие 2 Район

–Входящие 3 Район

–Исходящие 1 Район

–Исходящие 2 Район

–Исходящие 3 Район

_______________________

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

Ну а забирают соответственно из «Входящих». Так им удобно и привычно.

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

Долго думал, как это сделать и вот что придумал.

Ставим FileZilla. Запускаем админку. Создаем в ней пользователя raion1.

1

Естественно задаем ему пароль

2

Теперь создаем пустую папку, например ftp_tmp.

Дело в том, что у каждого пользователя должна быть домашняя папка, в которую он попадает по умолчанию. При том внутри должно быть пусто! Потому, что там наш пользователь должен будет увидеть в ней  то что мы захотим, а не то, что там уже есть. Одной такой пустой папки хватит на всех пользователей.

создали где нибудь пустую папку и папку с реальными папками с файлами.

3

Структура реальных папок может быть такой какая вам удобна. У меня приблизительно так. То есть все лежит в одной папке «Почта..».

4

Теперь можно подключать. начиная с Home directory. В Shared folders у настраиваемого пользователя, нажимаем add и добавляем нашу временную пустую папку.

5

Она становится «H» то есть домашней.

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

6

Если мы остановимся сейчас, то юзер raion1 попав на фтп увидит пустой лист. да у него есть доступ к еще двум папкам, но он увидит только пустую домашнюю, прав на запись в которую у него конечно нет.

И вот самое интересное, теперь мы создаем алиясы «aliases» то есть виртуальные папки, в домашней папке пользователя.

Alias это папка от корня. Корень это домашняя директория. То есть если мы напишем «/папка» то в домашней директории появится «папка». Супер. Нажимаем, правой кнопкой на только, что расшаренную папку «Входящие» и выбираем «edit aliases»

7

И как же мы назовем виртуальную папку, которая будет на ТОЙ стороне и в которую ОНИ будут писать, а мы тут из нее забирать? Конечно же «Исходящие».  Унас она входящие , а у них исходящие.

8

(права как видите на эту папку я им даю все, это уже решать вам)

И вот что мы в итоге имеем

9

Нажимаем «ОК». Сервер сохраняется и запускает конфиг. Так повторяем с каждым пользователем. Потом конечно проверяем все это. И кайфуем :)

Сериал Школа

Автор: · Ваш отзыв 

Тут все коротко, просто хочется отписаться в блоге.

Первую половину смотрел урывками. И тут дело в ряде причин. Одна нехватка времени, вторая нелюбовь в подросткам и всему, что с ними связано. Проработав несколько лет преподавателем первых курсов, да и общавшись с этим контингентом по жизни, я пытаюсь избегать их по мере возможности. Но концовку я таки досмотрел. Почему? Меня зацепило просто безумное качество исполнения сериала. То как это кино сделано имеет мало аналогов. Режиссеру большой респект. Да на самом деле подростки такие и есть, за очень редким исключением. Правильно сделали, что перенесли его на позднее время, дабы небыло кумиров и подражателей, но взрослым можно и нужно посмотреть.

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

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

Мальчик, который предсказал войну

Автор: · 1 отзыв 

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

Я естественно не сном не духом, лезу на местный форум, начинаю выяснять. И выясняются следующие подробности.

Оказывается, по двум или трем республикам прошел, при том молниеносно, слух, что в Нальчике в одном и роддомов появился на свет младенец, произнес на кабардинском языке фразу «пусть все у кого мужчины в доме жарят лакумы, приближается большая беда» и умер…

Да да именно так… родился сказал и умер…

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

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

Во вторых, подобная информационная атака на измученное травлей и террактами население, да еще и перед перевыборами местных руководящих органов, говорит сама за себя.

В третьих, очень показательно, в каком напряжении находится наше измученное население, так остро реагирующие на заведомую утку. Ну еще бы оно не было в таком состоянии если кругом диверсии и перестрелки, а из центральных каналов, только и слышно «бей кавказцев!». То есть человека обрекают пребывать среди радикалов и экстремистов, не давая ему возможности уехать в более спокойную местность России, угрожая фашистами, нацистами, милицией и прочим. То есть все что можно это сгнить в своем болоте.

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

Что касается самой утки, то она не нова… Он а уже отрабатывалась и в Казахстане и даже в Израиле в различных интерпретациях(смотрел в сети аналоги). Ведь ребенок говорящий в колыбели это давно распиаренная тема, почему бы не воспользоваться, да еще прикрутить туда легенду об избавлении из «Исхода».

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

Когда кавказцам начали предъявлять, что они танцуют свою лезгинку, можно ыбло делать выводы сразу. Понимаете ТАНЦЫ предъявляют. УЖЕ И ТАНЦЫ.

Я не знаю, что делать мне, кавказцу, человеку думающему и говорящему только на русском языке, пропитанному обеими культурами. Я везде чужой и мне от этого не по себе….

Applet resize on window resize. Изменение размера апплета вместе с окном

Автор: · Ваш отзыв 

Столкнулся с такой вот задачкой.
Нужно было, чтобы апплет был во все окно и при увеличении окна тоже увеличивался.
Вроди бы просто, если не учитывать особенности браузеров. Но благо есть jquery

<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <title>Insert title here</title>
    <style type="text/css">
      body {
         font: 12px arial,verdana,sans-serif;
         padding:0px;
         margin:0px;
         background: #E7E7E7; 
      }
   </style>
   <script language="JavaScript" src="jquery-1.3.2.min.js"></script>
   <script>
      $(function(){
         resizeApplet();
      });
      $(window).resize(function() {
          resizeApplet();
      });
       function resizeApplet() {
          $("#MainJApplet").width($(document).width()-20);
          $("#MainJApplet").height($(document).height()-20);
       }
     </script>
    </head>
  <body>
    <center>
     <applet width='800' height='600' id='MainJApplet'  code='MainJApplet'  archive='MainJApplet.jar'></applet>
    </center>
  </body>
</html>

«-20″ это из-за скролов в ИЕ. Иначе при изменении размера апплет залазит на полосы прокрутки. Там и 15-ть хватит, но я решил не жадничать. :)

В принципе это можно применить к любым элементам, а не только к апплетам…

работа со «слоями» и обращение через вызывающий класс

Автор: · Ваш отзыв 

Сразу небольшое уточнение!

Java я занялся меньше 10-ти дней назад, по этому все, что тут будет написано не претендует вообще ни на, что. Это просто запись в моем блоге, на моей личной страничке, которая может быть кого-то на, что-то натолкнет.

И так была у меня следующая задача-апплет. При запуске появляется логинка, при удачной авторизации логинка пропадает и появляется новая панель с таблицами и прочим. Соответственно логинка и вторая панель были нарисованы быстро. Был разработан код, подключен XML возвращаемый на POST-запрос к серверу и обработка ответа. Ну в яве я неделю, а вообще в IT лет-т 10-ть :) И вот тут встала задача что бы при удачной авторизации логинка пропала и появились таблицы. Апплет тогда состоял из 4-х файлов(классов)

MainJApplet.java -запускалка

MainJPanel.java - панель с основным интерфейсом(таблицы, чекбоксы и прочее)

LoginJPanel.java - панель с формой ля входа(два поля и кнопка)

Functions.java - класс в котором были собраны основные функции программы

Промаявшись сутки с поиском удобного мне решения, я нашел такую фишку как CardLayout. Именно этот контейнер позволил мне на одну панель апплета поместить опе панели MainJPanel и LoginJPanel именно так как карты лежат в колоде именно слоями. (тут стоить сделать небольшое отступление, работал я в netbeans. Кинул в апплет первую панель, а затем в тоже место вторую. и вторая стала принадлежать первой. Я е просто слева в инспекторе перетащил мышкой в апплет).
и так у меня получилось в MainJApplet.java


public class MainJApplet extends javax.swing.JApplet {

/** Initializes the applet MainJApplet */
MainJPanel mainP = new MainJPanel();
LoginJPanel loginP = new LoginJPanel();

public MainJApplet () {
super();
}

public void init() {
initComponents();
this.setSize(300, 200);
cardPanel1.add(mainP);
cardPanel2.add(loginP);

cardPanel1.setVisible(true);
cardPanel2.setVisible(true);

loginP.setVisible(true);
mainP.setVisible(false);

}

//
private void initComponents() {

cardPanel1 = new javax.swing.JPanel();
cardPanel2 = new javax.swing.JPanel();

getContentPane().setLayout(new java.awt.CardLayout());

cardPanel1.setLayout(new java.awt.GridLayout());
getContentPane().add(cardPanel1, "card2");

cardPanel2.setLayout(new java.awt.GridLayout());
getContentPane().add(cardPanel2, "card3");
}//

// Variables declaration - do not modify
private javax.swing.JPanel cardPanel1;
private javax.swing.JPanel cardPanel2;
// End of variables declaration

}

тепер надо заставить все это шевелиться. Вот тут мне долго пришлось искать как из MainJPanel обратиться в MainJApplet
и поменять видимости панелей после авторизации. Снова погуглив и почитав пару способов я решил передать ссылку на вызывающий класс в вызываемый. Но как имено передать ее и забрать в Java я не знал. Для меня ясно было только, что нужно использовать this.

LoginJPanel loginP = new LoginJPanel(this);

еще немного пошерстив я нашел и как правильно ее забрать в вызываемом классе и тут все очнь прекрасно состыковалось. Я даже не рассчитывал на такой выхлоп. Забираю я ее так:


public class LoginJPanel extends javax.swing.JPanel {

MainJApplet applet;

public LoginJPanel(MainJApplet a) {

initComponents();
applet=a;

.....

на сколько все просто и логично. В Qt есть слоты и сигналы, во флеше target.parent.perent…
Как мне сказал один флешер на соответствующем форуме «но ведь тогда солдат управляет генералом» (имея ввиду что вызываемый класс должен возвращать что-то, но не вызывать в вызывающем метод). Ну на это мне трудно было возразить, все что я мог сказать это то что «мы не на войне, тут нет солдатов и генералов». И управляем мы не вызывающей функцией, а как вы видете всего лишь через вызывающую функцию. Так, что военных просьба не беспокоиться-субординация соблюдена :) .
И так что я в итоге имею.

MainJApplet.java:


public class MainJApplet extends javax.swing.JApplet {

/** Initializes the applet MainJApplet */

MainJPanel mainP = new MainJPanel(this);
LoginJPanel loginP = new LoginJPanel(this);
Functions functions = new Functions(); //подключаю свои функции.

public MainJApplet () {
super();
}
@Override
public void init() {
initComponents();
this.setSize(300, 200);
cardPanel1.add(mainP);
cardPanel2.add(loginP);

cardPanel1.setVisible(true);
cardPanel2.setVisible(true);

loginP.setVisible(true);
mainP.setVisible(false);

}

@SuppressWarnings("unchecked")
//
private void initComponents() {

cardPanel1 = new javax.swing.JPanel();
cardPanel2 = new javax.swing.JPanel();

getContentPane().setLayout(new java.awt.CardLayout());

cardPanel1.setLayout(new java.awt.GridLayout());
getContentPane().add(cardPanel1, "card2");

cardPanel2.setLayout(new java.awt.GridLayout());
getContentPane().add(cardPanel2, "card3");
}//

// Variables declaration - do not modify
private javax.swing.JPanel cardPanel1;
private javax.swing.JPanel cardPanel2;
// End of variables declaration

}

и к примеру кусок LoginJPanel.java:


public class LoginJPanel extends javax.swing.JPanel {

Functions functions = new Functions();
MainJApplet applet;

public LoginJPanel(MainJApplet a) {

initComponents();
applet=a;

}
...... тут все сильно поскипано но суть ясна...

private void enterButtonMousePressed(java.awt.event.MouseEvent evt) { //тоже поскипано
this.setVisible(false);
applet.mainP.setVisible(true);
}

и я получаю отличную прозрачность. через applet я могу получить доступ в любой другой класс а главное к функциям и переменным в Functions.

Вот такая вот недельная работка, ну если не учитывать время на рисование интерфейсов и подключение XML то не недельная а двухдневная.
Может кому прикгодиться

Мегафон.ру

Автор: · Ваш отзыв 

Получай чайчас смс-ку, думаю как и многие миллионы других пользователей.

Содержание следующее:

Сенсация! Мегафон начинает уникальную акцию, главный приз 1200 тыс.руб. ! Включайся сейчас *701# Клик=9 руб.

Подр. на megafon.ru

Зачем мне взрослому человеку, предлагают за 9 рублей подр. на мегафон ?

Весна…