четверг, 8 декабря 2011 г.

Как настроить автоввод логина и пароля для входа в систему при загрузке компьютера

Для того чтобы настроить автоввод логина и пароля для входа в систему при загрузке компьютера, заходим в Пуск -> Выполнить -> control userpasswords2. Откроется следующее окно.


В нем УБИРАЕМ галочку "Требовать ввод имени пользователя и пароля", жмем применить. Появится окно с предложением ввести имя и пароль для учетной записи, которая будет использоваться по умолчанию (в которую и будет осуществляться автовход). Вводим все что необходимо, нажимаем ок. Все настроено, теперь при загрузке компьютера окно ввода логина и пароля не будет появлятся, а будет сразу производиться вход в систему с указанными учетными данными.

Как настроить удаленный рабочий стол в Windows XP

Настройка удаленного рабочего стола (через RDP) в Windows XP на удивление проста. Для начала заходим в свойства системы (Панель управления -> Система), там выбираем вкладку "Удаленные сеансы" и ставим галочку "Разрешить удаленной доступ к этому компьютеру" (см. рис ниже).


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

Помимо прочего необходимо проверить что служба "Служба теминалов" разрешена и работает (Панель управления -> Администрирование -> Службы).


Теперь чтобы подключиться, на другом компьютере в локальной сети запускаем подключение к удаленному рабочему столу (пуск -> выполнить -> mstsc), указываем ip адрес компьютера к которому нужно подключиться (первого компьютера) и жмем подключить (см. рисунок).


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

P.S.
Если необходимость установки пароля для учетной записи связана только с неоходимостью использовать рабочий стол, то можно настроить автоввод пароля при загрузке ПК (как описано здесь), чтобы не вводить его каждый раз.

Ошибка при запуске Skype в модуле Flash.ocx

Недавно столкнулся с тем, что Skype перестал запускаться. При запуске выдавало сообщение об ошибке в модуле Flash.ocx.
В журнале событий (Windows 7) записывало следующую информацию
Имя сбойного приложения: Skype.exe, версия: 5.5.0.124, отметка времени: 0x4e96a02b
Имя сбойного модуля: Flash.ocx, версия: 6.0.22.0, отметка времени 0x3c884ffe
Код исключения: 0xc0000005
Смещение ошибки: 0x000542fc
Идентификатор сбойного процесса: ---
Время запуска сбойного приложения: -----
Путь сбойного приложения: C:\Program Files\Skype\Phone\Skype.exe
Путь сбойного модуля: C:\Windows\system32\macromed\flash\Flash.ocx

При простом удалении сбойного файла - C:\Windows\system32\macromed\flash\Flash.ocx, скайп переставал выдавать ошибки и запускался нормально, однако также переставала работать flash анимация в браузерах.

Проблему удалось решить путем полной переустановки FlashPlayera (удаления flashPlayera с помощью утилиты удаления flashPlayer, перезагрузки ПК, и затем установки его).
Кстати, у меня после переустановки файл C:\Windows\system32\macromed\flash\Flash.ocx пропал, вместо него появилось несколько других файлов.

вторник, 6 декабря 2011 г.

Копирование файлов в java

Стандартная функция для того, чтобы скопировать файл из одного места в другое в java 6 отсутствует. Скопировать файл можно следующим образом:


/**Copies file from source to dest
     * 
     * @param source - source file
     * @param dest - dest file
     * @author Cloud
     * @return True only if file copied without Exceptions
     */
    public static Boolean copyFile(File source, File dest) {
        FileInputStream is = null;
        FileOutputStream os = null;
        try {
            is = new FileInputStream(source);
            os = new FileOutputStream(dest);
            int nLength;
            byte[] buf = new byte[8000];
            while (true) {
                nLength = is.read(buf);
                if (nLength < 0) {
                    break;
                }
                os.write(buf, 0, nLength);
            }
            return true;
        } catch (IOException ex) {
            
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (Exception ex) {
                }
            }
            if (os != null) {
                try {
                    os.close();
                } catch (Exception ex) {
                }
            }
        }
        return false;
    }

воскресенье, 13 ноября 2011 г.

Глюк с JVisualWM - в списке приложений показывается только Unknown Aplication

Недавно столкнулся со следующей проблемой - JVisualWm (файл jvisualwm.exe пакета jdk (java) - служит для расширенного мониторинга и отладки приложений на java) неожиданно перестал работать как надо. Приложение запускалось, однако в списке имеющихся java программ отображалась только строка и больше ничего. Переустановка jdk, а также обновление его - не помогло. Поиск в интернете упоминаний о подобной проблеме ничего не дал. Покопавшишь в конфигах java - нашел причину проблемы. В файле C:\Program Files\Java\jdk1.6.0_29\lib\visualvm\etc\visualvm.conf параметр default_userdir оказался равен default_userdir="${HOME}/.${APPNAME}/6u23", однако на данный момент использовалась версия jdk 6u29, а 6u23 - была удалена. Замена значения 6u23 на 6u29 привела к восстановлению работоcпособности jVisualWm.

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

Как в java swing программно установить фокус (focus) на некотором компоненте

Для программной установки фокуса на компоненте swing (например, текстовом поле JTextField) рекомендуется использовать функцию Component.requestFocusInWindow().

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

Создание zip архивов на java

Недавно столкнулся с необходимостью создания резервных копий определенных файлов в приложении на java, резервные копии чтобы меньше занимали место было решено сжимать в zip архивы.
Для работы с zip архивами в java существует стандартный пакет java.util.zip, с использованием которого также можно запаковывать и распаковывать архивы формата gzip.
Ниже приведен исходный код метода для архивирования директории со всем её содержимым

private static void directoryToZip(File directory, File zipFile) throws IOException {
        URI base = directory.toURI();
        Deque queue = new LinkedList();
        queue.push(directory);
        OutputStream out = new FileOutputStream(zipFile);
        Closeable res = out;
     
        try {
            ZipOutputStream zout = new ZipOutputStream(out);
            res = zout;
            while (!queue.isEmpty()) {
                directory = queue.pop();
                for (File child : directory.listFiles()) {
                    String name = base.relativize(child.toURI()).getPath();
                    if (child.isDirectory()) {
                        queue.push(child);
                        name = name.endsWith("/") ? name : name + "/";
                        zout.putNextEntry(new ZipEntry(name));
                    } else {
                        zout.putNextEntry(new ZipEntry(name));


                        InputStream in = new FileInputStream(child);
                        try {
                            byte[] buffer = new byte[1024];
                            while (true) {
                                int readCount = in.read(buffer);
                                if (readCount < 0) {
                                    break;
                                }
                                zout.write(buffer, 0, readCount);
                            }
                        } finally {
                            in.close();
                        }
                        zout.closeEntry();
                    }
                }
            }
        } finally {
            res.close();
        }
    }

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

Как в java проверить наличие соединения с интернетом

