Решение: прекращена работа changeicon mfc application

Апрель 15, 2015

Ноутбук ASUS ROG. Удалять обновления не помогло.

Решение

Скачиваем драйвер:

http://station-drivers.com/download/www/genesys/Genesys_cr_4.5.0.0(www.station-drivers.com).exe

Распаковываем архив и устанавливаем его через setup.

После ищем через глобальный поиск файл "ustor.dll" и перемещаем его в папку "c:/windows/syswow64". Перезагружаем компьютер.

Список ранее удаленных обновлений (не требуется)

  • KB2984006
  • KB3000850
  • KB3013769
  • KB3031432

Ссылка по теме

ChangeIcon MFC Application has stopped working

Записано в Windows    |    Постоянная ссылка

Поиск в терминале по дате изменения и типу файла

Март 12, 2015

Tags: , ,
Записано в Linux, Ubuntu    |    Постоянная ссылка

Полная Лента для Гостей в EasySocial

Февраль 7, 2015

По-умолчанию в социальной сети EasySocial лента новостей отображает последние N записей, кнопки переключения между страницами отсутствуют. С одной стороны хорошо, внизу посетитель сайта видит предложение зарегистрироваться, с другой, мы теряем потенциального читателя и более того, наносим ущерб SEO, а точнее ограничиваем сайт от полноценной индексации его поисковыми системами. Поисковый робот попросту не видит соседних страниц и не знает об их существовании, как и записей, ссылки на которые там присутствуют.

Оригинального решения в настройках от StackIdeas нет. Для решения потребуется самостоятельно отредактировать 3 исходных файла системы и один шаблон.

Кому интересно, пишите на почту через Контакты. Стоимость решения: 10 USD.

Tags: ,
Записано в PHP, Программирование    |    Постоянная ссылка

Поиск grep с учетом расширения файла

Декабрь 30, 2014

Только звучит просто:

find . -name "*.php" -exec grep -H "some_string" {} \;

Записано в Linux    |    Постоянная ссылка

Отправка писем через localhost, LAMP и postfix в Ubuntu 14.04

Август 10, 2014

Ранее уже многократно пытался настроить sendmail на локалке (не путать с сервером, домен localhost) и на новой системе вновь решил это сделать и ничего не вышло. Сначала он у меня зависал надолго, но на этот раз удалось сделать, чтобы отрабатывал быстро, но отправлять он в итоге письма так и не стал, хотя статус вызова mail был true.

Конспектирую, так как описанные настройки postfix пришлось совмещать и все наконец-то заработало!

Вот код php скрипта:

<?php
try {
	echo ( int ) mail( 'mymail@yandex.ru', 'hello', 'message' );
} catch ( RuntimeException $e ) {
	print_r( $e );
}
?>

А вот результат (заголовки письма на почте):

Return-Path: <mailfrom@gmail.com>
Received: from yasamposebe.localdomain (ppp85-141-143-38.pppoe.mtu-net.ru. [85.141.143.38])
        by mx.google.com with ESMTPSA id f9sm13453063lbd.46.2014.08.10.05.29.58
        for <mailto@gmail.com>
        (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
        Sun, 10 Aug 2014 05:29:58 -0700 (PDT)
Received: by yasamposebe.localdomain (Postfix, from userid 33)
	id 3F7022A41F4; Sun, 10 Aug 2014 16:29:58 +0400 (MSK)
To: mailto@gmail.com
Subject: hello
X-PHP-Originating-Script: 1000:index.php
Message-Id: <20140810122958.3F7022A41F4@yasamposebe.localdomain>
Date: Sun, 10 Aug 2014 16:29:58 +0400 (MSK)
From: mailfrom@gmail.com (www-data)

message

Воспользовался в сумме двумя инструкциями:

  1. http://onedev.net/post/277
  2. https://rtcamp.com/tutorials/linux/ubuntu-postfix-gmail-smtp/

Во 2-й не было того, что должно быть в 1-й и это очень важно. Если возникнет проблема и у меня о ней ни слова, открываем 2-ю ссылку, там нереальное количество комментариев.

Основной прикол в том, что как только сделал все по 1-й инструкции у меня отправка работать не стала.

Приступим.

Шаг 1

Выполняем в терминале:

sudo apt-get install postfix ca-certificates

Шаг 2

Правим или создаем следующий файл: /etc/postfix/mail.cf

Содержимое заменяем на:

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_use_tls = yes

Шаг 3

Создавать файлы transport и generic и генерить по ним db не нужно.

Шаг 4

Создаем файл: /etc/postfix/sasl_passwd

Вставляем в него:

[smtp.gmail.com]:587 USERNAME@gmail.com:PASSWORD

Шаг 5

Выставляем верные права:

sudo chmod 400 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd

Шаг 6 (микс)

Этот шаг по-моему ни на что не влияет и состоит из комбинаций к обоих ресурсов.

1) Выполняем:

