Monthly Archives: Ноябрь 2015

3D визуализация и дизайн

Работа со строками в Delphi

 

 
Наименование Описание
AdjustLineBreaks функция Устанавливает символы окнчания строки в стиле Windows (конец строки, перевод коретки) или в стиле Linux (только конец строки).
AnsiCompareStr функция Сравнивает строки, базирующиеся на текущей локализации Windows, с учетом регистра.
AnsiCompareText функция Сравнивает строки, базирующиеся на текущей локализации Windows, без учета регистра.
AnsiContainsStr функция Показывает является ли одна строка подстрокой другой (с учетом регистра).
AnsiContainsText функция Показывает является ли одна строка подстрокой другой (без учета регистра).
AnsiDequotedStr функция Конвертирует обкавыченную строку в строку без кавычек.
AnsiEndsStr функция Показывает является ли одна строка окончанием другой (с учетом регистра).
AnsiEndsText функция Показывает является ли одна строка окончанием другой (без учета регистра).
AnsiExtractQuotedStr функция Конвертирует обкавыченную строку в строку без кавычек. Если в строке имеются несколько пар символов кавычек, то в результат копируются символы от начала строки до второго вхождения символа кавычек.
AnsiIndexStr функция Находит индекс указанной строки (с учетом регистра) в массиве строк. Если строка не найдена, то возвращается -1.
AnsiIndexText функция Находит индекс указанной строки (без учета регистра) в массиве строк. Если строка не найдена, то возвращается -1.
AnsiLeftStr функция Возвращает подстроку заданной длины от начала строки.
AnsiLowerCase функция Возвращает строку в нижнем регистре.
AnsiMatchStr функция Показывает является ли какая либо строка из указнного массива строк частью заданной строки (с учетом регистра).
AnsiMatchText функция Показывает является ли какая либо строка из указнного массива строк частью заданной строки (без учета регистра).
AnsiMidStr функция Возвращает подстроку заданной длины от указанной позиции в строке.
AnsiPos функция Определяет позицию первого вхождения подстроки от начала строки.
AnsiQuotedStr функция Возвращает обкавыченную версию строки.
AnsiReplaceStr функция Заменяет все вхождения подстроки (с учетом регистра) заданной строкой.
AnsiReplaceText функция Заменяет все вхождения подстроки (без учета регистра) заданной строкой.
AnsiResemblesProc переменная Управляет алгоритмом, который использует функция AnsiResemblesText для определения похожести строк.
AnsiResemblesText функция Определяет, являются ли две строки похожими.
AnsiReverseString функция Возвращает реверсированную строку.
AnsiRightStr функция Возвращает подстроку заданной длины от конца строки.
AnsiSameStr функция Проверяет идентичность Ansi строк, базирующихся на текущей локализации Windows, с учетом регистра.
AnsiSameText функция Проверяет идентичность Ansi строк, базирующихся на текущей локализации Windows, без учета регистра.
AnsiStartsStr функция Показывает является ли одна строка началом другой (с учетом регистра).
AnsiStartsText функция Показывает является ли одна строка началом другой (без учета регистра).
AnsiUpperCase функция Возвращает строку в верхнем регистре.
CompareStr функция Сравнивает две строки с учетом регистра.
CompareText функция Сравнивает две строки без учета регистра.
Concat функция Объединяет две строки и более в одну.
Copy функция Возвращает подстроку из строки или часть динамического массива.
DecodeSoundExInt функция Конвертирует целочисленное представление (тип Integer) SoundEx кодирования в соответствующую фонетическую строку.
DecodeSoundExWord функция Конвертирует целочисленное представление (тип Word) SoundEx кодирования в соответствующую фонетическую строку.
Delete процедура Удаляет подстроку из строки.
DupeString функция Объединяет строку саму с собой указанное число раз.
Insert процедура Вставляет подстроку в строку с указанной позиции.
IsDelimeter функция Показывает имеется ли в строке специальный символ, соответствующий одному из символов, определенных как разделители.
LastDelimeter функция Возвращает позицию последнего специального символа, соответствующего одному из символов, определенных как разделители, в строке.
LeftBStr функция Возвращает подстроку, содержащую заданное количество байт от начала строки.
LeftStr функция Возвращает подстроку заданной длины от начала строки.
Length функция Возвращает количество символов в строке или количество элементов в массиве.
LowerCase функция Переводит ASCII строку в нижний регистр.
MidBStr функция Возвращает подстроку, содержащую заданное количество байт от указанной позиции в строке.
MidStr функция Возвращает подстроку заданной длины от указанной позиции в строке.
NullStr константа Устанавливает указатель на пустую строку.
Pos функция Определяет позицию первого вхождения подстроки от начала строки.
PosEx функция Определяет позицию первого вхождения подстроки, начиная поиск от указанного смещения относительно начала строки.
QuotedStr функция Возвращает обкавыченную версию строки.
ReverseString функция Возвращает реверсированную строку.
RightBStr функция Возвращает подстроку, содержащую заданное количество байт от конца строки.
RightStr функция Возвращает подстроку заданной длины от конца строки.
SameText функция Проверяет идентичность строк без учета регистра и не зависит от локализации Windows.
SetLength процедура Устанавливает длину строки или длину переменной динамического массива.
SetString функция Задает содержимое и длину данной строки.
SoundEx функция Конвертирует строку в ее SounEx представление.
SoundExCompare функция Сравнивает SounEx представление двух строк.
SoundExInt функция Конвертирует строку в целочисленный тип Integer, который представляет ее фонетическое значение.
SoundExProc функция Сравнивает две строки в их фонетическом представлении на длине 4 символов. Если значения совпадают, то строки считаются похожими.
SoundExSimilar функция Сравнивает две строки в их фонетическом представлении на заданной длине символов. Если значения совпадают, то строки считаются похожими.
SoundExWord функция Конвертирует строку в целочисленный тип Word, который представляет ее фонетическое значение.
Str процедура Преобразует численное выражение в строку и сохраняет ее в переменной.
StringOfChar функция Возвращает строку из указанного количества повторяющихся символов.
StringReplace функция Заменяет вхождения подстроки заданной строкой. Параметры замены (заменить все, чувствительность к регистру и т.д.) определяются дополнительно.
StuffString функция Вставляет подстроку в указанную позицию строки, заменяя имеющиеся символы.
Trim функция Удаляет из строки лидирующие и завершающие пробелы.
TrimLeft функция Удаляет из строки завершающие пробелы.
TrimRight функция Удаляет из строки лидирующие пробелы.
UpperCase функция Переводит ASCII строку в верхний регистр.
Val процедура Преобразует строку в число и сохраняет его в переменной.
WideLowerCase функция Переводит Unicode строку в нижний регистр.
WideSameStr функция Проверяет идентичность Unicode строк, базирующихся на текущей локализации Windows, с учетом регистра.
WideSameText функция Проверяет идентичность Unicode строк, базирующихся на текущей локализации Windows, без учета регистра.
WideUpperCase функция Переводит Unicode строку в верхний регистр.
WrapText функция Разбивает строку на несколько строк как только их длина достигает определенного размера.

