1062: Duplicate entry ’2147483647′ for key ‘PRIMARY’ или Проблема 2038 года

Наверное помните раскрученную проблему 2000? А все из-за того что кто-то заранее не подумал о том что будет через каких то 30 лет и использовал в программном обеспечении 2-ух значное обозначение года. И надо сказать, что проблема 2000 не единственная в своем роде. Наверное еще рановато об этом говорить, но назревает еще и проблема 2038 года. Поясню что имеется в виду. Попробуйте запустить следующий PHP-код:

1
<?php echo date("d.m.Y H:i", 2147483647); ?>

На выходе получим: 19.01.2038 06:14. А теперь увеличьте число на 1. Получилось 13.12.1901 23:15 что не соответствует истине. А все потому что метка времени UNIX при этом выходит за рамки диапазона типа данных Integer.

Хотя проблема 2038 года — это конечно больше шутка. Но однажды при записи данных в MySQL базу данных я получил ошибку:

1062: Duplicate entry ’2147483647′ for key ‘PRIMARY’

Дело в том что для первичного ключа использовалось поле с типом данных INT. И так получилось, что AUTO INCREMENT вышел за пределы числа 2147483647, максимального для INT. Решение простое в данном случае — пришлось использовать тип данных BIGINT. Так что думайте сами, решайте сами …

Не запускается The Crew

В гости приехал племянник, которому подарили Uplay-ключ игры The Crew. Естественно захотели запустить его (её?) на нашем «слегка игровом» HTPC. К тому моменту на компьютере уже было 4Gb RAM (2 шт по 2Gb, то есть в двухканальном режиме). Минимальные требования игры, помимо памяти, заявлены такие: процессор Intel Core2 Quad Q9300 @ 2,5 ГГц или AMD Athlon II X4 620 @ 2,6 ГГц; видеокарта NVIDIA GeForce GTX260 или AMD Radeon HD4870. Это несколько мощнее чем начинка имеющегося HTPC (g1620 + GT630), но не намного. И как оказалось позднее, комфортно поиграть на средних настройках (и на среднем разрешении) вполне можно. Но вначале игра вообще не запускалась. На тот момент была установлена Windows 7 32bit, которая естественно видела только 3,5Gb ОЗУ из 4-ёх, и как оказалось вообще не поддерживала Crew.

Переустановили Win 7 64bit. Но игра по прежнему не подавала признаков жизни. Никаких ошибок не отображалось, просто вообще нет реакции на запуск. Решили немного обновить компоненты системы, в частности MS Framework — ничего не изменилось.

Топтались на месте довольно долго, потом решили попробовать запустить игру от Администратора. Также назначили запуск от Админа и для клиентов Uplay и Steam (он в данном случае тоже был задействован — хотя игра от Uplay, она приписана к аккаунту Steam). После этого наметился определенный прогресс — на экране появилась ошибка! В ней система нам поведала что для запуска не хватает xinput1_3.dll.

Скачали указанную библиотеку и положили её в папку игры: c:\Program Files (x86)\Steam\steamapps\common\The Crew\. А также в папку c:\windows\SysWOW64\. Но не тут то было — теперь выпала ошибка с кодом 0xc000007b. В связи с этим нашли информацию, что надо обновить DirectX. Обновили с помощью утилиты dxwebsetup.exe (её можно скачать на официальном сайте Microsoft). Но дело было не в этом — ошибка появилась вновь.

В конце концов, когда уже почти отчаялись запустить Crew, помог неожиданный ход. После того как попробовали несколько версий xinput1_3.dll, найденных в сети, и ни одна не подошла, обратили внимание что в папке Uplay тоже есть такая библиотека. Скопировали именно её в вышеупомянутые папки c:\Program Files (x86)\Steam\steamapps\common\The Crew\ и  c:\windows\SysWOW64\. Запуск игры произвели через файл TheCrewLauncher.exe из папки The Crew. После этого всё наконец заработало!

В общем Win 64bit нужен без вопросов. Возможно один из промежуточных упомянутых шагов тоже сыграл роль, проверять повторно не стали. Но решающим было именно копирование xinput1_3.dll из папки Uplay в системную папку c:\windows\SysWOW64\ и папку игры. У некоторых, похоже, бывают проблемы запуска The Crew немного иного характера, но может данный опыт тоже пригодится.