Один из способов проверить наличие соединения с интернетом - просто протестировать загружается ли некоторые сайты или нет. Для проверки лучше всего использовать крупные сайты, про которые известно, что крайне маловероятно они в какой то момент станут недоступны, например google.com, ya.ru. Либо проверять последовательно доступность нескольких сайтов - если хоть один из них доступен - значит соединение с интернетом присутствует.
Ниже представлена функция проверяющая наличие соединения с интернетом, путем проверки доступности сайта ya.ru.

    private static boolean checkInternetConnection() {
        Boolean result = false;
        HttpURLConnection con = null;
        try {
            // HttpURLConnection.setFollowRedirects(false);
            // HttpURLConnection.setInstanceFollowRedirects(false)
            con = (HttpURLConnection) new URL("https://ya.ru").openConnection();
            con.setRequestMethod("HEAD");
            result = (con.getResponseCode() == HttpURLConnection.HTTP_OK);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (con != null) {
                try {
                    con.disconnect();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return result;
    }

четверг, 7 июля 2011 г.

Как можно проверить является ли строка числом на java?

Этот вопрос возникает наверное у каждого начинающего (и не очень) программиста на java. Есть несколько способов выполнить вышеописанную задачу.
Способ первый - использование метода Integer.parseInt(String string).
public boolean checkString(String string) {
        try {
            Integer.parseInt(string);
        } catch (Exception e) {
            return false;
        }
        return true;
    }
Этот способ очень быстро выполняется если строка является числом (в 5-10 раз быстрее, чем способ с использованием регулярных выражений), и очень долго - если строка числом не является (примерно в 1,5 раз дольше, чем способ с использованием регулярных выражений).

Способ второй - использование регулярных выражений.
public boolean checkString(String string) {
        if (string == null) return false;
        return string.matches("^-?\\d+$");
    }

Этот метод выполняется примерно с одинаковой скоростью вне зависимости от того является ли строка числом.

Способ третий - проверка по очереди каждого символа в строке.

public boolean checkString(String string) {
         if (string == null || string.length() == 0) return false;

         int i = 0;
         if (string.charAt(0) == '-') {
            if (string.length() == 1) {
               return false;
            }
            i = 1;
         }

         char c;
         for (; i < string.length(); i++) {
             c = string.charAt(i);
             if (!(c >= '0' && c <= '9')) {
                 return false;
             }
         }
         return true;
     }

При тестировании данный метод показал на удивление хорошие результаты - более чем в 3 раза быстрее, чем самый быстрый случай для первого и второго метода.
Третий метод и второй для преобрахования строк не подходят, в отличие от первого (при небольшой доработке).
Поэтому если задача стоит только в определении является ли строка числом - то лучше всего подойдет именно третий метод, если же помимо прочего ещё и необходимо преобразовать строку в число то лучше воспользоваться 1 методом, немного видоизменив его.

четверг, 30 июня 2011 г.

Как удалить вирус GuardGuard.exe

Для начала что делает вирус GuardGuard.exe :
  • создает TCP порты и соединяется с другими зараженными компьютерами.
  • создает файлы в папках временных файлов (Temp).
  • исполняется также из папок временных файлов.
  • перехватывает процессы.

Алгоритм лечения от заразы:

  • Отключаем восстановление системы (желательно, но не обязательно).
  • Перегружаем в безопасном режиме (при загрузке Windows нажимаем F8 и выбираем пункт безопасный режим).
  • Ищем на диске поиском guardguard.exe. Удаляем. Обычно это временная папка (C:\Windows\Temp), заодно оттуда можно удалить все остальное.
  • Запускаем regedit.exe (Пуск -> Выполнить -> regedit).
  • Ищем "guardguard" и удаляем все ключи с этой строкой.
  • Перегружаем компьютер и пытаемся работать.
  • Не забудьте включить "Восстановление системы" (если отключали).

воскресенье, 5 июня 2011 г.

#E154. Ошибка установщика классов (Class installer failed). Ошибка 2: Не удается найти указанный файл.

На днях после обновления файрвола столкнулся со странным глюком. Не работала ни одна сетевая карта, а при установке драйверов на них в лог записывалоь сообщение:
#E154. Ошибка установщика классов (Class installer failed). Ошибка 2: Не удается найти указанный файл.
На просторах интернета нашел простое решение этой проблемы.
Итак, по шагам:
1. Убиваем все сетевухи (это для удобства - можно и не удалять)
2. Сносим в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network параметр CONFIG
3. Перезагружаем комп
4. Сетевухи автоматически устанавливаются - всё работает

понедельник, 16 мая 2011 г.

Как сохранить файл установки приложения из магазина Nokia OVI прямо на ПК

1. Необходима регистрация непосредственно в магазине. Войдите в магазин и выберете свой телефон
2. Перейдите на страницу приложения, которое хотите загрузить
3. Нажмите Отпр. другу
4. В адресной строке браузера "send-to-freind" замените на "download" и нажмите Enter
5. Появится окно с выбором места сохранения файла. Сохраните файл
6. Используя notepad ++ откройте сохраненный файл
7. Удалите 4 предложения в самом верху, включая пробелы
8. Сохраните файл
9. Измените расширения файла с sis.dm на sis
10. Установите приложение на свой мобильный

Как создать скрытый файл (hidden file) на платформе Windows в Java

Чтобы создать скрытый файл в Windows необходимо использовать класс Runtime.
Установка аттрибута скрытого файла осуществляется в помощью файла Windows C:\WINDOWS\System32\ATTRIB.EXE (если Windows установлена в другом месте - этот путь придется поменять). Данный способ проверен и точно работает на 32 битной Windows XP, в других версиях Windows, возможно придется изменить путь к файлу ATTRIB.EXE.

Пример:

File file = new File("Example.txt");
file.createNewFile();
String command = "C:\\WINDOWS\\System32\\ATTRIB.EXE +H Example.txt";

Runtime.getRuntime().exec(command);

воскресенье, 1 мая 2011 г.

Смена шрифта по умолчанию в Excel 2007

По умолчанию, при создании нового документа, в Excel 2007 используется шрифт Calibri. Возможно, что вам понадобится сменить его на какой-либо другой, по своему усмотрению. Для этого необходимо открыть MS Excel 2007, в главном меню Excel нажать "Параметры Excel", открыть вкладку "Основные" (см. рисунок).


Здесь в разделе "При создании новых книг" можно выбрать необходимый стиль и размер шрифта.

вторник, 5 апреля 2011 г.

Как настроить фильтрацию по ip или mac в ADSL модеме P660R-T1

Подключаемся к модему при помощи telnet. В Windows XP этого жмем пуск -> выполнить -> telnet. Откроется командная консоль telnet. Чтобы подключиться к модему вводим команду
open 192.168.1.1
Вместо 192.168.1.1 следует вписать адрес модема.
Затем вводим пароль и попадаем в меню администрирования модема.



Далее выбираем пункт 21 (вводим цифры 21 и нажимаем enter). Попадаем в меню настройки фильтров.
Фильтр номер 1 должен быть пустым. Создаем на его месте новый фильтр, называем его произвольным образом.
Нажимаем Enter и попадаем в меню настройки правил фильтрации. Можно создать всего 6 правил фильтрации. Для создания правила необходимо ввести номер создаваемого правила и нажать Enter. Откроется окно настройки правила. Как настроить фильтр по ip можно почитать здесь http://zyxel.ru/content/support/knowledgebase/KB-1517.
Правило фильтрации по mac создается с использованием следующих настроек (см. скриншот)
В filter type указывается Generic Filter Rule.
В поле Mask указывается значение маски ffffffffffff
В поле Value указываем значение mac адреса.

Поле Action Matched - определяет действие над пакетом, которое будет выполнено при соответствии пакета правилу, Action Not Matched - при несоотвествии.
Могут иметь значения Drop - отклонить, Forward - пропустить, Check Next Rule - перейти к проверке следующего правила.
Важно! Последнее правило в списке не должно иметь значений действия над пакетом Check Next Rule, иначе модем намертво зависнет и придется делать его жесткую перезагрузку.
Чтобы разрешить доступ к интернету компьютерам только с определенными mac адресами необходимо для всех правил в списке, кроме последнего прописать:
action matched --------- forward
action not matched --------- check next rule
последнее подправило должно заканчиваться следующим образом:
action matched --------- forward
action not matched --------- drop
Получим список правил примерно следующего вида.



Чтобы запретить доступ к интернету компьютерам только с определенными mac адресами (забанить) необходимо для всех правил в списке, кроме последнего прописать:
action matched --------- drop
action not matched --------- check next rule
последнее подправило должно заканчиваться следующим образом:
action matched --------- drop
action not matched --------- forward


После создания правил их необходимо применить. Для этого из главного меню модема заходим в пункт 3. LAN Setup, далее 1. LAN Port Filter Setup.
Здесь в device filters прописываем номер созданного фильтра
Если было создано несколько фильтров, и есть желание одновременно их использовать, то вписываем их через запятую. Правила применяются по очереди в том порядке в котором они прописаны, соответственно если одно правило перекрывает другие, то эти правила работать не будут.

понедельник, 14 марта 2011 г.

Выбор директории в java c помощью JFileChooser

Чтобы в Java в диалоге выбора файлов JFileChooser вместо файлов можно было выбрать только папки следует задать следующие параметры JFileChooser'а
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fileChooser.setAcceptAllFileFilterUsed(false);

четверг, 10 марта 2011 г.

Как увеличить скорость скачки с торрентов

Одной из главных причин относительно невысокой скорости работы торрентов в Windows XP чаше всего является наличие ограничения на количество одновременных полуоткрытых исходящих TCP соединений (half-open connections или connection attempts).
По умолчанию их число равно 10, и для хорошей работы торрентов этого явно недостаточно. Исправить это недоразумение возможно так называемым патчем Half-open limit fix. Скачать последнюю версию и почитать подробное описание патча можно на сайте автора.

Здесь на всякий случай выкладываю версию 4.2

вторник, 8 марта 2011 г.

Автоматическое резервное копирование домашнего каталога на ftp на хостинге с CPanel

Полное резервное копирование домашнего каталога сайта на ftp можно осуществить с использованием следующего php-скрипта

<?php

// PHP script to allow periodic cPanel backups automatically, optionally to a remote FTP server.
// This script contains passwords.  KEEP ACCESS TO THIS FILE SECURE! (place it in your home dir, not /www/)

// ********* THE FOLLOWING ITEMS NEED TO BE CONFIGURED *********

// Info required for cPanel access
$cpuser = "username"; // Username used to login to CPanel
$cppass = "password"; // Password used to login to CPanel
$domain = "example.com"; // Domain name where CPanel is run
$skin = "x"; // Set to cPanel skin you use (script won't work if it doesn't match). Most people run the default x theme

// Info required for FTP host
$ftpuser = "ftpusername"; // Username for FTP account
$ftppass = "ftppassword"; // Password for FTP account
$ftphost = "ftp.example.com"; // Full hostname or IP address for FTP host
$ftpmode = "ftp"; // FTP mode ("ftp" for active, "passiveftp" for passive)

// Notification information
$notifyemail = "you@example.com"; // Email address to send results

// Secure or non-secure mode
$secure = 0; // Set to 1 for SSL (requires SSL support), otherwise will use standard HTTP

// Set to 1 to have web page result appear in your cron log
$debug = 0;

// *********** NO CONFIGURATION ITEMS BELOW THIS LINE *********

if ($secure) {
   $url = "ssl://".$domain;
   $port = 2083;
} else {
   $url = $domain;
   $port = 2082;
}

$socket = fsockopen($url,$port);
if (!$socket) { echo "Failed to open socket connection... Bailing out!\n"; exit; }

// Encode authentication string
$authstr = $cpuser.":".$cppass;
$pass = base64_encode($authstr);

$params = "dest=$ftpmode&email=$notifyemail&server=$ftphost&user=$ftpuser&pass=$ftppass&submit=Generate Backup";

// Make POST to cPanel
fputs($socket,"POST /frontend/".$skin."/backup/dofullbackup.html?".$params." HTTP/1.0\r\n");
fputs($socket,"Host: $domain\r\n");
fputs($socket,"Authorization: Basic $pass\r\n");
fputs($socket,"Connection: Close\r\n");
fputs($socket,"\r\n");

// Grab response even if we don't do anything with it.
while (!feof($socket)) {
  $response = fgets($socket,4096);
  if ($debug) echo $response;
}

fclose($socket);

?>



Этот скрипт нужно поместить в файл в кодировке UTF-8(без BOM) и загрузить на сервер в не публичный каталог(в файле содержатся пароли, поэтому нежелательно чтобы кто-то мог его посмотреть). Затем добавить в cron в качестве задания.

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

понедельник, 7 марта 2011 г.

Связываем Redmine с репозиторием svn на хостинге с CPanel

На самом деле ничего сложного, все делается точно также как и на любом другом типе хостинга.
 
Кратко: из под аккаунта администратора заходим  в настройки проекта -> репозитории (administration -> projects -> projectname -> Repository). Там выбираем тип subversion, указываем адрес, логин, пароль и жмем применить. 

 Все остальное можно почитать здесь.

Возможная причина появления ошибки 0xc0000022

Недавно столкнулся с проблемой запуска программы dropbox. При попытке запуска появлялось сообщение следующего содержания: "Dropbox.exe - Ошибка при инициализации приложения (0xc0000022). Для выхода из приложения нажмите кнопку "ОК"."

 Долгое время (дня 2) не мог понять в чем проблема, однако все оказалась на удивление просто - причина была в файрволе (Agnitum Security Suite 7.1). После добавления файла Dropbox.exe в исключения файрвола - проблема исчезла.

UPD: Мной было обнаружено, что подобная ошибка при работе приложений также часто может возникать из-за некорректно нестроенных параметров безопасности. Наиболее простым решением такой проблемы будет установка исправления от майкрософт для восстановления параметров безопасности по умолчанию со страницы http://support.microsoft.com/kb/313222/ru

четверг, 3 марта 2011 г.

Основные методы jQuery Node


Библиотека jQuery превращает объекты DOM в узлы jQuery (nodes). Эти узлы имеют следующие методы (далее информация на английском языке, почерпнутая из различных туториалов).

  • addClass(), removeClass(), toggleClass() - Applies or removes a CSS class to a jQuery node.
  • css("attribute", "value") - Applies a single CSS rule to the jQuery node.
  • Css(JSONObject) - Applies JSON object list of CSS rules and values to the jQuery node.
  • html() - Reads or changes the HTML contents of the jQuery node.
  • text() - Reads or changes the text contents of a jQuery node.
  • val() - Reads the value of a form element.
  • bind(event, function) - Triggers function to occur when event occurs.
  • Show(), hide(), toggle() - Makes element appear or disappear.
  • animate(parameters, duration) - parameters is a JSON object consisting of CSS rules and values. Values are smoothly changed from current value to target value over duration (measured in milliseconds).

среда, 2 марта 2011 г.

Перенос svn репозитория

Делаем дамп репозитория на старом сервере
svnadmin dump /var/svn/project/ > /tmp/svn.dump
Копируем этот дамп на новый сервер:
scp /tmp/svn.dump user@newserver:/tmp/
Создаем пустой репозиторий на новом сервере:
svnadmin create /var/svn/project/
Загружаем туда дамп:
svnadmin load /var/svn/project/ < /tmp/svn.dump
Возможно придется в рабочих копиях проекта сменить URL репозитория на новый. Для начала проверяем совпадает ли наш URL c uRLом сайта.
svn info url/of/repos/
Если не совпадает, тогда меняем его
cd /var/www/project/
svn switch --relocate OLD_URL NEW_URL

Установка svn (Subversion) на хостинг с CPanel

Подключаемся по ssh к серверу. Создаем папку с репозиториями.
mkdir /home/username/svn
mkdir /home/username/svn/repos

Создаем пустую папку для первого репозитория
mkdir /home/username/svn/repos/repo1

Далее создаем репозиторий в папке repo1
svnadmin create /home/username/svn/repos/repo1/

Настраиваем права пользователей. Для этого в файл /home/username/svn/repos/repo1/conf/svnserve.conf добавляем следующие строки.

[general]
anon-access = none
auth-access = write
realm = Test Repository
password-db = passwd

Информация об авторизации пользователей хранится в файле ‘passwd’ в той же директории что и файл svnserve.conf в формате
Username = password
Теперь необходимо запустить сервис свн
svnserve -d -r /home/username/svn/repos/
Для отладки удобнее запускать svnserve с параметром --foreground, тогда можно в любом момент остановить сервис нажатием ctrl + c.

Теперь на клиентском компьютере импортируем необходимую нам папку в репозиторий
svn import -m ‘Initial Import’ path/to/folder/ svn://domainname/repo1/
Проверяем работает ли свн с помощью команды
svn info svn://domainname/repo1/

Работа с процессами в unix

Для получения информации о процессах используется команда ps.
Чтобы получить список процессов, запущенных определенным пользователем необходимо выполнить
ps -u username

Для завершения процесса используется команда
kill pid
В pid указывается pid процесса, который можно посмотреть командой ps

воскресенье, 27 февраля 2011 г.

Автоматическое резервное копирование баз данных MySql на сервере с CPanel и отправка их на емаил

Создаем скрипт

sqldbbackup.sh
set -e
MYSQL_USER="user"
MYSQL_PASS="pass"
MAIL_TO="my@email.com"

cd /tmp

(mysqldump -u$MYSQL_USER -p$MYSQL_PASS --all-databases | gzip -9 - > dump.sql.gz) && \
(echo | mutt -a dump.sql.gz -s "[DB BACKUP]" $MAIL_TO)
rm -f dump.sql.gz

Данный скрипт делает бэккап всех баз данных в один файл и отправляет этот файл на указанный почтовый ящик.

После копирования этого скрипта на сервер, нужно не забыть установить права на выполнения его командой chmod +x sqldbbackup.sh.

Далее добавляем этот скрипт на автовыполнение в cron и радуемся жизни :)

суббота, 26 февраля 2011 г.

установка Redmine на сайт с cPanel и MySql базой данных

Для начала подключаемся к серверу по ssh (например с помощью putty). При подключении указываем имя сервера через который идет вход на CPanel и логин и пароль от CPanel.
Выполняем команды указанныездесь (далее "инструкция") до п. 1, а именно
gem install rails -v=2.3.5
gem install rack -v=1.0.1
gem install mysql
На команде gem install rack -v=1.0.1 может быть выдано сообщение " ERROR: could not find gem rack locally or in a repository ". Если это случилось - не отчаиваемся, есть как минимум 2 варианта решения проблемы.
1. Изменить источник, с которого загружаются gems.
Чтобы посмотреть этот источник выполняем команду
gem source

У меня выдало сообщение следующего содержания:
*** CURRENT SOURCES ***


http://gems.rubyforge.org/

Далее добавляем сайт http://rubygems.org/ в источники.
gem sources -a http://rubygems.org/
Если сайт успешно добавлен - пробуем установить rack ещё раз
gem install rack -v=1.0.1

2. Второй способ - это загрузить gem вручную с сайта rack.rubyforge.org
Далее выполняем:
wget http://rubyforge.org/frs/download.php/71197/rack-1.0.1.tar.gz
tar zxf rack-1.0.1.tar.gz
gem install rack



Создаем базу данных. Для этого заходим в раздел CPanel "базы данных", и создаем там бд и пользователя, которого redmine будет использовать для доступа к этой бд. Пользователя связываем с бд, привилегии ставим - разрешить все.
Далее загружаем редмайн к себе на хостинг.
Через файловый менеджер CPanel или ftp выполняем действия п. 3 инструкции.
3. Copy config/database.yml.example to config/database.yml and edit this file in order to configure your database settings for "production" environment.

Example for a MySQL database:
production:
adapter: mysql
database: redmine
host: localhost
username: redmine
password: my_password

Далее по ssh открываем папку с редмайном (команда cd) и в ней выполняем п.4 - п.6.
Могут быть выданы сообщения о необходимости установки некоторых гемов. Смело устанавливаем их. Если же и после установки все равно выдается сообщение о необходимости их установки, то скорее всего задан неверный путь к директориям GEM_PATH и GEM_HOME. В этом случае в файл .bash_profile (находится в корневой директории сайта) добавляем следующие строки
export GEM_HOME="/home/username/ruby/gems"
export GEM_PATH="/home/username/ruby/gems/gems"
где вместо username вписываем ваше имя пользователя для входа в CPanel.

Устанавливаем Mongrel
gem install mongrel --include-dependencies
Проверяем mongrel
mongrel_rails start -c /path/to/redmine/folder -e production -p 5555

Если все работает, то есть при открытии в браузере сайта по 5555 порту - открывается redmine, то все отлично. Нажимаем в консоли ctrl + c - останавливаем mongrel. Далее запускаем его ещё раз, но уже в фоновом режиме
mongrel_rails start -c /path/to/redmine/folder -e production -p 5555 -d
Должно запуститься без ошибок.

Теперь нужно позаботиться о том, чтобы mongrel запускался после перезагрузке сервера (как можно предположить в любом случае сервер иногда перезагружается, и тогда наше приложение перестанет работать).
Сделать это не так просто как может показаться на первый взгляд, однако все же возможно. Для этого воспользуемся планировщиком cron. Итак, идем в секцию advanced -> cron jobs

Далее вписываем в строку Command строку запуска нашего приложения (mongrel_rails start -c /path/to/redmine/folder -e production -p 5555 -d), в строку minute - @reboot

Как мы видим - CPanel поле minute подсвечивает как ошибочное. Но мы то знаем, что оно введено верно. Убедить CPanel, что ввели мы все верно, можно следующим образом (далее инструкция для пользователей браузера Opera 11, возможно что-то похожее можно сделать и в других браузерах).
Заходим в редактор исходного кода страницы (правая клавиша мыши -> исходный код). Там поиском находим функцию var validate_minute_field, заменяем возвращаемое ей значение на true (см. рисунок).

Далее аналогичным образом изменяем функции validate_hour_field, validate_day_field, validate_month_field, validate_weekday_field. Получилось вот так

Жмем применить изменения. Переходим на вкладку самой страницы добавления задания и жмем добавить задание. Задание добавлено.

пятница, 4 февраля 2011 г.

Как настроить WakeOnLan через ADSL модем ZTE ZXV10 W300 (ПРОМСВЯЗЬ M 200A)

На своём модеме при настройке WakeOnLan через интернет столкнулся со следующей проблемой - при попытке сохранения правила проброса портов на широковещательный (broadcast) айпишник 192.168.1.255, выскакивало сообщение следующего содержания "Invalid IP address: 192.168.1.255".
Немного покопавшись в исходном коде страницы, обнаружил заветные строчки, отвечающие за блокировку ввода этого айпи. К счастью оказалось, что на аппаратном уровне никакого контроля не осуществляется, поэтому после исправления их в редакторе оперы, айпишник успешно добавился.

Итак, последовательность действий по шагам.

1. В Opera, вводим адрес http://192.168.1.1/advanced/adv_nat_virsvr.htm. (вместо 192.168.1.1 должен быть айпи вашего модема). Открывается окно следующего вида.



2. Открываем эту страницу во встроеном редакторе исходного кода

3. Находим строку
if(!isValidIpAddr(digits[0],digits[1],digits[2],digits[3],false)) {
alert("Invalid IP address: " + Address);return true;
}
и удаляем её. Жмем кнопку применить.


4. Возвращамся к вкладке с настройками модема (к той что с первого скрина) и добавляем злополучный айпи адрес. На этот раз никаких сообщений не появляется и всё проходит на ура.

Как в Java удалить папку вместе с подпапками

В java удалить папку вместе с находящимися в ней файлами и папками можно с помощью следующей рекурсивной функции

/**
     * Deletes directory with subdirs and subfolders
     * @author Cloud
     * @param dir Directory to delete
     */
    public static void deleteDirectory(File dir) {
        if (dir.isDirectory()) {
            String[] children = dir.list();
            for (int i=0; i<children.length; i++) {
                File f = new File(dir, children[i]);
                deleteDirectory(f);
            }
            dir.delete();
        } else dir.delete();
    }

Как закрыть окно JDialog в Java

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

setVisible(false); 
dispose();

Для завершения всего приложения удобна в использовани команда

exit(0);

Однако разработчики java не рекомендуют использовать её.

Как настроить Удаленный рабочий стол (Remote Desktop) для работы нескольких пользователей одновременно

1) скачиваем пропатченный файл termsrv.dll (или патчим вручную, см. примечание внизу статьи), для Windows XP SP3 - файл версии 5.1.2600.5512 можно скачать здесь termsrv.dll.

2) копируем оригинальный файл termsrv.dll из директории C:\Windows\System32\ куда нибудь на всякий случай.
3) закидываем termsrv.dll в следующие директории, заменяя оригинальный файл.
C:\Windows\System32\
C:\Windows\ServicePackFiles\i386\ (если директория существует)
C:\Windows\System32\dllcache\ (если директория существует)