Получение исходного кода в компоненте Chromium (Delphi)

Раньше для того, чтоб получить исходный код в компоненте Chromium хватало выполнить подобный код:

Однако, с некоторых пор свойство Source перестало работать таким способом.

Теперь, чтоб получить исходный код, необходимо выполнить такой код:

Нужно признать, что код усложнился. Не для чего разработчики внесли такие изменения… Но, факт — на лицо.

3D визуализация и интерьер

Горячик клавиши mc и mcedit

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

В мануалах и справках клавишу Ctrl обозначают как C, а M — это клавиша Alt.
Если команда пишеться через «-» это означает что они нажимаются совместно.
Если через пробел, то после нажатия первой (отпуская первую) нажимают следующую.

В главном окне mc (midnight commander)

C-O переключение на subshell и обратно
M-c сменить текущий каталог (возникает необходимость когда в командной строке уже что-то набрано)

 

В mcedit:

F3 начать выделение / закончить выделение
F5 скопировать выделенный текст
F6 переместить выделенный текст
F8 удалить выделенный текст
M-L перейти к строке с номером
M-B перейти к парной скобке (полезная вещь для программеров, и не только)
С-F скопировать выделенный блок в файл буфер
C-U отменить последнее действие
С-K удалить до конца строки от текущей позиции курсора
С-Y удалить строку
C-Z перейти к началу предыдущего слова
C-X перейти к концу следующего слова

Резервное копирование баз данных Postgresql в Linux

У нас в ресурсе уже описано много способов реализации резервного копирования информации. Продолжим данную тему. Теперь, рассмотрим резервное копирование баз данных Postgresql в операционной системе Linux.