ln -s /etc/ssl/certs/Equifax_Secure_CA.pem /etc/postfix/cacert.pem

2) Выполняем:

cat /etc/ssl/certs/Thawte_Premium_Server_CA.pem | sudo tee -a /etc/postfix/cacert.pem

Кажется, что это должно защищать вашу почту от взломщиков, но не уверен и очень сильно.

Шаг 7

Все, перегружаем postfix:

sudo /etc/init.d/postfix reload

Шаг 8

Для настройки PHP открываем /etc/php5/apache2/php.ini и добавляем строчку (или редактируем):

sendmail_path = /usr/sbin/sendmail -t -i -f mailfrom@gmail.com

Итог

Выполняем мой скрипт и ничего не доходит. Смотрим логи:

tail /var/log/mail.log

и видим:

Aug 10 17:06:26 localhost postfix/qmgr[10887]: 1E8EE2A60F0: from=<mailfrom@gmail.com>, size=363, nrcpt=1 (queue active)
Aug 10 17:06:27 localhost postfix/smtp[10893]: 1E8EE2A60F0: to=<mailto@gmail.com>, relay=smtp.gmail.com[74.125.143.109]:587, delay=1.8, delays=0.08/0.01/0.79/0.94, dsn=2.0.0, status=sent (250 2.0.0 OK 1407675987 ok1sm13606396lbc.18 - gsmtp)
Aug 10 17:06:27 localhost postfix/qmgr[10887]: 1E8EE2A60F0: removed
Aug 10 17:08:33 localhost postfix/pickup[10886]: EA5C02A60F0: uid=33 from=<mailfrom@gmail.com>
Aug 10 17:08:33 localhost postfix/cleanup[10909]: EA5C02A60F0: message-id=<20140810130833.EA5C02A60F0@yasamposebe.localdomain>
Aug 10 17:08:34 localhost postfix/qmgr[10887]: EA5C02A60F0: from=<mailfrom@gmail.com>, size=363, nrcpt=1 (queue active)
Aug 10 17:08:34 localhost postfix/smtp[10911]: EA5C02A60F0: SASL authentication failed; server smtp.gmail.com[74.125.143.109] said: 534-5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbsqB?534-5.7.14 KhsSR6I87oK_C4TxS1NdQVQS0PzikND9qj70eQUKk8MeycvYLSVk3BUS0n1iw4_mpyZqQ4?534-5.7.14 3yMySUSy7AyIQTC_-H5OFkRu4_h9s-S-8lQfWUpmmMPQC5auCDcLZJoiShf7RbwUYPA3WN?534-5.7.14 kY8Q2WVTwMAFBLLK3I1w0DJYeWKL1NLJunjI0_j7fgGhZY1R37qD6c-kHtKUiv8WSWS0rB?534-5.7.14 s2GcHKw> Please log in via your web browser and then try again.?534-5.7.14 Learn more at?534 5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 xu8sm4583002lab.41 - gsmtp
Aug 10 17:08:35 localhost postfix/smtp[10911]: EA5C02A60F0: SASL authentication failed; server smtp.gmail.com[74.125.143.108] said: 534-5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbtLc?534-5.7.14 31FFOiu5FqZ0Bfjx2r1ySB4Sk0YcmdfsVWH5-Gh9JYixVrhSegWVvaLeiv70vybEEbXYTa?534-5.7.14 LN9iG7Zj6lLE0CQyfj5ahIn_aBsjT--qNNkzx9XoJQwVNGkfL59w880vDElZemD3oxSaja?534-5.7.14 LqO_5fggvWCw2ol4D9_yOzlq1vtp69C5pD2n8tWOPkexG3hWHZMDaVVF8jn-loCGR1EbzY?534-5.7.14 v5j77eg> Please log in via your web browser and then try again.?534-5.7.14 Learn more at?534 5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 kz1sm4588917lab.11 - gsmtp
Aug 10 17:08:35 localhost postfix/smtp[10911]: connect to smtp.gmail.com[2a00:1450:4010:c04::6d]:587: Network is unreachable
Aug 10 17:08:35 localhost postfix/smtp[10911]: EA5C02A60F0: to=<mailto@gmail.com>, relay=none, delay=1.3, delays=0.11/0.01/1.2/0, dsn=4.4.1, status=deferred (connect to smtp.gmail.com[2a00:1450:4010:c04::6d]:587: Network is unreachable)

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