Отображение количества просмотров поста в WordPress по данным Yandex.metrika

Вместо того чтобы создавать свою систему статистики для блога, почему бы не использовать уже готовую — например Yandex.metrika? Тем более что Yandex предоставляет свой API для доступа к статистике. Ниже приведен способ извлечения с Yandex.metrika и отображения количества просмотров для конкретного поста.

Первый шаг — регистрация приложения для доступа к статистике. Для этого авторизуемся в своем аккаунте метрики. Затем переходим по ссылке:
https://oauth.yandex.ru/client/new
И регистрируем приложение как указано на скриншоте.

yandex metrika

Второй шаг — узнаем ID своего приложения. Для этого идем сюда:
https://oauth.yandex.ru/client/my
Кликаем на названии своего приложения и копируем куда нибудь его ID.

Третий шаг — нужно получить токен для доступа к системе. Для этого выполняем следующий запрос, подставив ID приложения полученный на предыдущем шаге:

https://oauth.yandex.ru/authorize?response_type=token&client_id=[подставляем ID приложения]

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

http://api-metrika.yandex.ru/stat/content/popular?id=[номер счетчика метрики]&date1=[дата начала ГГГГММДД]&date2=[дата конца ГГГГММДД]&oauth_token=[токен]

Если вы увидите xml-файл с данными статистики, то все нормально.

Четвертый шаг — нужно добавить скрипт в WordPress. Создаем в корне сайта файл yml.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
// НАСТРОЙКИ
$startDate = ""; // дата с которой считать статистику в формате ГГГГММДД
$yandexMetrikaCounterID = ""; // № счетчика Yandex.metrika
$yandexMetrikaToken = ""; // токен
 
// инициализация
$ymDateLoad = 0;
 
// если xml-фаил метрики есть
if (file_exists($_SERVER['DOCUMENT_ROOT'].'/upload/ym.xml')) {
	$ymData = simplexml_load_file($_SERVER['DOCUMENT_ROOT'].'/upload/ym.xml');
	$ymDateLoad = $ymData->date2;
}
 
// если фаила метрики нет или он устарел
if ($ymDateLoad != date('Ymd')) {
	// создание нового cURL ресурса
	$ch = curl_init();
 
	// установка URL и других необходимых параметров
	curl_setopt($ch, CURLOPT_URL, "http://api-metrika.yandex.ru/stat/content/popular?id=".$yandexMetrikaCounterID."&date1=".$startDate."&date2=".date("Ymd")."&oauth_token=".$yandexMetrikaToken);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_HEADER, 0);
 
	// загрузка страницы
	$ymXml = curl_exec($ch);
 
	// завершение сеанса и освобождение ресурсов
	curl_close($ch);
 
	// обработка
	$ymXml = str_replace(array('<![CDATA[', ']]>', str_replace('www.', '', 'http://'.$_SERVER['HTTP_HOST'])), array('', '', ''), $ymXml);
 
	// запись в фаил
	$handle = fopen($_SERVER['DOCUMENT_ROOT']."/upload/ym.xml", "w");
	fwrite($handle, $ymXml);
	fclose($handle);
 
	// объект SimpleXML
	$ymData = simplexml_load_string($ymXml);
	$ymDateLoad = $ymData->date2;
}
 
if ($ymDateLoad) {
	// uri
	$uri = $_SERVER['REQUEST_URI'];
 
	// вывод
	foreach ($ymData->data->row as $row) {
		if ($uri!=$row->url) continue;
		echo $row->page_views." просмотров";
	}
}
?>

В самом начале кода в разделе настроек присваиваем значения 3-ём переменным. $startDate — дата начала статистики в формате ГГГГММДД (например 20130101). Логично поставить дату установки счетчика метрики на блоге. $yandexMetrikaCounterID — подставляем номер счетчика Yandex.metrika. Найти его можно здесь:

yandex metrika

$yandexMetrikaToken — сюда подставляем токен полученный на 3-ем шаге.

Пятый шаг — создаем папку для файлов кеша. Работать и без этого будет, конечно, но тогда каждый раз при отображении поста будет тратится лишнее время на подгрузку статистики с метрики. Итак, создаем в корне сайта папку upload и присваиваем ей права 777. Например в FileZilla это делается так:

yandex metrika