Вот вариант резервного копирования для 3-х баз данных:

Сохранение бекапа на удаленном сервере по ssh

В условиях отсутствия локального или сетевого тома для хранения резервных копий (несколько натянутое условие, но мне пришлось столкнуться), пришлось доработать скрипт; отличие от изначального скрипта — результат дампа не сохраняется локально, а передаётся на удалённый сервер по ssh и там же производится удаление устаревших файлов:

Предварительно надо создать авторизационный ключ для пользователя (в приведённом скрипте пользователь — backup) на сервере резервного хранения и разместить приватный ключ в каталоге, доступном на чтение только пользователю root (в приведённом скрипте ключ лежит в файле /root/nbs01/backup) и настроить sshd удалённого сервера на авторизацию по ключам — об этом весьма подробно написано, например, в этой статье.
Да, трафик будет весьма серьёзным, несмотря на возможность сжатия ssh, но конкретно данное решение работает в виртуальной среде, где 3 гигабайта дампа передаются примерно за полторы минуты, что вполне приемлемо.

Восстановление базы данных из дампа

Тут всё просто — если владелец (имя «роли входа» или пользователь postgresql, указанный владельцем изначальной БД) уже существует, но нет самой базы данных, команда восстановления будет выглядеть примерно так:

/usr/pgsql-9.2/bin/pg_restore -e -j 8 -U root -W -d upp /root/files/upp-2013-11-20.pgdump

Восстановление будет выполнено в 8 потоков (для ускорения процедуры, в документации pgsql рекомендуется использовать потоков не меньше, чем доступно ядер CPU) от имени пользователя root с интерактивным вводом пароля. Файл /mnt/arc/1C8/upp-2013-11-20-09-45-51.pgdump — распакованный .gz из второго примера или изначальный дамп из первого. Целевая база (в данном примере — upp) должна уже существовать, и быть созданной из template0.

Если пользователя-владельца создать нет возможности/желания, можно добавить ключ --no-owner да и вообще, почитать что пишут на http://www.postgresql.org/docs/9.3/static/backup.html

И ещё, если на создание дампа в пару гигабайт (несжатых) уходит пара минут, то на восстановление данного дампа в один поток (если не указать ключ распараллеливания — «-j 8» в примере выше) потребуется уже полчасика, на том же железе. А если использовать текстовые дампы (не указать «-F c» при создании дампа, и для восстановления использовать стандартную команду psql dbname < infile или использовать конвейер типа pg_restore infile.pgdump | psql), времени потребуется ещё больше — данные методы целесообразно использовать не для полного восстановления, а когда требуется восстановить только определённую часть базы данных.

Для восстановления БД с удалённой машины (сервера хранилища) можно использовать конструкцию вида:

zcat upp-2014-10-22-07-30-03.pgdump.gz | ssh 192.168.1.2 «psql upp-copy > /root/files/log-create»

Здесь zcat — команда вывода содержимого архива на stdout, upp-2013-10-22-07-30-03.pgdump.gz — имя восстанавливаемого архива, 192.168.1.2 — сервер postgresql, на который восстанавливаем дамп, upp-copy — имя базы данных, в которую разворачиваем дамп (на момент восстановления должна существовать, быть пустой, и иметь необходимые права для «роли входа», использованной в изначальной БД); чтобы не засорять экран выводом psql о процессе создания объектов, перенаправим вывод в файл (сообщения об ошибках, в случае их наличия, будут выводиться в терминал). В данном примере предполагается, что у пользователя, от имени которого мы подключаемся по ssh к серверу postgres есть право работать с базами данных, поэтому авторизация в БД не описана.

Резервное копирование MySQL

Вариант для реализации резервного копирования MySQL:

 

Еще один способ резервного копирования Postgresql

 
Источники: http://www.bubnov.su/stati/rezervnoe-kopirovanie-baz-dannyh-postgresql

http://habrahabr.ru/post/82278/

Предметная визуализация

Перегенерация значений полей left_key и right_key в Shop-Script

В Shop-Scropt ведутся промежуточные поля left_key, right_key. Они влияют на отображение дерева. Если данные поля заполнены не корректно, то ваше дерево может «развалиться» и вести не адекватно.

Починить данную ситуцию Вы можете с помощью команд:

Или выполнив из URL:

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)

