Поиск по этому блогу

четверг, 4 июня 2015 г.

Пакетное изменение размеров и типа изображений в Linux

Понадобилось уменьшить размер изображений для сайта
Для этого решил уменьшить разрешение и сменить тип с png на jpg

Переходим в папку с изображениями

Пробую
$ for file in *.png; do convert $file -resize 900 -quality 75 resized-$file.jpg; done

По параметрам:

-resize 900 - ужимаем до 900пх по ширине, высота вычисляется автоматом
-quality 75 - качество сжатия jpg


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

Убираем пробелы

$ for i in *.png; do k=`echo ${i}|sed s/' '/'_'/g`;mv "${i}" ${k};done 

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



Инфу почерпнул здесь:
тыц и тыц 




четверг, 13 сентября 2012 г.

MySQL Workbench и fetching

Иногда пользуюсь бесплатным MySQL клиентом Workbench от разработчиков MySQL. Клиент, точнее клиент, админка сервера, построитель диаграмм по готовой базе или просто
диаграмм, отличный. Но глючит иногда довольно весело.
Вот сегодня отказался работать с одним из серверов - подключается, а таблицы не показывает. Fetching крутится и все. Причем другие клиенты работают с сервером нормально.
Решение нашлось неожиданное, пусть и в ожидаемом месте, в багтреккере MySQL http://bugs.mysql.com/bug.php?id=55008
Оказалось, что на сервере нужно вручную запустить скрипт обновления БД, после обновления самого MySQL, хотя сервер и под убунту и все обновления делались автоматически.

Спасительная команда в терминале:
# sudo  mysql_upgrade -u root -p




воскресенье, 9 сентября 2012 г.

Lazarus Ограничение длины вводимой строки

Сегодня моя логика разбилась в дребезги....

Понадобилось сделать ограничение на длину вводимой строки в TEdit. До этого было подобное в TStringGrid и всё отлично работало. Принцип работы такой создаем глобальную переменную, в неё, по событию изменения текста в объекте постоянно сохраняем текст из объекта, а когда длина текста превышает указанную, то нашему полю ввода присваиваем старое значение из глобальной переменной.

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



Собственно код:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, LCLProc;
type
  { TForm1 }
  TForm1 = class(TForm)
    edit: TEdit;
    procedure editChange(Sender: TObject);
  private
    { private declarations }
    fillAllLastVal:string;
  public
    { public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.editChange(Sender: TObject);
  //  ограничиваем количество символов
var
   value: string;
begin
  value := edit.text;
  if utf8length(Value) < 11 then
     begin
          fillAllLastVal:= edit.text;
      end
  else
     begin
       //  value:=fillAllLastVal;
         edit.text:=fillAllLastVal;
     end;
end;
end.   


Но этот пост заставило написать совсем другое, а именно, закомментированная строка         //  value:=fillAllLastVal;  Вставив которую(конечно раскомментировав), после кучи экспериментов, получил рабочий проект. ЭТО ПРОСТО ВЫНОС МОЗГА :) Почему так, понять не могу, а разбираться дальше времени нет.

Зато дальше сделал правильный метод ограничения длинны:

procedure TForm1.editChange(Sender: TObject);
begin
  if utf8length(edit.text) > MAX_SYMBOLS then
     begin
      edit.text := UTF8Copy(edit.text,1,MAX_SYMBOLS);
     end;
end; 

 Делалось под Kubuntu 12.04, Lazarus 1.0, fpc 2.60