Шестой шаг — добавляем отображение количества просмотров в шаблон поста. В панели управления WordPress идем в Внешний вид -> Редактор и выбираем шаблон content-single.php. Вставляем следующий код:

<div><?php require_once($_SERVER['DOCUMENT_ROOT']."/ymc.php"); ?></div>

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

<h1><?php the_title(); ?></h1>

Так же можно настроить стили, добавив в файл style.css, например, следующее:

.ymc {color:#218f48; font-weight:bold;}

В результате работы скрипта получим вот это:

yandex metrika


Так же интересно…
Потолок, а так же его правильное освещение, к примеру, с использованием люстры для спальни — может полностью изменить интерьер любого помещения, будь то офис или жилая комната.


Wi-Fi повторитель (репитер) из компьютера на базе Windows 7

Проблема покрытия (или не покрытия) помещения сетью Wi-Fi встречается довольно часто. Решить её можно с помощью использования более мощного сетевого оборудования, а так же с помощью Wi-Fi репитеров. Ну или обойтись проводной сетью. Однако в некоторых случаях можно обойтись использованием в качестве повторителя или репитера одного из компьютеров.

Чтобы это сделать в ОС Windows 7, достаточно просто запустить маленькую программку WiFi Repeater с двумя параметрами. Кстати, эти параметры лучше прописать в ярлыке, чтобы не вводить каждый раз. Подробнее о том как сделать эту программку из bat-файла, смотрите внизу поста. Ранее я выложил на нее ссылку, но Яндекс посчитал ее вредоносной и пришлось убрать.

wifi repeater

Первый параметр (на скриншоте netname) — имя сети, которая будет продолжать основную сеть. Второй (на скриншоте netkey) — ключ сети. Запустить программу нужно с правами администратора. Сама программа в данном примере находится в корне диска C, что не является условием для её работы.

wifi repeater

Если все было сделано правильно и ваш Wi-Fi адаптер поддерживается, то в Центре управления сетями и общим доступом появится новая сеть. В моем случае она называется aero2.

wifi repeater

Если у второй сети нет доступа в интернет, нужно зайти в свойства основного беспроводного соединения, вкладка «Доступ». Там нужно поставить галочку «Разрешить другим пользователям сети использовать подключение к Интернету данного компьютера».

wifi repeater

Теперь устройства, которые плохо видели основную Wi-Fi сеть, смогут подключатся через созданный программно репитер.

P.S. Итак как упоминалось выше, программа WiFi Repeater упомянутая выше — это не совсем программа. Это просто bat-файл преобразованный в exe-файл. Содержимое bat-файла приведено ниже:

1
2
3
@echo off
netsh wlan set hostednetwork mode=allow ssid="%1" key="%2" keyUsage=persistent
netsh wlan start hostednetwork

Его запуск, соответственно, будет иметь тот же эффект. Можно и не использовать параметры bat-файла, а прописать их внутри — кому как удобнее.


Так же интересно…
Займитесь самостоятельным выбором мебели, присмотрите для своего дома столовые сервизы, всевозможные отдельные предметы из фарфора или же чайные сервизы и на минутку представьте, как они будут выглядеть в вашем жилище.


После установки Windows 7 ошибка: The computer restarted unexpectedly or encountered an unexpected error. Windows installation cannot proceed

После неудачной установки эксперементального Linux совместно с Windows 7, а также неудачной разметки разделов, перестали загружаться вообще все системы. Попытка восстановления Windows не дала результат. После этого начал чистую установку Windows 7. Из установщика удалил все старые разделы, разметил по новому и начал установку. Однако на завершающем этапе получил ошибку: «The computer restarted unexpectedly or encountered an unexpected error. Windows installation cannot proceed». Ошибка циклическая — то есть после перезагрузки, которую советовал сделать установщик, она появлялась вновь.

Решение, кстати, нашлось на официальном форуме Microsoft. Опишу вкратце что нужно сделать:

  1. Когда появилась указанная выше ошибка, нажимаем Shift+F10 — открывается командная строка — уже легче!
  2. Пишем команду regedit — запускается редактор реестра.
  3. Открываем ветку HKEY LOCAL MACHINE/SYSTEM/SETUP/STATUS/ChildCompletion. Справа выбираем параметр setup.exe и меняем его значение с 1 на 3. Жмем ОК.
  4. Реестр закрываем и теперь можно нажимать ОК в окне ошибки. Начинается перезагрузка.

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