Смена пароля пользователя mySQL

Свой пароль можно поменять через:
     SET PASSWORD = PASSWORD('пароль')

Пароль определенного пользователя можно поменять через:
     SET PASSWORD FOR логин@localhost = PASSWORD('пароль');
     SET PASSWORD FOR логин@"%" = PASSWORD('пароль');

тоже самое делают:

  UPDATE mysql.user SET Password=PASSWORD('пароль') WHERE User='логин' AND Host='localhost';
  FLUSH PRIVILEGES;

или GRANT USAGE ON БД.* TO логин@localhost IDENTIFIED BY 'пароль';
или mysqladmin -u логин password пароль

Права Linux

Изменить рекурсивно права файлов:
find ./audio -type f -exec chmod 644 {} \;
f — файлы
./audio — путь

Изменить рекурсивно права папок
find ./audioplayer -type d -exec chmod 755 {} \;
d — каталог
./audio — путь

Изменить рекурсивно владельца/группу
chown -R <Пользователь>:<Группа> <Путь>

Действия при блокировке файлов ownCloud (Exception: is locked)

Для решения этой проблемы необходимо очистить таблицу oc_file_locks, однако, предварительно необходимо перевести сайт в режим тех. обслуживания. для этого в файле ./config/config.php в массиве $CONFIG изменить ключ maintenance на true.

После этого выполнить SQL запрос на базой данных DELETE FROM 'oc_file_locks'

После удаления записей из таблицы нужно вернуть ключ maintenance на false

Сервер 1С зависает

Изображение
1CClusterConf

При длительной работе сервера 1С рабочие процессы (rphost.exe) начинает зависать, тормозя при этом работу всего сервера.

Это связано с различными причинами (большие запросы, оборванные пользовательские сеансы)

Для того, что бы «распухшие» сеансы не затрудняли работу необходимо настроить кластер 1С на перезапуска рабочих процессов.

Перезапуск осуществляется следующим образом:

  1. Создается новый процесс
  2. В него передаются все соединения
  3. Старый процесс закрывается

Интервал перезапуска: Интервал, по истечении которого будет произведен перезапуск

Допустимый объем памяти: Объем занимаемой памяти процессом, по достижении которого процесс будет перезапущен

Интервал превышения допустимого объема памяти: Интервал времени, который пройдет между достижением максимального объема памяти до перезапуска.

«Оживление» сцены. Движение объектов по сцене

Добавим новый класс WorldController, который будет управлять расположением объектов на сцене.

В класс World добавим ссылку на объект данного класса, а так же в функции render() будем вызывать обновление.

Так же в при создании объектов укажем начальное значение скоростей по осям в виде случайного числа от 20 до 150.

Для возможности доступа к скорости для класса Object добавим getter функцию для velosity.

Object.java
package kz.dsdk.aquarium.models;
import com.badlogic.gdx.math.Vector3;
/**
* Created by ytzh on 1/18/16.
*/
public class Object {
Vector3 position;
Vector3 velosity;
public Object(Vector3 position, Vector3 velosity){
this.position = position;
this.velosity = velosity;
}
public Vector3 getPosition() {
return position;
}
public Vector3 getVelosity() {
return velosity;
}
}

Colored with dumpz.org

World.java
package kz.dsdk.aquarium.models;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.utils.Array;
import kz.dsdk.aquarium.controllers.WorldController;
/**
* Created by ytzh on 1/18/16.
*/
public class World {
private Array<Object> objects;
Texture bgt;
Texture objt;
WorldController worldController;
private int width, height;
public Array<Object> getObjects() {
return objects;
}
public Texture getBgt() {
return bgt;
}
public Texture getObjt() {
return objt;
}
public World(int width, int height) {
this.width = width;
this.height = height;
this.worldController = new WorldController(this);
objects = new Array<Object>();
this.bgt = new Texture(Gdx.files.internal("sea.jpg"));
this.objt = new Texture(Gdx.files.internal("ball.png"));
for(int i = 0; i<60;i++){
objects.add(new Object(new Vector3( //Координаты
MathUtils.random(0,this.width-objt.getWidth()),
MathUtils.random(0,this.height-objt.getHeight()),0),
new Vector3(//Скорость
MathUtils.random(20,150),
MathUtils.random(20,150),0)));
}
}
public void render(SpriteBatch sb){
sb.draw(bgt,0,0);
for(Object obj:objects){
sb.draw(objt,obj.getPosition().x,obj.getPosition().y);
}
worldController.update();
}
public void dispose(){
bgt.dispose();
objt.dispose();
}
}

Colored with dumpz.org