Решение - необходимо выполнить все шаги:

  1. переходим по ссылке и жмем "Продолжить": https://accounts.google.com/DisplayUnlockCaptcha
  2. переходим по ссылке и подтверждаем действия при необходимости: https://security.google.com/settings/security/activity
  3. главное, открываем вкладку "Безопасность" в профиле Google: https://www.google.com/settings/security - на панели "Доступ к аккаунту" жмем "Настройки" и выбираем "Включить".

После 3-го пункта повторяем отправку и все работает. Не уверен, что п. 3 безопасен, поэтому лучше его выключать в периоды, когда разработка не ведется и проверять отправку писем на localhost не требуется.

В завершение

Спасибо обоим авторам. Время идет и что-то может меняться. Уверен, что кому-то пригодится моя инструкция. В особенности мне самому, когда настанет время все переустанавливать.

Tags: , , , ,
Записано в Linux    |    Постоянная ссылка

Комбинация клавиш на открытие Sublime Text 2 в Ubuntu

Август 9, 2014
По-быстрому:
  1. качаем с оф. сайта программу
  2. создаем ссылку для работы редактора через команду в терминале sudo ln -s /home/samposebe/Документы/Programs/Sublime\ Text\ 2/sublime_text /usr/bin/sublime
  3. переходим в параметры системы - клавиатура - комбинации клавиш - дополнительно
  4. жмем +
  5. сначала пишем название, потом команду "sublime"
  6. после создания выделяем добавленную строчку и нажимаем нужную комбинацию на клавиатуре

Записано в Linux    |    Постоянная ссылка

Remember Me для Админ зоны в Joomla 3.2.3

Апрель 5, 2014

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

Сразу отмечу, что ни один плагин в Интернете не позволяет достигнуть аналогичного результата. Причем в моем случае почему-то даже стандартный KeepAlive не работал, сессия слетала и я переключался на форму логина каждые 15 минут (время жизни сессии по настройкам конфига). Сейчас даже если и сессия слетела, она восстановится. ОК, к делу.

Все правки в коде ищите по комментарию "// cay127".

Файл plugins/authentication/cookie/cookie.php

Правки ниже:

public function onUserAuthenticate($credentials, $options, &$response)
{
	// No remember me for admin
	if ($this->app->isAdmin())
	{
		// cay127
		// return false;
	}

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

Это не все, но объяснять уже не буду, слишком долго.

public function onUserAfterLogout($options)
{
	// No remember me for admin
	if ($this->app->isAdmin())
	{
		// cay127
		// return false;
	}

Далее еще. Кусок кода большой, нужно развернуть:

public function onUserAfterLogin($options)
{
	// No remember me for admin
	if ($this->app->isAdmin())
	{
		// cay127
		$options[ 'remember' ] = 1;
		// return false;
	}

	if (isset($options['responseType']) && $options['responseType'] == 'Cookie')
	{
		// Logged in using a cookie
		$cookieName		= JUserHelper::getShortHashedUserAgent();

		// We need the old data to get the existing series
		$cookieValue	= $this->app->input->cookie->get($cookieName);
		$cookieArray	= explode('.', $cookieValue);
		// Filter series since we're going to use it in the query
		$filter			= new JFilterInput;
		$series			= $filter->clean($cookieArray[1], 'ALNUM');
	}
	elseif (!empty($options['remember']))
	{
		// Remember checkbox is set
		$cookieName		= JUserHelper::getShortHashedUserAgent();

		// Create an unique series which will be used over the lifespan of the cookie
		$unique = false;
		do
		{
			$series = JUserHelper::genRandomPassword(20);

			$query = $this->db->getQuery(true)
				->select($this->db->quoteName('series'))
				->from($this->db->quoteName('#__user_keys'))
				->where($this->db->quoteName('series') . ' = ' . $this->db->quote($series));

			$results = $this->db->setQuery($query)->loadResult();

			if (is_null($results))
			{
				$unique = true;
			}
		}
		while ($unique === false);
	}
	else
	{
		return false;
	}

	// Get the parameter values
	$lifetime	= $this->params->get('cookie_lifetime', '60') * 24 * 60 * 60;
	$length		= $this->params->get('key_length', '16');

	// Generate new cookie
	$token		= JUserHelper::genRandomPassword($length);
	$cookieValue = $token . '.' . $series;

	// Overwrite existing cookie with new value
	$this->app->input->cookie->set(
		$cookieName, $cookieValue, time() + $lifetime, $this->app->get('cookie_path', '/'), $this->app->get('cookie_domain'), $this->app->isSSLConnection()
	);

	$query = $this->db->getQuery(true);

	// cay127
	$query = 'SELECT ' . $this->db->quoteName('id');
	$query .= ' FROM ' . $this->db->quoteName('#__user_keys');
	$query .= ' WHERE ' . $this->db->quoteName('series') . ' = ' . $this->db->quote($series);
	$query .= ' AND ' . $this->db->quoteName('user_id') . ' = ' . $this->db->quote($options['user']->username);

	$results = $this->db->setQuery($query)->loadObjectList();
	if (count($results) !== 0) {
		$b_update = true;
	} else {
		$b_update = false;
	}

	$query = $this->db->getQuery(true);
	// cay127 #

	// cay127
	// if (!empty($options['remember']))
	if ($b_update == false AND !empty($options['remember']))
	{
		// Create new record
		$query
			->insert($this->db->quoteName('#__user_keys'))
			->set($this->db->quoteName('user_id') . ' = ' . $this->db->quote($options['user']->username))
			->set($this->db->quoteName('series') . ' = ' . $this->db->quote($series))
			->set($this->db->quoteName('uastring') . ' = ' . $this->db->quote($cookieName))
			->set($this->db->quoteName('time') . ' = ' . (time() + $lifetime));
	}
	else
	{
		// Update existing record with new token
		$query
			->update($this->db->quoteName('#__user_keys'))
			->where($this->db->quoteName('user_id') . ' = ' . $this->db->quote($options['user']->username))
			->where($this->db->quoteName('series') . ' = ' . $this->db->quote($series))
			->where($this->db->quoteName('uastring') . ' = ' . $this->db->quote($cookieName));
	}

	$hashed_token	= JUserHelper::hashPassword($token);
	$query
		->set($this->db->quoteName('token') . ' = ' . $this->db->quote($hashed_token));

	$this->db->setQuery($query)->execute();

	return true;
}

Файл libraries/cms/application/administrator.php

И теперь самое, что может показаться странным, но джумла почему-то делает язык английским после окончания срока действия временной куки на час. Исправляем и это.

protected function initialiseApp($options = array())
{
	// cay127
	if ( $options[ 'language' ] == 'en-GB' ) {
		$options[ 'language' ] = '';
	}

В заключение

Все, можно наконец-то заняться кодингом, просмотром авто-обновлений статистики в режиме live и не переживать ни о чем.

Update 2014-04-06 

Что-то включил сегодня компьютер после сна и попал на форму логина:( Надеюсь не последнее добавление с языком повлияло таким образом, что меня стало выкидывать. Подумаю еще...

Update 2014-08-25 

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

plugins/system/remember/remember.php

1-е изменение:

public function onAfterInitialise()
{
	// No remember me for admin.
	if ($this->app->isAdmin())
	{
		// cay127
		// return;
	}

и 2-е:

public function onUserLogout($user, $options)
{
	// No remember me for admin
	if ($this->app->isAdmin())
	{
		// cay127
		// return true;

Короче всегда ищем "No remember me for admin" в консоли через grep и спасибо разработчикам за комментарии.

Tags: , , ,
Записано в Joomla, Программирование    |    Постоянная ссылка

Решение проблем с NGINX, IP и HTTPS в Joomla 3.2.3

Апрель 5, 2014

Этот пост будет первым из серии "Танцы с бубном в Joomla". Почему так? Несмотря на все достоинства среды, возникают проблемы, которые приходится внедрять с помощью внедрения своего кода в начинку самой джумлы, что не есть хорошо, но все же. Собственно это и есть одна из причин поста - сохранить изменения. В коде помечаю такие места с помощью комментария "// cay127" и команда grep мне всегда поможет быстро найти все, что было изменено вручную.

И еще пару слов - да, где-то может плагин был бы лучшим решением, может где-то не докопал до истины, но просто экономил время. Плагин отмечу - не всегда применим и это скоро станет понятно.

После вступления

Проблема вот в чем - джумла строит ссылки следующим образом (автоматически):

$theURI = 'http' . $https . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

Но у меня переменная $_SERVER['HTTP_HOST'] содержит IP адрес, а не название домена вовсе. Т.о. быстрое решение стало следующим: правим файл:

libraries/joomla/uri/uri.php

точка опоры:

public static function getInstance($uri = 'SERVER')

Без лишних подробностей изменения (помним о комментарии):

public static function getInstance($uri = 'SERVER')
{
	if (empty(self::$instances[$uri]))
	{
		// Are we obtaining the URI from the server?
		if ($uri == 'SERVER')
		{
			// Determine if the request was over SSL (HTTPS).
			// cay127
			if (true OR sset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off'))
			{
				$https = 's://';
			}
			else
			{
				$https = '://';
			}

			/*
			 * Since we are assigning the URI from the server variables, we first need
			 * to determine if we are running on apache or IIS.  If PHP_SELF and REQUEST_URI
			 * are present, we will assume we are running on apache.
			 */

			if (!empty($_SERVER['PHP_SELF']) && !empty($_SERVER['REQUEST_URI']))
			{
				// To build the entire URI we need to prepend the protocol, and the http host
				// to the URI string.

				// cay127
				// $theURI = 'http' . $https . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
				// [HTTP_HOST] => 212.XX.XX.XX
				$theURI = 'http' . $https . 'www.site.ru' . $_SERVER['REQUEST_URI'];
			}

Реальный IP и домен скрыты, но суть ясна. Плюс прописал условие всегда использовать только HTTPS.

Tags: , , , , , ,
Записано в Joomla, Программирование    |    Постоянная ссылка

Найти большие файлы через терминал FreeBSD

Сентябрь 2, 2013

Две команды:

find / -type f -size +1G | xargs ls -lh
ls -lSh |head

Ссылки по теме

Tags: ,
Записано в Linux    |    Постоянная ссылка

Бесконечный loading и не работает Режим модема в iPad mini

Май 4, 2013

После покупки iPad mini с 3G просидел до самой ночи в попытках подключить Интернет через Мегафон. В Белом Ветре, когда мне продавали наносим-карту сказали, что тариф по ней не установлен и когда я ее вставлю, то смогу выбрать его в настройках iPad. В общем это все неправда.

Тариф Мегафона в настройках iPad никаким образом выбрать нельзя. Таким образом, наносим просто не работает, оттого не ловит сеть и Режим модема постоянно показывает "загрузку".

Не нужно вытаскивать наносим, нажимать на сброс и все прочее, что относится к действиям с iPad. Необходимо пополнить по номеру наносим баланс до нужного тарифа (я выбрал Интернет S - 390 рублей в месяц) и позвонить в Службу поддержки Мегафона.

На наносим изначально у меня уже был запас средств равный стоимости карты - 200 рублей. Добавил 190, позвонил в Службу поддержки с просьбой установить тариф. По телефону сказал PUK2 для проверки.

После описанных действий Интернет включился. Однако, ранее я установил в Настройках APN (Настройки - Сотовые данные):

  • APN: internet
  • Имя пользователя: ничего или gdata
  • Пароль: ничего или gdata

До установки тарифа перерыл весь Интернет на наличие решения. Был расстроен, что никто ранее про подобную мелочь не писали. Уже был готов поверить, что сломан модуль 3G...

Tags:
Записано в iPad mini    |    Постоянная ссылка