3D визуализация и дизайн

Настройка SSH в GitLib

При вставке больших файлов в GitLib, используя http-доступ возникает ошибка 413 и как результат — файлы не передаются. В таком случае, лучше передавать информацию через ssh. Но, для этого, нужно несколько повозиться и настроить ssh-ключи. В данной статье описывается, как настроить ssh-доступ для GitLib.

После создания нового проекта стоит обратить внимание на 2 вещи:

  • на подсказку вверху о невозможности записывать изменения при отсутствии SSH ключей
  • на подсказки на странице о необходимых действиях — при создании нового проекта и при создании локального репозитория в существующем проекте.
gitlib ssh

gitlib ssh

Начнем с SSH ключей. Стоит различать 2 разновидности SSH пар ключей — которые использует Git и которые используют клиенты типа Source Tree, Tortoise Git. Проблема первой разновидности в том, что без лишних телодвижений допускается использование только одной пары ключей, в то время как каждый репозиторий требует уникальный ключ, вторых же можно наплодить неограниченное количество (на самом деле можно использовать более 1 пары ключей первого типа, но предлагаемые решения работают либо частично, либо не работают вообще).

Для начала, сделаем ключи для Git, для этого запустим Git Bash. Git подразумевает что в Windows среде ключи лежат по адресу ~ / .ssh / id_rsa, где ~ — путь к домашней директории пользователя (например c: \ Users \ USERNAME), в папке которого есть каталог .ssh, в котором лежит пара ключей — id_rsa.pub и id_rsa (соответственно публичная часть и приватная).

Пришло время для генерирования ключей, возвращаемся к Git Bash и в консоль вводим следующее:

ssh-keygen -t rsa -C «your_email@example.com»»

Данная команда указывает Git Bash создать ключ с коментарием your_email@example.com (зачем он нужен, поймете чуть позже) в формате RSA. Внимательно вводим место сохранения ключа, в nix-like стиле с прямыми (а не обратными!!!) слешами:

c: / Users / USERNAME / .ssh / id_rsa

и дважды вводим пароль для дополнительной защиты ключа (passphrase):

ssh key git

ssh key git

Переходим в личном кабинете в профиль, на вкладку с SSH ключами:

Профиль ssh gitlab

Профиль ssh gitlab

и добавляем содержимое посредством Copy/Paste файла id_rsa.pub (title заполнять не нужно — подставляется автоматически из коментария к ключу, таким образом ключи удобно отличать визуально, не сравнивая fingerprints.)

GitLab Профиль ssh

GitLab Профиль ssh

Убеждаемся что файл принят системой:

Gitlab ssh key profile

Gitlab ssh key profile

HTTP доступ к репозиторию

Настала очередь собственно локального репозитория. Возвращаемся в Git Bash и поочередно вводим команды, которые услужливо подсказывает стартовая страница вашего проекта:

cd d: / projects / test — переходим в папку где будет лежать будущий проект

mkdir test-project — создаем новую папку для проекта

cd test-project — переходим в папку проекта

git init — инициализируем локальный репозиторий

touch README — создаем новый файл README

git add README — добавляем его к версионированию

git commit -m ‘first commit’ — делаем commit с коментарием о первом комите

git remote add origin http://gitlab.golovachcourses.com/Student/test-project.git — добавляем адрес удаленного репозитория в HTTP формате

git push -u origin master — отправляем изменения на сервер

git_first_commitТеперь если зайти в свой личный кабинет, то сначала увидим сообщение про создание новой ветки master в нашем тестовом проекте:

gitlab_new_branch_msgВ файлах появился новый файл README:

gitlab_new_READMEgitlab_new_README_code

но он пока пустой.

Галочка в зеленом кружочке сообщает что данная папка успешно подключена к VCS:

gitlab_first_commitИтак, мы создали первый тестовый проект, подключили его к удаленному репозиторию по HTTP протоколу и сделали первый commit первого файла — README.

SSH доступ к репозиторию

Попробуем теперь изменить файл README и отправить изменения на сервер посредством SSH протокола через Tortoise Git. Для удаленного обновления вашего кода через Tortoise Git необходимо настроить и добавить к аккануте новыю пару SSH ключей, используя PuTTY Key Generator:

putty_key_gen_test

Полученную пару ключей необходимо сохранить (Save public key && Save private key) в том же месте где и предыдущие для дальнейшей настройки Git (пусть это будут соответственно test@gitlab.golovachcourses.com.pub и test@gitlab.golovachcourses.com.ppk).