4) пропатчиваем ключи реестра, запустив файл ts_multiple_sessions.reg. Можно сделать то же самое вручную с помощью regedit.exe:

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Terminal Server\Licensing Core]
“EnableConcurrentSessions”=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
“EnableConcurrentSessions”=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
“AllowMultipleTSSessions”=dword:00000001

6) Start -> Run -> gpedit.msc -> Computer Configuration -> Administrative Templates -> Windows Components -> Terminal Services -> Limit Number of Connections ,
изменяем значение Limit Number of Connections на необходимое количество одновременных подключений.

7) проверяем, что в свойствах системы (System Properties -> вкладка Remote) поставлена галочка Allow users to connect remotely to this computer (Разрешить пользователям удаленно подключаться к этому компьютеру)

8) проверяем, что включена опция Fast User Switching (Control Panel -> User Accounts -> Change the way users log on or off)

9) перезагружаем компьютер

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

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

P.S.
Оригинальный файл termsrv.dll - можно изменить (пропатчить) вручную с помощью hex-редактора
termsrv.dll (Windows SP2 5.1.2600.2180) 295,424 bytes
Offsets: hexadec.

128BB: 75 -> 74
217D3: 8B -> 33
217D4: C7 -> C0
2192D: 8B -> 33
2192E: C7 -> C0
225B7: 54 -> 20