WorldController.java
package kz.dsdk.aquarium.controllers;
import com.badlogic.gdx.Gdx;
import kz.dsdk.aquarium.models.*;
/**
* Created by ytzh on 1/18/16.
*/
public class WorldController {
private World world;
public WorldController(World world) {
this.world = world;
}
public void update(){
for(kz.dsdk.aquarium.models.Object object:world.getObjects()){
if(object.getPosition().x>=world.getBgt().getWidth()-world.getObjt().getWidth() || object.getPosition().x<= 0 ){
object.getVelosity().x *= -1;
}
if(object.getPosition().y>=world.getBgt().getHeight()-world.getObjt().getHeight() || object.getPosition().y<= 0 ){
object.getVelosity().y *= -1;
}
object.getPosition().add(object.getVelosity().x * Gdx.graphics.getDeltaTime(),object.getVelosity().y*Gdx.graphics.getDeltaTime(),0);
}
}
}

Colored with dumpz.org

Построение простой сцены

Изображение
В примере буду стараться придерживаться принципа MVC. По крайней мере постараюсь использовать модель и вид. В первой части на сцену будет добавлено некоторое фоновое изображение, и несколько окружностей

Первое — запустим мастер проекта

Скрин

  • Name: Aquarium
  • Package: kz.dsdk.aquarium
  • Game class: starter
  • Destination: <Расположение проекта>
  • Android SDK: <Расположение SDK Android>

Далее импортируем проект в Android Studio

Скрин

  • В приветсвенном окне выбрать пункт Import project
  • Выбрать файл build.gradle в каталоге указанном в Destination на предыдущем шаге

Добавляем в каталог assets два изображения
Фон:

Скрин

Окружность:

Скрин

Реализуем возможность запуска в режиме рабочего стола. Для этого настроим конфигурацию запуска в выпадающем списке вариантов запуска выбрать Edit Configuration

Скрин

Скрин

В верхнем левом углу нажав на Плюс выбрать Application.

  • Name: Desktop
  • Main class: DesktopLauncher (можно выбрать в диалоге)
  • Working directory: Каталог ресурсов проекта. (можно выбрать в диалоге)
  • Use classpath of module: desktop

Подготовка завершена. Теперь можно начинать размещение изображений

В наш пакет добавим еще три: models, controllers и views.

В пакет models добавим классы Object — отображаемые объекты и World — создаваемый мир.

Object.java
package kz.dsdk.aquarium.models;
import com.badlogic.gdx.math.Vector3;
/**
* Created by ytzh on 1/18/16.
*/
public class Object {
Vector3 position;
Vector3 velosity;
public Object(Vector3 position, Vector3 velosity){
this.position = position;
this.velosity = velosity;
}
public Vector3 getPosition() {
return position;
}
}

Colored with dumpz.org

World.java
package kz.dsdk.aquarium.models;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.utils.Array;
/**
* Created by ytzh on 1/18/16.
*/
public class World {
private Array<Object> objects;
Texture bgt;
Texture objt;
private int width, height;
public World(int width, int height) {
this.width = width;
this.height = height;
objects = new Array<Object>();
this.bgt = new Texture(Gdx.files.internal(«sea.jpg»));
this.objt = new Texture(Gdx.files.internal(«ball.png»));
for(int i = 0; i<60;i++){
objects.add(new Object(new Vector3(MathUtils.random(0,this.widthobjt.getWidth()),MathUtils.random(0,this.heightobjt.getHeight()),0), new Vector3(0,0,0)));
}
}
public void render(SpriteBatch sb){
sb.draw(bgt,0,0);
for(Object obj:objects){
sb.draw(objt,obj.getPosition().x,obj.getPosition().y);
}
}
public void dispose(){
bgt.dispose();
objt.dispose();
}
}

Colored with dumpz.org

Тек же внесем изменения в стартовый класс

starter.java
package kz.dsdk.aquarium;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import kz.dsdk.aquarium.models.World;
public class starter extends ApplicationAdapter {
World world;
SpriteBatch batch;
@Override
public void create () {
batch = new SpriteBatch();
world = new World(Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
}
@Override
public void render () {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
world.render(batch);
batch.end();
}
}

Colored with dumpz.org

Класс Object представляет собой объект нашего мира. Хранит только свои координаты и скорость движения.
Класс World хранит массив всех используемых объектов. При заполнении массива координаты объектов берутся случайным образом

starter.java — стартовый класс, который предосавляет SpriteBatch для выводимых объектов нашего мира.

План изучения библиотеки libGDX

В интерне имеется множество примеров разработки с использованием libgdx, однако они либо используют старую версию библиотеки, либо не совсем мне ясны и не полны (субъективно). В связи с чем для себя сделаю отдельный план по изучению этой библиотеки.

Тут не будут рассматриваться теоретические вопросы (как скачать и установить, зачем нужна та или иная библиотека и т.д.). Этого добра навалом. Просто ход разработки этакого «аквариума»