Теперь добавим к первому сгенерированный ключ в вашем профиле:

gitlab_profile_second_keytest_project_settingstest_project_settings_remote

В параметре Git -> Remote -> origin меняем ссылку на SSH вариант:

git@gitlab.golovachcourses.com:Student/test-project.git

и указываем новый PuTTY ключ.

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

Обратите внимание на то, что VCS реагирует на изменение локальной копии, которое не синхронизировано с удаленным:

git_changes

Есть две возможности провести синхронизацию:

  • отдельно по файлу (так как он у нас один, больше ничего в проекте нет)
  • либо по всей папке (что делают чаще всего)

В первом случае ПКМ на файле -> Git commit -> «master»…

Во втором случае ПКМ на папке -> Git Sync (этот вариант и рассмотрим как более общий):

git_syncделаем commit

git_sync_вводим описание commit-а

git_sync_descriptionлокальный commit прошел успешно, делаем push

git_sync_commit_okвводим пароль для ключа (passphrase, что вводили при создании, понадобится только в первый раз)

git_sync_push_passphraseвводим наш логин

git_sync_push_loginпароль

git_sync_push_passи наслаждаемся сообщением о том что произведен новый commit в основную ветку

gitlab_dashboard_new_commitи видим что в нашем удаленном файле, доступном в репозитории на сервере уже есть внесенные нами изменения

gitlab_dashboard_new_commitgitlab_new_codeИ теперь папка с «проектом» имеет одинаковую ревизию что локально что удаленно:

git_new_revision_ok

Git GUI клиенты

Помимо рассмотренного простейшего Tortoise Git (который на самом деле является не совсем GUI клиентом а скорее расширением оболочки), существует несколько других, для различных платформ: Git GUI. Из представленных заслуженное внимание привлекает Source Tree — добротный free инструмент от компании Atlassian.

Источник: http://gitlab.golovachcourses.com/root/manual/wikis/new_local_repository

Git коротко

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

Конфигурирование репозитария:

Добавление новых файлов в репозитарий:

Сохранение изменений в репозитарий:

Подключение к удаленному репозитарию:

 

Добавление изменений в master:

Закачка на сервер:

Статус локального репозитатора:

 

Дизайн интерьеров

Git для чайника. Команды которые помогут начать работу

Многим трудно начать работать с Git, ведь не все привыкли работать с командной строкой, но именно ее лучше всего использовать при работе с репозиторием Git. И сегодня я расскажу о самом простом, так сказать Git для чайника, чтобы помочь освоиться Вам с этой системой. Git представляет собой систему контроля версий, которая позволяет в нужный момент откатиться на старую версию, если вы «наломали дров«.

С помощью Git Вы сможете размещать свой код на GitHub, BitBucket и Google Code.

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

С чего начать?

Нам понадобиться программа Git Bash, это шелл сделанный на основе Cygwin, поэтому возможно использование Unix-команд, вроде ls, cd, mkdir. Скачать его можно по следующей ссылке http://git-scm.com/.

Настройка Git

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

Также нам нужно настроить параметры установок окончания строк, для Windows мы вводим две команды

На этом настройка заканчивается, можем начинать работу с проектом.

Создание проекта

Допустим у нас есть папка с проектом, которую мы хотим разместить на GitHub.

1. Создаем репозиторий на сайте.

Git

Git

2. Инициализируем папку для Git репозитория. Это нужно сделать только один раз для каждого проекта.

3. Связываем папку с удаленным репозиторием

4. Добавляем все новые и измененные файлы

5. Помечаем все новые и измененные файлы сообщением (commit)

— вместо message вписываем сообщение, например Initial Commit. или Bugfix.

6. Закачиваем код на удаленный репозиторий

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

git

git

git

git

7. Можно посмотреть статус изменений, которые были сделаны.

 

8. Для скачивания репозитория используется команда

Второй компьютер

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

1. Клонирование репозитория

В результате git скачает удаленный репозиторий в новую папку test-project

2. После каких-то изменений в коде, выполняем все те же команды

Откат изменений

1. Полный откат до предыдущего коммита

2. Сброс изменений в файле на версию коммита

3. Откат до установленного тега, например v1

 

Для более лучшего пониманию лучше ознакомиться с интерактивным туром по Git