termsrv.dll (Windows SP3 5.1.2600.5512) 295,936  bytes
Offsets: hexadec.

22A17: 74 -> 75
22A69: 7F -> 90
22A6A: 16 -> 90

Как в java проверить, что строка содержит только английские буквы и цифры

 Для этого удобно использовать регулярные выражения.

private static Pattern pattern0_9__a_z__A_Z =
            Pattern.compile("[\\w\\u005F\\u002E]+", Pattern.UNICODE_CASE);  //“\u002E” и “\u005F” - это символы
    // точки и подчеркивания соответсвенно
public static boolean haveOnly0_9__a_z__A_Z(String str) {
        Matcher m = pattern0_9__a_z__A_Z.matcher(str);
        if (m.matches()) {
            return true;
        } else {
            return false;
        }
    }

Как создать папку на java

Для создания папки проще всего воспользоваться командами mkdir или mkdirs
File myPath = new File("/tmp/a/b");
myPath.mkdir();  
myPath.mkdirs();

mkdir() выбросит исключение, если каталога /tmp/a нет в файловой системе, а mkdirs() создаст и /tmp/, и /tmp/a если их нет.

Несложный класс для шифрования и дешифрования строки на Java c сохраняемым в программе ключом

С помощью нижеприведенного класса можно легко зашифровать некоторую строку (например пароль) с использование алгоритма DES, и затем при желании расшифровать её. При этом секретный ключ сохранен в теле класса, так что строку можно будет расшифровать даже после перезапуска программы.