  1. Построение простой сцены. Texture
  2. «Оживление» сцены. Движение объектов по сцене
  3. Управление объектом. Смена главного (управляемого) объекта
  4. Расширение сцены. Отслеживание главного объекта
  5. Взаимодействие объектов друг с другом. Столкновения
  6. Использование scene2d
  7. Физика. Использование Box2D

Краткое описание пунктов.

Построение простой схемы

В примере буду стараться придерживаться принципа MVC. По крайней мере постараюсь использовать модель и вид. В первой части на сцену будет добавлено некоторое фоновое изображение, и несколько окружностей

«Оживление» сцены. Движение объектов по сцене

Добавлена возможность перемещения объектов. Первоначальное положение и скорость по (x,y) выбирается случайно.

Управление объектом. Смена главного (управляемого) объекта

Управление заключается в регулировании скорости (стрелки вверх и вниз). Смена управляемых объектов — вправо и влево

Расширение сцены. Отслеживание главного объекта

Размер сцены будет увеличен. Камера фокусируется на одном объекте и следит за ним, перемещаясь по сцене

Взаимодействие объектов друг с другом. Столкновения

Объекты будут сталкиваться. При столкновении вектор и скорость учитываться не будут. Измениться лишь направление столкнувшихся объектов

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

Использование возможностей использования сцены

Физика. Использование Box2D

Задействование возможностей физической библиотеки

Zend Framework. Первые шаги

После установки скелетного приложения Zend Framework можно приступить к более подробному ее изучению.


English
Русский
Optionally, when using Apache, you can use the APPLICATION_ENV setting in your VirtualHost to let PHP output all its errors to the browser. This can be useful during the development of your application.

Edit index.php from the zf2-tutorial/public/ directory and change it to the following:

На этапе разработки Вы можете направить вывод всех ошибок в браузер. Для этого можно воспользоваться настройкой APPLICATION_ENV на вашем виртуальном хосте.

Отредактируйте файл index.php в каталоге zf2-tutorial/public в соответствии со следующим кодом:

Code
<?php
/**
* Display all errors when APPLICATION_ENV is development.
*/
if ($_SERVER[‘APPLICATION_ENV’] == ‘development’) {
error_reporting(E_ALL);
ini_set(«display_errors», 1);
}
/**
* This makes our life easier when dealing with paths. Everything is relative
* to the application root now.
*/
chdir(dirname(__DIR__));
// Decline static file requests back to the PHP built-in webserver
if (php_sapi_name() === ‘cli-server’ && is_file(__DIR__ . parse_url($_SERVER[‘REQUEST_URI’], PHP_URL_PATH))) {
return false;
}
// Setup autoloading
require ‘init_autoloader.php’;
// Run the application!
Zend\Mvc\Application::init(require ‘config/application.config.php’)->run();

Colored with dumpz.org

Zend Framework 2 uses a module system to organise your main application-specific code within each module. The Application module provided by the skeleton is used to provide bootstrapping, error and routing configuration to the whole application. It is usually used to provide application level controllers for, say, the home page of an application, but we are not going to use the default one provided in this tutorial as we want our album list to be the home page, which will live in our own module.
Zend Framework 2 использует модульную систему для организации специфичного для Вашего приложения кода по отдельным модулям. Модуль Application, предоставленный скелетом используется для обеспечения самонастройки, маршрутизации и обработки ошибок. Он, как правило, используется для обеспечения контроллеров уровня приложения, таких как, скажем, домашняя страница приложения, однако мы не собираемся использовать стандрартную страницу для данного руководства, и хотим сделать список альбомов как домашнюю страницу, которая будет располагаться в нашем собственном модуле.
We are going to put all our code into the Album module which will contain our controllers, models, forms and views, along with configuration. We’ll also tweak the Application module as required.
Мы собираемся разместить весь наш код в модуле Album, который будет содержать наши контроллеры, модели, формы и виды вместе с настройками. Так же по необходимости настроим модуль Application.
Let’s start with the directories required.
Начнем с необходимых дирректорий.

Setting up the Album module

Настройка модуля Album

Start by creating a directory called Album under module with the following subdirectories to hold the module’s files
Начнем с создания в каталоге module директории с именем Album а так же всех ее поддиректорий для размещения файлов модуля.
 zf2-tutorial/
     /module
         /Album
             /config
             /src
                 /Album
                     /Controller
                     /Form
                     /Model
             /view
                 /album
                     /album
As you can see the Album module has separate directories for the different types of files we will have. The PHP files that contain classes within the Album namespace live in the src/Album directory so that we can have multiple namespaces within our module should we require it. The view directory also has a sub-folder called album for our module’s view scripts.
Как Вы видите, модуль Album имеет различные директорий для разных типов файлов, которые у нас будут. PHP файлы, содержащие классы в пространстве имен Album располагаются в каталоге src/Album, итак мы можем иметь несколько пространств имен в нашем модуле, которые должны нам потребоваться.
In order to load and configure a module, Zend Framework 2 has a ModuleManager. This will look for Module.php in the root of the module directory (module/Album) and expect to find a class called Album\Module within it. That is, the classes within a given module will have the namespace of the module’s name, which is the directory name of the module.
Для того, что бы загрузить и настроить модуль Zend Framework 2 имеет ModuleManager. Он ищет в корне директории модулей Module.php (module/Album) и ожидает найти в нем класс, называемый Album\Module. То есть, классы в данном модуле будут иметь пространство имен имени модуля, который совпадает с именем дирректории модуля.
Create Module.php in the Album module: Create a file called Module.php under zf2-tutorial/module/Album:
Создайте Module.php в модуле Album: В каталоге zf2-tutorial/module/Album создайте файл с именем Module.php
Code
namespace Album;
use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\ModuleManager\Feature\ConfigProviderInterface;
class Module implements AutoloaderProviderInterface, ConfigProviderInterface
{
public function getAutoloaderConfig()
{
return array(
‘Zend\Loader\ClassMapAutoloader’ => array(
__DIR__ . ‘/autoload_classmap.php’,
),
‘Zend\Loader\StandardAutoloader’ => array(
‘namespaces’ => array(
__NAMESPACE__ => __DIR__ . ‘/src/’ . __NAMESPACE__,
),
),
);
}
public function getConfig()
{
return include __DIR__ . ‘/config/module.config.php’;
}
}

Colored with dumpz.org

The ModuleManager will call getAutoloaderConfig() and getConfig() automatically for us.
ModuleManager автоматически вызовет getAutoloaderConfig() и getConfig()

Autoloading files

Автозагрузка файлов

Our getAutoloaderConfig() method returns an array that is compatible with ZF2’s AutoloaderFactory. We configure it so that we add a class map file to the ClassMapAutoloader and also add this module’s namespace to the StandardAutoloader. The standard autoloader requires a namespace and the path where to find the files for that namespace. It is PSR-0 compliant and so classes map directly to files as per the PSR-0 rules.
Метод getAutoloaderConfig() возвращает массив совместимый с ZF2 AutoloaderFactory. Мы настроили ее добавив файл карты классов в ClassMapAutoloader а так же добавив пространство имен этого модуля в StandartAutoloader. Стандартный загрузчик требует пространство имен и путь, по которому можно найти файлы для этого пространства имен. Массив соответствует правилам PSR-0
As we are in development, we don’t need to load files via the classmap, so we provide an empty array for the classmap autoloader. Create a file called autoload_classmap.php under zf2-tutorial/module/Album:

Так как разрабатываем мы, то не нужно загружать файлы через classmap, т.е. мы определим пустой массив для автозагрузчика карты классов. Создайте файл с именем autoload_classmap.php в каталоге zf2-tutorial/module/Album
Code
return array();

Colored with dumpz.org

As this is an empty array, whenever the autoloader looks for a class within the Album namespace, it will fall back to the to StandardAutoloader for us.
Это пустой массив будет нам возвращен всекий раз, когда загрузчик ищет класс в пространстве имен Album

Configuration

Конфигурация

Having registered the autoloader, let’s have a quick look at the getConfig() method in Album\Module. This method simply loads the config/module.config.php file.
Имея зарегистрированный автозагрузчик, давайте просмотрем метод getConfig(). Данный метод просто загружает файл config/module.config.php
English
Русский
Create a file called module.config.php under zf2-tutorial/module/Album/config
Создайте файл с именемmodule.config.php в zf2-tutorial/module/Album/config
Code
return array(
‘controllers’ => array(
‘invokables’ => array(
‘Album\Controller\Album’ => ‘Album\Controller\AlbumController’,
),
),
‘view_manager’ => array(
‘template_path_stack’ => array(
‘album’ => __DIR__ . ‘/../view’,
),
),
);

Colored with dumpz.org

The config information is passed to the relevant components by the ServiceManager. We need two initial sections: controllers and view_manager. The controllers section provides a list of all the controllers provided by the module. We will need one controller, AlbumController, which we’ll reference as Album\Controller\Album. The controller key must be unique across all modules, so we prefix it with our module name.
Конфигурационная информация передается в соответсвующие компоненты через ServiceManager. Нам нужно две внутренние секции: controllers и view_manager. Секция controllers предоставляет список всех контоллеров представленных в модуле. Нам будет нужен один контроллер, AlbumContloller, который будет отностися к Album\Controller\Album. Ключ контроллера должен быть уникальным среди всех модулей, поэтому мы используем префикс для него в соответсвии с именем нашего модуля.
Within the view_manager section, we add our view directory to the TemplatePathStack configuration. This will allow it to find the view scripts for the Album module that are stored in our view/ directory.
В секции view_manager мы добавим директорию view для настройки TemplatePathStack. Это позволит найти скрипты view для модуля Album которые храняся в каталоге view/

Informing the application about our new module

Уведомление приложения о новом модуле

We now need to tell the ModuleManager that this new module exists. This is done in the application’s config/application.config.php file which is provided by the skeleton application. Update this file so that its modules section contains the Album module as well, so the file now looks like this:

(Changes required are highlighted using comments.)

Теперь нам необходимо уведомить ModuleManager о наличии нового модуля. Это делаетмя в файле приложения config/application.config.php который предоставляется скелетным приложением. Обновите этот файл, что бы он содержал секцию модуля Album после чего он дожен выглядеть следующим образом:

(Изменения выделены комментарием)

Code
return array(
‘modules’ => array(
‘Application’,
‘Album’, // <— Add this line
),
‘module_listener_options’ => array(
‘config_glob_paths’ => array(
‘config/autoload/{{,*.}global,{,*.}local}.php’,
),
‘module_paths’ => array(
‘./module’,
‘./vendor’,
),
),
);

Colored with dumpz.org

As you can see, we have added our Album module into the list of modules after the Application module.

We have now set up the module ready for putting our custom code into it.

Как Вы можете видеть, мы добавили наш модуль Album в список модулей после модуля Application.

Теперь у нас есть готовый для вставки кода модуль.

Zend Framework 2. Первичный запуск Skeleton Application.

Как я запускал скелетное приложение Zend Framework

