Июн 032022
 

Установить kpartx:
sudo apt-get update && sudo apt-get install kpartx

Примонтировать:
kpartx -av /path/to/the/image.img

После чего получим приблизтельно такие строи. Где loop5p1, loop5p2, loop5p5 есть диски которые содержаться в образе.

add map loop5p1 (253:0): 0 163577856 linear 7:5 2048
add map loop5p2 (253:1): 0 2 linear 7:5 163581950
add map loop5p5 (253:2): 0 4188160 linear 7:5 163581952

Монтируем образы в папки:

mount /dev/mapper/loop5p1 /mnt/myimage5p1
mount /dev/mapper/loop5p2 /mnt/myimage5p2
mount /dev/mapper/loop5p4 /mnt/myimage5p4

Отмонтировать диски:

umount /mnt/myimage5p1

umount /mnt/myimage5p2

umount /mnt/myimage5p4
Отмонтируем образ:

kpartx -dv /path/to/the/image.img

Июн 122019
 

Debian

vi /etc/network/interfaces
iface eth0 inet static
        address ip_addr
        netmask 255.255.255.255
        gateway gw_ip_addr
        pointopoint gw_ip_addr

CentOS

/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=mac_address
ONBOOT=yes
BOOTPROTO=static
SCOPE="peer gw_ip_addr"
IPADDR=ip_addr
/etc/sysconfig/network-scripts/route-eth0
ADDRESS0=0.0.0.0
NETMASK0=0.0.0.0
GATEWAY0=
 Posted by at 01:39
Апр 092017
 

В PHP CURL POST руководство, Мы будем объяснять как использовать HTTP GET / POST запросы с PHP CURL library.

В данной статье ниже мы приводим примеры работы с данным протоколом

1) Отправить HTTP GET Запрос с CURL

2) Отправить HTTP POST Запрос с CURL

3) Отправить Random User-Agent в Запросе

4) Обработка перенаправление redirects ( HTTP 301, 302 )

5) Ошибки обработки ( Handle Errors ).

Почему мы используем PHP CURL ?

Отправить HTTP GET запрос, простой способ использовать метод file_get_contents().

file_get_contents('http://it.w-develop.com')

Но для использования POST запроса и использовать Обработчик ошибок не так просто в месте с командой file_get_contents().

Отправить HTTP запрос очень просто с PHP CURL. Вам надо выполнить четыре шага для отправки запроса

Шаг 1). Инициализация CURL сессии
Шаг 2). Заполняем options для CURL сессии
curl_setopt( $ch, CURLOPT_URL, "http://it.w-develop.com" );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
//curl_setopt( $ch, CURLOPT_HEADER, true ); // Если вы хотите использовать заголовки

CURLOPT_URL -> URL для загружки
CURLOPT_HEADER -> добавляем header/not
CURLOPT_RETURNTRANSFER -> если true, информация вернется как строка, а не выводит ее.

Полный список опций, смотри в документации PHP Documentation.

Шаг 3). Загружаем CURL сессию.
$output=curl_exec($ch);
Шаг 4). Зарываем сессию
curl_close($ch);
Note: Вы можете проверить, включен CURL enabled/not со следующим кодом.
if( is_callable( 'curl_init' ) ){
   echo "Enabled";
} else {
   echo "Not enabled";
}

1.PHP CURL GET Пример
You can use the below code to send GET request.

function httpGet( $url ) {

    $ch = curl_init();  
 
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
//  curl_setopt( $ch, CURLOPT_HEADER, false ); 
 
    $output=curl_exec( $ch );
 
    curl_close( $ch );

    return $output;

}
 
echo httpGet("http://it.w-develop.com");

2.PHP CURL POST Пример
You can use the below code to submit form using PHP CURL.

function httpPost( $url, $params ) {

   $postData = '';
   //create name value pairs seperated by &
   foreach( $params as $k => $v ) {
      $postData .= $k . '='.$v.'&';
   }
   $postData = rtrim( $postData, '&' );
 
   $ch = curl_init();
 
   curl_setopt( $ch, CURLOPT_URL,$url );
   curl_setopt( $ch, CURLOPT_RETURNTRANSFER,true );
   curl_setopt( $ch, CURLOPT_HEADER, false );
   curl_setopt( $ch, CURLOPT_POST, count($postData ) );
   curl_setopt( $ch, CURLOPT_POSTFIELDS, $postData );
 
   $output = curl_exec( $ch );
 
   curl_close( $ch );

   return $output;
 
}