// Файл SecuritySettings.java

package security;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

/**
 *
 * @author Cloud
 */


public final class SecuritySettings {

    private final static class MySecretKey implements SecretKey {

        private byte[] key = new byte[]{1, 2, 3, 4, 5, 6, 7, 8}; // ключ
      // не должен иметь длину более 8 байт, для безопасного шифрования его
      // необходимо изменить 

        public String getAlgorithm() {
            return "DES";
        }

        public String getFormat() {
            return "RAW";
        }

        public byte[] getEncoded() {
            return key;
        }
    }

    private static SecretKey key;

    private static Cipher ecipher;
    private static Cipher dcipher;

    static {
        try {
            key = new MySecretKey();
            ecipher = Cipher.getInstance("DES");
            dcipher = Cipher.getInstance("DES");
            ecipher.init(Cipher.ENCRYPT_MODE, key);
            dcipher.init(Cipher.DECRYPT_MODE, key);
        } catch (InvalidKeyException ex) {
            Logger.getLogger(SecuritySettings.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(SecuritySettings.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NoSuchPaddingException ex) {
            Logger.getLogger(SecuritySettings.class.getName()).log(Level.SEVERE, null, ex);
        }
    }


    /**
     * Функция шифрования
     * @param str строка открытого текста
     * @return зашифрованная строка в формате Base64
     */
    public static String encrypt(String str) {
        try {
            byte[] utf8 = str.getBytes("UTF8");
            byte[] enc = ecipher.doFinal(utf8);
            return new sun.misc.BASE64Encoder().encode(enc);
        } catch (IllegalBlockSizeException ex) {
            Logger.getLogger(SecuritySettings.class.getName()).log(Level.SEVERE, null, ex);
        } catch (BadPaddingException ex) {
            Logger.getLogger(SecuritySettings.class.getName()).log(Level.SEVERE, null, ex);
        } catch (UnsupportedEncodingException ex) {
            Logger.getLogger(SecuritySettings.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    /**
     * Функция расшифрования
     * @param str зашифрованная строка в формате Base64
     * @return расшифрованная строка
     */
    public static String decrypt(String str)  {
        try {
            byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str);
            byte[] utf8 = dcipher.doFinal(dec);
            return new String(utf8, "UTF8");
        } catch (IllegalBlockSizeException ex) {
            Logger.getLogger(SecuritySettings.class.getName()).log(Level.SEVERE, null, ex);
        } catch (BadPaddingException ex) {
            Logger.getLogger(SecuritySettings.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(SecuritySettings.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
}


UPD 06.02.13
Выкладываю обновленную версию класса. В новой версии используется сторонняя билиотека Apache Codec http://commons.apache.org/codec/, также методы класса сделаны нестатическими, благодаря чему стало возможным с данным классом создавать несколько шифрователей с разными ключами или алгоритмами в одном приложении и динамически менять ключ шифрования. Минимальная версия jdk - 1.7, однако после внесения небольших изменений может использоваться и на более ранних версиях java.

// Файл StringCrypter.java
package rva.common.util;

import java.io.IOException;
import org.apache.commons.codec.binary.Base64;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

/**
 * Класс для шифрования и дешифрования строк
 * Использует библиотеку Apache Codec http://commons.apache.org/codec/
 * @author Рудницкий Валентин
 */
public class StringCrypter {

    /**
     * Упрощенный конструктор. Создает StringCrypter с ключом DESSecretKey со значением по умолчанию (не рекомендуется)
     */
    public StringCrypter() {
        this(new byte[]{1, 2, 3, 4, 5, 6, 7, 8});
    }
    
    /**
     * Упрощенный конструктор. Создает StringCrypter с ключом 
     * DESSecretKey (алгоритм шифрования DES) со значением key. 
     * Ключ key должен иметь длину 8 байт
     */
    public StringCrypter(byte[] key) {
        try {
            updateSecretKey(new DESSecretKey(key));
        } catch (InvalidKeyException | NoSuchAlgorithmException | NoSuchPaddingException ex) {
            throw new IllegalArgumentException(ex.getMessage());
        }
    }

    public StringCrypter(SecretKey key) throws NoSuchPaddingException,
            NoSuchAlgorithmException,
            InvalidKeyException {
        updateSecretKey(key);
    }

    private void updateSecretKey(SecretKey key) throws NoSuchPaddingException,
            NoSuchAlgorithmException,
            InvalidKeyException {
        ecipher = Cipher.getInstance(key.getAlgorithm());
        dcipher = Cipher.getInstance(key.getAlgorithm());
        ecipher.init(Cipher.ENCRYPT_MODE, key);
        dcipher.init(Cipher.DECRYPT_MODE, key);
    }

    public static class DESSecretKey implements SecretKey {

        private final byte[] key;

        /**
         * ключ должен иметь длину 8 байт
         */
        public DESSecretKey(byte[] key) {
            this.key = key;
        }

        @Override
        public String getAlgorithm() {
            return "DES";
        }

        @Override
        public String getFormat() {
            return "RAW";
        }

        @Override
        public byte[] getEncoded() {
            return key;
        }
    }

    private Cipher ecipher;
    private Cipher dcipher;

    /**
     * Функция шифрования
     *
     * @param str строка открытого текста
     * @return зашифрованная строка в формате Base64
     */
    public String encrypt(String str) {
        try {
            byte[] utf8 = str.getBytes("UTF8");
            byte[] enc = ecipher.doFinal(utf8);
            return Base64.encodeBase64String(enc);
        } catch (IllegalBlockSizeException | BadPaddingException | UnsupportedEncodingException ex) {
            Logger.getLogger(StringCrypter.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    /**
     * Функция дешифрования
     *
     * @param str зашифрованная строка в формате Base64
     * @return расшифрованная строка
     */
    public String decrypt(String str) {
        try {
            byte[] dec = Base64.decodeBase64(str);
            byte[] utf8 = dcipher.doFinal(dec);
            return new String(utf8, "UTF8");
        } catch (IllegalBlockSizeException | BadPaddingException | IOException ex) {
            Logger.getLogger(StringCrypter.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
}


Пример использования нового класса

// создаем экземпляр класса StringCrypter с ключем шифрования
  StringCrypter crypter=new StringCrypter(new byte[]{1,4,5,6,8,9,7,8});
  String testStr = "forCryptString";
// шифрование
  String encBase64Str = crypter.encrypt(testStr);

// дешифрование
  String decryptedStr = crypter.decrypt(encBase64Str);
        

Сериализация в Java

Несколько основных моментов насчет сериализации.
Простейший пример сериализации и десериализации объекта класса в файл:
import java.io.Serializable; 
class TestSerial implements Serializable {
private static final long serialVersionUID = 565645645688l;
private byte field1 = 100;
private String field2 = "field2";
public byte getField1() {
return field1;
}

public String getField2() {
return field2;
}
//Реализация алгоритма сериализации
public static void serialize() throws IOException {
FileOutputStream fos = new FileOutputStream("temp.out");
ObjectOutputStream oos = new ObjectOutputStream(fos);
TestSerial ts = new TestSerial();
oos.writeObject(ts);
oos.flush();
oos.close();
}

//Код, приведённый в методе serialize сериализует состояние экземпляра класса TestSerial 
//в файл temp.out. Для воссоздания объекта, нужно произвести 
//десериализацию, как показано в методе deserialize.

//Воссоздание сериализованного объекта
public static void deserialize() throws IOException {
FileInputStream fis = new FileInputStream("temp.out");
ObjectInputStream oin = new ObjectInputStream(fis);


TestSerial ts = (TestSerial) oin.readObject();
System.out.println("field1="+ts.getField1());
System.out.println("field2="+ts.getField2());
}
}

Модификаторы полей
 Существует такой модификатор поля как transient. Он означает, что это поле не должно быть сериализовано. При десериализации объекта класса такому полю присваивается значение null.
  При сериализации поля, имеющие модификатор static, не сериализуются. Соответственно, после десериализации это поле значения не меняет.
 Поля с модификатором final сериализуются как и обычные.

SerialVersionUID
 Еще один очень важный момент. При стандартной сериализации учитывается порядок объявления полей в классе. Потому, при изменении порядка десериализация пройдет не так как положено. Чтобы этого избежать, добавлен следующий механизм. В каждый класс, реализующий интерфейс Serializable, на стадии компиляции добавляется еще одно поле – private static final long serialVersionUID. Это поле содержит уникальный идентификатор версии сериализованного класса. Оно вычисляется по содержимому класса – полям, их порядку объявления, методам, их порядку объявления. Соответственно, при любом изменении в классе это поле поменяет свое значение, и при загрузке, если значение поля изменилось в текущем классе - будет выдана ошибка.
Есть, однако, способ эту проверку если обойти. Это может оказаться полезным, если набор полей класса и их порядок уже определен, а методы класса могут меняться. В этом случае сериализации ничего не угрожает, однако стандартный механизм не даст десериализовать данные с использованием байткода измененого класса. Но, как я уже сказал, его можно обмануть. А именно – вручную в классе определить поле private static final long serialVersionUID. Значение его для этого класса можно получить, использовав утилиту serialver, входящую в поставку SDK. После такого определения значение поля будет фиксировано, следовательно, десериализация всегда будет разрешена.
Более того, в версии 5.0 в документации появилось приблизительно следующее: крайне рекомендуется всем сериализуемым классам декларировать это поле в явном виде, ибо вычисление по умолчанию очень чувствительно к деталям структуры класса, которые могут различаться в зависимости от реализации компилятора, и вызывать таким образом неожиданные InvalidClassException при десериализации. Объявлять это поле лучше как private, т.к. оно относится исключительно к классу, в котором объявляется. Хотя в спецификации модификатор не оговорен.

Кроме сериализации путем имплементирования класса Serializable, существует ещё один более "продвинутый" способ сериализации - путем имплелементирования класса Externalizable.

Подсветка синтаксиса в блоге на Blogger.com

Здесь описан способ, по которому вы можете добавить подсветку кода в Blogger (сайт автора).


Для этого надо:
Залогиниться в аккаунт вашего блога, выбрать вкладку "Дизайн" ("Layout"), а затем вкладку "Изменить HTML" ("Edit HTML").
Кликнуть по ссылке "Загрузить весь шаблон" ("Download Full Template"), чтобы сохранить резервную копию шаблона (файл xml).
Открыть файл в редакторе и найти закрывающий тег </head>. После тега добавьте следующее:
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/>
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'/>
<!-- add brushes here -->
<script type='text/javascript'>
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.all();
</script>
После комментария "add brushes here" добавьте языки, которые вы планируете использовать. Для примера я использую подстветку для Javascript, Bash, Java, XML/HTML,:

<!-- add brushes here -->
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/>
Полный список поддерживаемых подсветок синтаксиса можно посмотреть здесь.

Сохраните ваш измененный шаблон, и загрузите его в Blogger (опять "Дизайн" ("Layout") -> "Изменить HTML" ("Edit HTML")).
Теперь вы можете добавить подсветку синтаксиса в ваш блог. Обрамите свой код тегом <pre> и определите стиль. Для примера вот так указываем подсветку блока с кодом Java:
<pre class="brush:java">
public class SomeClass {
  public final static String str = "someString";
}
</pre>

Cтоит отметить, что "Просмотр" Blogger'a не показывает форматирование. Вам нужно опубликовать сообщение, чтобы увидеть результат.

четверг, 3 февраля 2011 г.

Онлайн редактор регулярных выражений для java

 Наткнулся в интернете на очень удобную програмку для отладки регулярных выражений

Сайт - http://myregexp.com/

Заправка картриджа Xerox 3140

Инструкция по заправке картриджа картриджа Xerox 108R00908 (1500 копий), картриджа Xerox 108R00909 (2500 копий).

Картридж Xerox 108R00908 (1500 копий), картридж Xerox 108R00909 подходят к принтерам Xerox Phaser 3140, Xerox Phaser 3155, Xerox Phaser 3160. Возможность заправлять данный картридж появляется после перепрошивки принтера или замены или перепрошивки чипа на картридже.

 Стандартная заправка на 2500 листов - примерно 90-110 грамм тонера.

Для заправки картриджа понадобится несколько вещей, а именно:

1) Нож (лучше строительный, или скальпель) для срезания пластиковых заклепок.

2) Крестовая отвертка.

3) Плоская отвертка.

4) Пару тряпок, или безворсовые салфетки.

5) Тонер для Samsung 1210/1710 или Xerox P8E (идеально подходит Fuji или ATM).

Начали!


1. Кладем картридж одним торцом вниз, другим вверх, как показано на рисунке 1, и срезаем заклепки ножом, их там три.

2. Тоже самое проделываем с другой стороны, там четыре заклепки.
3. После того как срезали заклепки с боковых крышек картриджа, кладем его на стол, и плоской отверткой поддеваем две верхние защелки.
4. Снимаем боковые крышки.



 

5. Вытаскиваем шток фотовала.

6. Вытаскиваем верхнюю шторку, которая расположена над фотовалом.
 7. Разъединяем картридж на две половинки.


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



9. Снимам ракель, для того, что бы вычистить бункер отработки тонера.

10. Тщательно вычищаем бункер от отработанного тонера (лучше это сделать при помощи пылесоса).

 11.После того, как поставили ракель на место, вставляем бушинги ролика заряда (коротрона) на место, они держатся на маленьких защелках.
 12. Вставляем ролик на свое место в пазы бушингов, до щелчков.
Одна половина картриджа готова.
13. Далее берем вторую половину корпуса картриджа и очень аккуратно снимаем металлическое дозирующее лезвие, для того, что бы почистить запекшийся тонер на его кромке. В картриджах Samsung и Xerox это самый важный момент в заправке и чистке, так как от этого зависит качество печати.
14. Чистим запекшийся тонер. Иногда, если тонер очень сильно запекся, то просто протереть тряпкой или безворсовой салфеткой не достаточно, в этом случае хорошо поможет какая нибудь металлическая деталь, например обычный щуп. Очищать нужно легкими движениями вдоль всей кромки под разными углами, главное, не погнуть и не повредить лезвие!
 15. После того, как почистили и поставили на место дозирующее лезвие, Откупориваем засыпную горловину (она находится сбоку). Вычищаем при помощи пылесоса старый тонер из бункера, если Ваш картридж Не разу не вскрывался до Вас, и Вы используете выше указанные тонеры, то можно обойтись и без тщательной чистки, так как данные тонеры очень хорошо ложатся на оригинальный тонер, в том случае, если Ваш картридж не "первопроходец" и Вы не знаете, кто и что туда до Вас сыпал, то все таки будет не лишним хорошо почистить бункер.





16. Засыпаем тонер.




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

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


Обращаем Ваше внимание, что данная инструкция является открытой информацией, а не руководством к действию (заправке картриджа).
Автор снимает с себя всю ответственность за любую порчу или ущерб как материальный, так и моральный, возникший вследствие самостоятельной заправки картриджа. Если Вы согласны с данным заявлением, можете приступать к самостоятельной заправке картриджа. Удачи! И помните вдыхание тонера вредно для здоровья.
 

Как сбросить счетчик отпечатаных страниц в Xerox Phaser 3140/Samsung ML-1910/1915

Если версия прошивки менее 73, это сделать совсем просто. Достаточно лишь заклеить крайний контакт чипа картриджа маркированный VCC. Но следует заметить, что этот фокус работает с версией 73 50/50. Это связано с тем, что существует две версии чипов. Если при прошивке 73 заклейка не помогла, то смело удаляйте с чипа элементы С4, С5 и R3. Именно из-за наличия этих элементов, чип упрямится блокироваться. Ну и раз уж вы вынули чип, то можно аккуратно перерезать дорожку на контакт VCC.
При этом в тестовой распечатке будет отсутствовать информация о картридже. А сам он нормально работать, не напоминая об отсутствии тонера вообще.

Однако в 77 версии эта возможность была исправлена. Заклейка контактов в этом случае уже не даст возможности заправлять картридж без всяких хлопот. Для Самсунга в этом случае есть только один шанс - это перепрошивка фиксеной прошивкой. Для Xerox есть еще и возможность покупать чипы. Это связано с тем, что на программном уровне эти аппараты имеют некоторое различие. Во-первых прошивки несмотря на одинаковые версии, отличие в прошивках все-таки есть. На первый взгляд они отличаются идентификаторами модели. Именно по этому подключенный к компьютеру Xerox 3140 распознается именно как 3140, а Samsung 1910 как Samsung соответственно. Но это не единственное отличие. Аппараты различаются чипами. Это делает возможным производство чипов для Xerox но не позволяет использовать например картридж Samsung в Xerox и на оборот. Конечно это при условии наличия в них чипов. А об этом ниже.

На сегодняшний день есть решение вопроса 77 версии прошивки. Это пофиксеная 77 прошивка. искать её на данный момент вам придется самим. Действа и особенности прошивки в принципе идентичны действиям при прошивке Samsung ML-1640. Из всего описанного выше не трудно сделать вывод: и Samsun и Xerox можно прошить прошивками или от одного или от другого аппарата. Если быть точнее, то Xerox приходится перепрошивать в Samsung. Хотя вероятно уже где-то существует и прошивка Xerox.

Внимание: вход в принудительный режим загрузки не обязателен, просто запускайте процесс прошивки и всё. Если прошивка не происходит, попробуйте с принудительным режимом. Весь процесс аналогичен ML-1640.

После перепрошивки, если вы перепрошивали Xerox 3140, при подключении к компьютеру система возвестит о появлении Samsung ML-1910... Здесь есть два решения данной проблемы. Делаем следующее. Первый вариант, подсунуть старый драйвер от Xerox. В открывшемся окне мастера отказываетесь от поиска драйвера в интернете, далее откажитесь от автоматического поиска драйвера, кликните "Я сам выберу нужный драйвер". Выбираете "Xerox" а потом и 3140. Драйвер установится и в системе появится ваш новый принтер под видом всё того же Xerox. Но есть способ и проще. скачивайте драйвер от Samsung ML-1910 и установите. Принтер заработает под видом Samsung.

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

суббота, 8 января 2011 г.

Как вставить сценарий JavaScript в HTML-страницу

Образец кода:

<html>

<head>
<script type="text/javascript">
...
</script>
</head>

<body>
<script type="text/javascript">
...
</script>
</body>

</html>

Простейший способ защиты компьютера от вирусов в Windows XP

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

Ниже написано немного теории о том, почему повышается безопасность работы за компьютером, при использовании способа защиты, приведенного в данной статье; если же вам лень это читать, можете просто скачать по ссылке файлик All_Without_CD-ROM_Off.reg и запустить его, при этом подтвердив внесение изменений в реестр. Плохого ничего не случиться, а вот безопасность своего компьютера вы существенно повысите.
Файлик предназначен для Windows XP, на других версиях Windows скорее всего просто не произойдет никаких изменений.


При подключении любого носителя информации к компьютеру на Windows XP происходит сканирование этого носителя на предмет наличия файла автозапуска (autorun.inf), и, в случае обнаружения такого файла - чтение его и запуск указанных там файлов. Для карт памяти и флешек - в 99% случаев этими файлами являются вирусы.
Чтобы защититься от вирусов с флешек можно конечно установить какую нибудь "мегапрограмму", типа USB Guard. Однако такие программы постоянно висят в оперативной памяти и "кушают" ресурсы компьютера. Есть способ защиты от вирусов гораздо более простой, без расходования ресурсов компьютера, которых и так постоянно не хватает - просто отключить автозапуск с флешек и обнаружение файла autorun.inf. После этого файл autorun.inf при вставке флешки не будет считываться и вирусы не будут запускаться на компьютере.

Сделать это можно скачав и запустив файл реестра All_Without_CD-ROM_Off.reg (как следует из названия отключает автозапуск со всех носителей, кроме CD-ROM), либо же вручную изменив ветви реестра следующим образом

;Отключение автозапуска со всех типов устройств, кроме CD-ROM:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer]
"NoDriveTypeAutoRun"=dword:000000DD

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf]
@="@SYS:DoesNotExist"

В параметр NoDriveTypeAutoRun можно вписать по желанию одно из следующих значений:
0x1 - отключить автозапуск на приводах неизвестных типов
0x4 - отключить автозапуск сьемных устройств
0x8 - отключить автозапуск НЕсьемных устройств
0x10 - отключить автозапуск сетевых дисков
0x40 - отключить автозапуск RAM-дисков
0x80 - отключить автозапуск на приводах неизвестных типов

пятница, 7 января 2011 г.

Защита документов Microsoft Office Excel 2007 от просмотра

На днях возникла необходимость защитить документ MS Excel 2007 паролем. Оказалось, что то, как это делается - не так уж и очевидно.
На просторах инета нашел статью, в которой подробно описано решение этой проблемы.

Защита файлов от открытия
Пароль для защиты файла от несанкционированного открытия устанавливают при сохранении файла.
1.Нажмите кнопку Office, а затем выберите команду Сохранить как.
2.В окне Сохранение документа нажмите кнопку Сервис выберите команду Общие параметры.
3.В окне Параметры сохранения (рис. 13.17) введите пароль в поле Пароль для открытия и нажмите кнопку ОК.

4.В окне подтверждения пароля введите его еще раз.
5.В окне Сохранение документа нажмите кнопку Сохранить. Если файл сохраняется под существующим именем в исходную папку, подтвердите замену существующего файла.

четверг, 6 января 2011 г.

Скрипт xStarter для переподключения к vpn при разрыве связи

Начну с того, что при разрыве vpn соединения в журнал событий (панель управление -> администрирование -> просмотр событий) в ветку Система (System) записывается сообщение примерно следующего содержания:

Тип события: Уведомление
Источник события: RemoteAccess
Категория события: Отсутствует
Код события: 20159
Дата: 06.01.2011
Время: 00:00:00
Пользователь: Н/Д
Компьютер: XXX
Описание:
Подключение пользователя "Пользователь" к "VPN подключение", выполненное с помощью устройства "VPN5-1", было прервано.

Этим то мы и воспользуемся при создании скрипта.
Итак, в xStarter командой new Task создаем задачу со следующим содержанием


В графе message contain вписываем текст сообщения из журнала событий Windows.
Далее идем на вкладку Actions, добавляем новое действие

Жмем применить.

Чтобы комп подключался к vpn до тех пор пока не подключится (пытался восстановить соединение), в свойствах vpn соединения число повторений набора номера можно установить равным, например, 999 (думаю этого числа должно хватить ;) )

среда, 5 января 2011 г.

Как избавиться от ctfmon.exe?

Предисловие: Если вы не знаете для чего служит ctfmon.exe и зачем его может понадобится удалять - то лучше просто ничего не трогайте ,и ,вообще, не читайте эту запись :)

Как избавиться от ctfmon.exe написано тут, однако майкрософтовцы дали инструкцию только для office XP и 2003 :( .
В office 2007 компоненты "Альтернативный ввод пользователя" нету, поэтому пункт 1 просто пропускаем. Вместо этого дополнительно к описанному в статье удаляем ctfmon.exe из автозагрузки. И по поводу языков - удалять все кроме английского необязательно, я, например, у себя русский не трогал, и несмотря на это после перезагрузки ctfmon.exe не запустился.

воскресенье, 2 января 2011 г.

Установка Redmine на Windows XP

Следуем инструкциям на сайте http://www.redmine.org/wiki/redmine/RedmineInstall

Редмайн устанавливаем используя свн. В Tortoise SVN выбираем export, в качестве источника - http://redmine.rubyforge.org/svn/branches/1.1-stable (или другую stable версию), в качестве приемной - папку с будущим редмайном

далее устанавливаем moongrel -  однопоточный HTTP сервер для Ruby Rails.
gem install mongrel
gem install win32-service --platform=mswin32
gem install mongrel_service --platform=mswin32

Устанавливаем сервис redmine

$ mongrel_rails service::install -N myapp -c c:\my\path\to\myapp -p 4000 -e production
$ mongrel_rails service::start -N myapp

http://localhost:4000 в броузере запустит приложение

Для остановки приложения :
$ mongrel_rails service::stop -N myapp

для того, что бы приложение стартовало с запуском windows выполняем:
$ sc config myapp start= auto

Далее связываем репозиторий SVN с Redmine. У Redmine есть следующая особенность: если несколько проектов используют один репозиторий, то к каждому проекту его надо подцеплять отдельно.
Заходим в настройки проекта -> хранилище, добавляем и настраиваем хранилище.
Если при попытке доступа к хранилищу выдает ошибку подобню этой
Ошибка доступа к хранилищу: No such file or directory - svn list --xml "https://localhost/svn/"@HEAD --username xxxx --password xxxx --no-auth-cache --non-interactive
 надо прописать путь к папке содержащей бинарные файлы svn сервера в переменной PATH

 У Рэдмайн есть отличная возможность - связывание ревизий в системе контроля версий и своих записей в базе. Т.е. если Василий Пупкин пофиксил в SVN ревизии 9874 баги #125 и #145, то в этих записях появятся ссылки на эту самую ревизию с указанием комментария из ревизии. Соответственно, можно пойти по ссылке и посмотреть внесенную дельту.
Для того, чтобы эта схема работала, надо чтобы в комментарии к ревизии было ключевое слово и номер записи, например "Just made minor fix #124.", где fix - ключевое слово, а #124 - это привязка к записи. Списко ключевых слов редактируется вот тут:

http://local_redmine/settings/edit?tab=repositories

секция Referencing keywords. Также, там же есть возможность привязывать ревизии к определенным состояниям записей.

Ну и ещё - по умолчанию о новых ревизиях Рэдмайн узнает (и связывает с задачами) только когда кто-то заходит во вкладку "Хранилище" (Repository) Как автоматизировать процесс связывания (несколько вариантов) подробно описано тут, лично я добавил в post commits hooks svn'а строку :
ruby c:/my/path/to/redmine/script/runner "Repository.fetch_changesets" -e production

Для настройки кодировок в хранилище - заходим в redmine и в разделе settings\repository указываем через запятую все возможные кодировки, например utf-8, windows-1251

Инструкции по настройке почтового сервера читаем тут

суббота, 1 января 2011 г.

Создание собственного SVN сервера

Легко и просто создать свой свн сервер и репозиторий можно с использованием программы VisualSVN Server.
 В настройках конфиграции указывается путь к папке с репозиториями. Сам  репозиторий можно либо создать (используя команду контексного меню, при щелчке в программе на папке с репозиториями), либо, если уже есть готовый, просто скопировать его папку в папку с репозиториями.
 Для каждого репозитория можно задавать свои права доступа для различных пользователей. Пользователи создаются щелчком правой клавишей по ветке Users в программе.

Копирование и удаление файлов через ssh

 Работать с файлами через командную консоль ssh (например, с использованием клиента putty) достаточно сложно и неудобно.
Очень сильно упростить задачи копирования с сервера и на сервер файлов можно воспользовавшись бесплатным графическим клиентом WinSCP. Он имеет  возможность доступа к файлам с интерфейсом напоминающим тотал коммандер, и может быть легко освоен даже пользователями не знакомыми с командами ssh.

Первое сообщение

 Это первое сообщение блога. В нем я бы хотел написать про цели создания данного блога, тематику и описать категории людей, которым может быть интересна информация размещенная здесь.
 Этот блог создан в большей степени для самого себя, как хранилище сведений, ссылок, мыслей, решений, которые могут оказаться полезны мне в будущем. Также я не исключаю, что эта информация, может быть полезной и другим людям, главным образом именно поэтому блог был сделан публичным.
 Записи, которые я планирую сюда добавлять, в основном будут связаны с программированием (на Java и C#), сисадминистрированием, просто настройкой Windows для более удобного использования.
 Информация из этого блога может оказаться полезна ITшникам, а также продвинутым пользователям, которым интересна компьютерная тематика.

Ярлыки

java (31) оптимизация (7) CPanel (5) svn (5) windows xp (5) ошибка (5) свой сервер (5) файлы и папки (5) gui (4) регулярные выражения (4) jacoco (3) redmine (3) windows (3) автоматизация (3) защита данных (3) резервное копирование (3) сервер (3) JavaScript (2) Oracle SQL (2) adsl модем (2) apache maven (2) apache tomcat (2) coverage (2) dropbox (2) excel (2) firewall (2) netbeans (2) office 2007 (2) samsung (2) system tray (системный трей) (2) xerox (2) вирусы (2) принтер (2) сериализация (2) удаленный рабочий стол (2) HTML (1) JFileChooser (1) MySQL (1) Nokia (1) Ovi (1) P660R-T1 (1) WakeOnLan (1) blogger.com (1) ctfmon.exe (1) email (1) flash память (1) ftp (1) integration testing (1) ip (1) jQuery (1) jvisualWm (1) log4j (1) look and feel (1) myBatis (1) php (1) serialVersionUID (1) skype (1) smtp (1) ssh (1) swing (1) torrents (1) unit-testing (1) unix (1) vpn (1) windows 7 (1) xStarter (1) zip (1) безопасность (1) вход в систему (1) дизайн (1) документация (1) заправка (1) интернет (1) логирование (1) мышь (1) патч (1) перенос (1) печать (1) плагины (1) почтовые сообщения (1) программирование (1) процессы (1) прошивка (1) сеть (1) сеть. ошибка (1) скрытые файлы (1) списки (1) фильтрация (1) фокус (1) часовые пояса (1) шифрование (1) экран (1)