  1. Настроил LAMP сервер по этой инстркуции
  2. Создал директорию /var/www/zf.localhost, где будет крутится фреймворк, и скачал в нее скелет. Права для для папки настраиваю через Midnight Commander. (F9-Файл-Права, расширенные) и задаю для всех r-x (775) (настройка делается очень просто :))
    Получение скелета приложения
    cd /var/www/zf.localhost
    curl -#L https://github.com/zendframework/ZendSkeletonApplication/tarball/master | tar xz --strip-components=1
  3. Скачал Composer и установил скелетное приложение
    curl -s https://getcomposer.org/installer | php
    php composer.phar install
  4. Добавил виртуальный хост по этой инструкции. В каталоге /etc/apache2/sites-available создал файл zf.localhost.conf
    <VirtualHost *:80>
    	ServerName zf.localhost
    	DocumentRoot /var/www/zf.localhost/public
    
    	<Directory /var/www/zf.localhost/public>
    		AllowOverride All
    	</Directory>
    </VirtualHost>	
    

    В процессе настройки немного закосячил. Конфигурационный файл должен иметь расширение .conf, иначе его не подцепит утилита a2ensite для активации

  5. Активация сайта
    a2ensite zf.localhost
  6. Активировал Mod Rewrite командой
    sudo a2enmod rewrite
  7. В каталоге настроил .htaccess файл (по шаблону)
    RewriteEngine On
    # The following rule tells Apache that if the requested filename
    # exists, simply serve it.
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    # The following rewrites all other queries to index.php. The 
    # condition ensures that if you are using Apache aliases to do
    # mass virtual hosting, the base path will be prepended to 
    # allow proper resolution of the index.php file; it will work
    # in non-aliased environments as well, providing a safe, one-size 
    # fits all solution.
    RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]
    RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]
    
  8. Перезапуск Apache
    sudo service apache2 restart
  9. Натройка файла /etc/hosts
    sudo nano /etc/hosts
    Добавление строки в этот файл строки
    127.0.0.1    zf.localhost

После всех этих изменений сайт по адресу http://zf.localhost заработал. Проверить ModRewrite можно просто добавив в конец УРЛ любую строку. Должна вылезти 404 я ошибка с лого ZF и описанием скелетного приложения