How to use the function:

$params = array(
   "name" => "Ravishanker Kusuma",
   "age" => "32",
   "location" => "India"
);
 
echo httpPost( "http://it.w-develop.com/examples/php/curl-examples/post.php", $params );

3.SEND RANDOM USER-AGENT IN THE REQUESTS
You can use the below function to get Random User-Agent.

function getRandomUserAgent() {
    $userAgents=array(
        "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)",
        "Opera/9.20 (Windows NT 6.0; U; en)",
        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 8.50",
        "Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.02 [en]",
        "Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; fr; rv:1.7) Gecko/20040624 Firefox/0.9",
        "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/48 (like Gecko) Safari/48"       
    );
    $random = rand(0,count($userAgents)-1);
 
    return $userAgents[$random];

}

Используется CURLOPT_USERAGENT, Вы можете установить User-Agent string.

curl_setopt( $ch, CURLOPT_USERAGENT, getRandomUserAgent()) ;

4. HANDLE REDIRECTS (HTTP 301,302)
Обрабатывать URL redirects, set CURLOPT_FOLLOWLOCATION to TRUE.Максимальное количество переадресаций можно контролировать, используя CURLOPT_MAXREDIRS.

curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE);
curl_setopt($ch,CURLOPT_MAXREDIRS,2);//only 2 redirects

5. КАК ОБРАТИТЬ ОШИБКИ CURL
мы можем использовать методы curl_errno(), curl_error(), Чтобы получить последние ошибки для текущего сеанса.
curl_error( $ch ) -> returns error as string
curl_errno( $ch ) -> returns error number

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

function httpGetWithErros( $url ) {

    $ch = curl_init();  
 
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
 
    $output=curl_exec( $ch );
 
    if ( $output === false ) {

        echo "Error Number:" . curl_errno( $ch ) . "
"; echo "Error String:" . curl_error( $ch ); } curl_close($ch); return $output; }

Вывод полного списока ошибок, refer CURL errors

Мар 222016
 

Термопринтер Через COM Linux, Unix, Debian, Ubuntu, CentOS

Первоначально, надо, что бы Ваш Unix определил COM порт к которому мы подключили принтер.

Проверить можно это командой:

lsusb
ls /dev

Внимательно читаем документация к принтеру, и там должны быть похожие команды.

После пытаемся отправлять текст:

echo -ne "Проверяем как же работает текстовка\n" > /dev/ttyUSB0

Частичная обрезка:

echo -ne $'\x1B\x6D' > /dev/ttyUSB0

Полная обрезка:

echo -ne $'\x1B\x69' > /dev/ttyUSB0

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

Мар 192016
 

Hibernate: основные типы данных

Hibernate предоставляет ряд готовых решений для привязки и приведения типов данных языка программирования к типам данных SQL. Такой процесс преобразования в Hibernate основан на использовании интерфейса org.hibernate.type.Type, а точнее его конкретных реализаций.

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

Типы данных в Hibernate разделены на 3 категории: основные типы, составные типы и типы коллекций. В этой статье речь пойдет только об основных типах данных, которые используются для отображения одного поля в БД. Эти типы удовлетворяют большинству потребностей приложения, обеспечивая связь между основными типами Java и распространенными типами SQL.

Основные встроенные типы данных:

Java Class Hibernate Class (org.hibernate.type) Hibernate тип Возможный тип данных SQL¹
¹ Конечный тип зависит от производителя БД
java.lang.String StringType string VARCHAR
(или Oracle VARCHAR2)
MaterializedClob materialized_clob CLOB
TextType text LONGVARCHAR (или TEXT)
java.lang.Character
(or char primitive)
CharacterType char CHAR
java.lang.Boolean
(or boolean primitive)
BooleanType boolean BIT
NumericBooleanType numeric_boolean INTEGER
(0 = false, 1 = true)
YesNoType yes_no CHAR
(‘N’ = false, ‘Y’ = true)
TrueFalseType true_false CHAR
(‘F’ = false, ‘T’ = true)
java.lang.Byte
(or byte primitive)
ByteType byte TINYINT
java.lang.Short
(or short primitive)
ShortType short SMALLINT
java.lang.Integer
(or int primitive)
IntegerType int
integer
INTEGER
java.lang.Long
(or long primitive)
LongType long BIGINT
java.lang.Float
(or float primitive)
FloatType float FLOAT
java.lang.Double
(or double primitive)
DoubleType double DOUBLE
java.math.BigInteger BigIntegerType big_integer NUMERIC
(или Oracle NUMBER)
java.math.BigDecimal BigDecimalType big_decimal NUMERIC
(или Oracle NUMBER)
java.util.Date
java.sql.Timestamp
TimestampType timestamp TIMESTAMP
java.sql.Time TimeType time TIME
java.sql.Date DateType date DATE
java.util.Calendar CalendarType calendar TIMESTAMP
java.util.Calendar CalendarType calendar TIMESTAMP
CalendarDateType calendar_date DATE
java.util.Currency CurrencyType currency VARCHAR
(или Oracle VARCHAR2)
java.util.Locale LocaleType locale VARCHAR
(или Oracle VARCHAR2)
java.util.TimeZone TimeZoneType timezone VARCHAR
(или Oracle VARCHAR2)
java.net.URL UrlType url VARCHAR
(или Oracle VARCHAR2)
java.lang.Class ClassType class VARCHAR
(или Oracle VARCHAR2)
java.sql.Blob BlobType blob BLOB
java.sql.Clob ClobType сlob СLOB
byte[] BinaryType binary (или byte[]) VARBINARY
MaterializedBlobType materialized_blob BLOB
ImageType image LONGVARBINARY
Byte[] WrapperBinaryType wrapper-binary (или Byte[]) VARBINARY
char[] CharArrayType characters (или char[]) VARCHAR
(или Oracle VARCHAR2)
Character[] CharacterArrayType wrapper-characters (или Character[]) VARCHAR
(или Oracle VARCHAR2)
java.util.UUID UUIDBinaryType uuid-binary BINARY
UUIDCharType uuid-char CHAR (или VARCHAR для существующих колонок)
PostgresUUIDType pg-uuid PostgreSQL UUID
java.io.Serializable SerializableType serializable(или имя класса реализующего интерфейс Serializable) VARBINARY

Типы blob и clob не всегда удобны для использования в приложении, потому как эти объекты не могут быть переиспользованы за пределами транзакции. Их альтернативой могут послужить materialized_blob и materialized_clob, эти типы сразу воссоздаются как байтовый массив и строка соответственно, и доступны вне транзакции.

За исключением коллекций, все встроенные типы Hibernate поддерживают null семантику. Уникальные идентификаторы и коллекции могут быть любым из этих типов данных, за исключением binary, blob и clob.

Использование Hibernate типов

Сразу хочу сказать, что для типов данных Java указывать Hibernate типы совсем не обязательно, в этом случае Hibernate подберет и назначит их самостоятельно. Но при использовании типов данных, которые могут быть сопоставлены более чем с одним Hibernate типом, лучше задавать их явно. Например, если свойство имеет тип java.lang.String, то по умолчанию Hibernate промаппит его типом «string». Это означает, что Вы должны явно определить Hibernate тип для свойства, если хотите отобразить строку как «text» или «materialized_clob».

Для определения Hibernate типа используется атрибут type при маппинге с помощью xml файла. Атрибут type может указываться в любых элементах, таких как <id>, <property>, <discriminator>, <index>, или <element>:

<hibernate-mapping>
<class name="User" table="USER">

<id name="id" column="ID" type="long">
<generator class="native"/>
</id>

<property name="birthdate" column="BIRTHDATE" type="timestamp"/>
</class>
</hibernate-mapping>

В случае маппинга с помощью аннотаций используется аннотация

org.hibernate.annotations.Type:

@Type(type = "yes_no")
private boolean newModel;

@Type(type = "text")
private String description;

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