Эта страница будет пополняться новой информацией по мере её поступления; то, что на ней есть сейчас, готово.

На самом деле на этой странице не только программирование, но и вёрстка, настройка операционных систем и всё такое.

Настройка transmission-daemon.

Содержание

PHP

Обычно речь идёт о версии 5.3.

Копирование

По значению. В том числе массивы.

И лишь объекты по ссылке. Чтобы по значению, надо clone: $newObj = clone $oldObj; При этом в конце вызывается метод __clone(), если он определён.

Установка всяких дополнений в Ubuntu 12.04

apt-get install php5 libapache2-mod-php5 apt-get install php5-cgi apt-get install php5-mysql apt-get install php5-pgsql apt-get install php-pear apt-get install php-apc apt-get install php5-gd apt-get install php5-intl apt-get install php5-curl apt-get install php5-mcrypt

И не забывать делать /etc/init.d/apache2 restart.

Каскадное включение и относительные пути

При каскадных включениях файлов может возникнуть проблема с относительными путями. Поэтому лучше использовать абсолютные. Получить их можно с помощью магической константы __FILE__ и функции dirname() (или __DIR__, начиная с 5.3.0).

Итак, вместо include 'hello.php'; следует писать include dirname(__FILE__).'/hello.php'; или (если известно, что версия не ниже 5.3.0) include __DIR__.'/hello.php';.

Кажется, конструкция include './hello.php'; работает аналогично, но не уверен.

Ещё можно явно задавать первую часть пути константой (переменной): $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../phpBB3/'; include($phpbb_root_path . 'common.' . $phpEx);

Boolean значения в SQL запросах

Получить строку 'true' или 'false' (или хотя бы '1' или '0') из переменной довольно сложно. Истинное значение при преобразовании к строке даёт '1', а ложное '' (строку из 0 символов). Можно воспользоваться конструкцией $variable?'true':'false' (возможно, придётся заключить её в круглые скобки). Но быстрее написать так: (int)$variable. Это даст число 0 или 1, которое преобразуется в строку '0' или '1'.

В любом из двух вышеописанных случаев не получится просто вставить выражение в разбираемую строку, даже при использовании фигурных скобок. Придётся разбить строку на две части и вставлять с помощью конкатенации строк: "begin ".(int)$variable." end". Либо использовать prepared statement. Кстати, в MySQL 5 типы bool и boolean являются лишь дополнительными именами целочисленного типа.

Буферизация, или include в строку, а не в браузер

$data = file_get_contents('test.html'); — просто чтение файла в строку.

eval($data); — выполнение строки прямо сейчас. Или так: eval("?>$data");, если речь идёт об HTML-файле с PHP-вставками. Таким образом, eval('?>'.file_get_contents('test.html')); — почти то же самое, что include 'test.html';. Почти, потому что в первом случае магические константы теряют свою магию.

Если же хочется сделать include, но не вывести в браузер, а сохранить в строку для дальнейшей обработки, делаем так (надо думать, если буферизация используется вовне этого кода или внутри include): ob_start(); include 'test.html'; $html = ob_get_clean();

Конвертер в vcf

Использовать

Скачать

СУБД и SQL

MySQL

Обычно речь идёт о версии 5.1+.

Создание пользователя и БД

mysql -u root -p <root password> CREATE USER `<user>`; SET PASSWORD FOR `<user>` = PASSWORD('<password>'); CREATE DATABASE `<db>`; GRANT ALL ON `<db>`.* TO `<user>`;

Создание таблицы

CREATE TABLE `table_name` ( `id` INTEGER AUTO_INCREMENT, `timestamp` TIMESTAMP, `title` VARCHAR(1000), `text` TEXT, PRIMARY KEY (`id`) ) ENGINE INNODB CHARACTER SET UTF8;

Даты и времена

DATE: '1000-01-01' to '9999-12-31'. Можно сказать, что это строка: как записали, так всегда и будет.

DATETIME: '1000-01-01 00:00:00' to '9999-12-31 23:59:59'. Можно сказать, что это строка: как записали, так всегда и будет.

TIMESTAMP: '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC. В БД хранится просто число секунд для зоны UTC, поэтому на ввод/вывод влияет текущий часовой пояс (его можно настроить для каждой сессии независимо от глобальных настроек СУБД и компьютера, на котором она работает).

Invalid DATE, DATETIME, or TIMESTAMP values are converted to the “zero” value of the appropriate type ('0000-00-00' or '0000-00-00 00:00:00').

PostgreSQL

CREATE USER <user> WITH UNENCRYPTED PASSWORD '<password>'; CREATE DATABASE <db> OWNER <user>; CREATE TABLE <table> ( id SERIAL, x INT, y INT, PRIMARY KEY (id) );

Windows 7

Команды

gpedit.msc — всякие политики, в том числе отключение автозапуска в XP (конфигурация компьютера → административные шаблоны → система)

msconfig — редактирование автозагрузки

control userpasswords2 — вход при загрузке без ввода пароля

bcdedit.exe (≥ Vista) — программа для редактирования того, что в < Vista называлось boot.ini.

diskpart (win7) — утилита для работы с разделами дисков, в том числе создания заргузочных флешек

UTF в консоли: cmd, chcp65001, свойства→шрифт→Lucida Console

Настройка свежеустановленной Windows 7

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

вход без пароля: control userpasswords2

английский язык ввода везде (при установке с русским языком): установить «Типографские расладки» Ильи Бирмана (если их вообще планируется ставить, чтобы два раза не делать). Язык и региональные параметры → дополнительно → копировать параметры, только сначала в параметрах языковой панели по умолчанию английский

отключение автозапуска: оборудование и звук → автозапуск

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

«мой компьютер» на столе: рабочий стол → персонализация → изменение значков рабочего стола

включение сервера удалённого рабочего стола: компьютер → свойства → настройка удалённого доступа

панель задач → кнопки панели задач не группировать

панель управления → программы → включение или отключение компонентов «Окон» → клиент telnet

настроить уровень и предусиление микрофона, во всяких скайпах устройство по умолчанию

антивируст «Аваст»: выключить звуки, не добавлять подпись в почту

Активация

Давным-давно уже существуют и вполне доступны активаторы. Естественно, ещё больше существует поддельных (вредоносных) или просто неработающих. Так что весь вопрос только в том, где взять правильный. Ответ: «My digital life» для тех, кто знает английский и «Ru-board» для русскоязычных (как ни странно, оба просто доступны даже на территории России, но на всякий случай всё равно ссылки не даю). Конкретно для 7 на MBR рекомендуют «Windows Loader» («WindSLIC» для GPT, оба на «MDL»; на «RB» есть ещё один, но только для VL-версий). Для 10 рекомендуют «Microsoft Toolkit» на «MDL» и «KMS Auto Net» на «RB».

Продление пробного периода

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

Каждый 30-й день в (командной строке от имени Администратора): slmgr /rearm. Каждый 120-й день (суть в том, что из реестра надо удалить ветку hklm\system\wpa\, но сделать это не так-то просто):

  1. (необязательно). Установить пароль Администратора: net user Администратор *
  2. Активировать учётную запись Администратора: net user Администратор /active:yes
  3. regedit:
    1. Экспортировать в файл раздел hklm\system как куст
    2. Создать раздел hklm\system\temp, импортировать в него файл
    3. Удалить раздел hklm\system\temp\wpa
    4. Экспортировать в файл windows\system32\config\system_no_wpa раздел hklm\system\temp как куст
  4. Перезагрузка, F8, устранение неполадок компьютера, Администратор, командная строка: d: (или другой диск, причём он может не совпадать с тем, который отображается в самих «Окнах»), cd windows\system32\config\, copy system_no_wpa system (либо можно запустить файловый менеджер, например, d:\totalcmd\totalcmd.exe)
  5. Перезагрузка
  6. Ввести ключ по умолчанию для вашей редакции, например (для Максимальной Ultimate): slmgr /ipk D4F6K-QK3RD-TMVMJ-BBMRX-3MBMV. Или гуглить по запросу «windows 7 default key».
  7. (необязательно, но желательно для безопасности). Деактивировать учётную запись Администратора: net user Администратор /active:no
  8. (необязательно). Очистить пароль Администратора: net user Администратор *

У меня не получилось, но пишут, что можно увеличить количество rearm: regedit → Navigate to the following path at the registry editor from the left sidebar. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform → In the right pane, find out the value SkipRearm. Now double-click on it and change the value from 0 to 1. Press ‘OK’. → You are done! Now you can apply the slmgr -rearm command for 8 times more. So, you can extend the trial period to extra 240 days. Эта инструкция в интернете. Я нашёл ещё одно место с SkipRearm: HKLM\Software\Wow6432Node\Microsoft\WindowsNT\CurrentVersion\SoftwareProtectionPlatform. Возможно, надо переписать оба после удаления WPA.

HTML и CSS

Обычно речь идёт о версии CSS 2.1.

White space: the 'white-space' property

ValueПробелы сливаются?Переносы в коде игнорируются?Бразер может ставить переносы по своему усмотрению?Суть
normal (initial)ДаДаДаКод игнорируется, длинные строки переносятся
pre (обычно значение браузера по умолчанию для HTML-тега pre)НетНетНетТочно как в коде
nowrapДаДаНетОдна строка. Одинарные пробелы.
pre-wrapНетНетДаКак в коде + длинные строки переносятся
pre-lineДаНетДаПробелы одинарные, а переносы как в коде + по необходимости
inheritНаследуется

Картинки-ссылки

Простейший способ дать пользователю возможность посмотреть картинку в максимальном размере, но при этом сэкономить трафик тех, кому это не надо — поместить на саму страницу уменьшенную копию и сделать её ссылкой на оригинал. Надпись «Картинка кликабельна» бессмысленна и отвратительна. По умолчанию «Интернет эксплорер» ставит вокруг картинки рамку, что тоже смотрится не очень приятно. Другие браузеры рамку не ставят, и не каждый пользователь догадается, что картинка является ссылкой. Если под картинкой есть подпись, то она, возможно, должна быть ссылкой, но не всегда подпись необходима (но не надейтесь на HTML-атрибуты alt и title: альтернативный текст может просто не уместиться, а title не прочитают пользователи тач-устройств).

Я предлагаю такое решение: сделать рамку, но не вокруг всей картинки, а только снизу, как у текстовых ссылок: a img { border-width: 0 0 2px 0; padding-bottom: 2px; border-style: solid; }

14.05.2013 я заметил, что Илья Бирман делает рамку вокруг картинки-ссылки по hover и focus. Я стал экспериментировать, и получил ещё 3 варианта (причём ни один мне не нравится полностью, включая предложенный изначально с рамкой только снизу и оба варианта поведения браузеров):

Теги (и не только) HTML 4.01 для разметки текста (и вообще страницы)

Закрывающие теги обязательны для всех элементов, кроме P (необязательно) и BR и HR (запрещено).

Ещё есть 3 вида списков и таблицы.

А ещё TT, I, B, BIG, SMALL, STRIKE, S, U — лишь последние 3 нерекомендуемые (то есть запрещённые в HTML 4.01 strict), но остальные тоже не следует использовать.

Кодирование

Желательно, хотя и не обязательно (should, а не must) использовать &lt;, &gt;, &amp;, &quot; вместо <, >, &, " (а вот одинарная кавычка ' в этом списке отсутствует). Речь не только о тексте, но и об атрибутах, в частности, атрибуте href тега A. Существует рекомендация (HTML 4.01 Specification Appendix B.2.2) использовать ; вместо & в ссылках, но я не знаю, работает ли она.

Атрибут href не может содержать не-ASCII символы, однако валидатор (The W3C Markup Validation Service) ошибки не видит, к тому же сама спецификация содержит рекомендацию, что делать браузеру, если такие символы всё же есть (HTML 4.01 Specification Appendix B.2.1): предствить каждый символ в виде UTF-8 и экранировать каждый полученный байт (например, преобразуя к %HH).

C/C++

Типы данных и их размеры в разных компиляторах

Стандарт

sizeof(short) ≤ sizeof(int) ≤ sizeof(long).

Квалификаторы signed, unsigned — для char и любого целого типа. Коды печатаемых символов всегда положительны, но знаковость самого char по умолчанию зависит от реализации. Целочисленные типы по умолчанию знаковые. unsigned int = unsigned.

Логический тип

Язык Си до C99 — вообще нет.

С99: _Bool: 0, 1; в stdbool.h соответственно задефайнены bool: false, true (допускается раздефайнить и переопределить).

Язык Си++: bool: false, true. В VC++ 4.2 это на самом деле int (4 байта); >=5.0 — встроенный тип размером 1 байт.

Windows (VC++): WinDef.h: BOOL: FALSE, TRUE; на самом деле это int. WinNT.h: BOOLEAN: FALSE, TRUE. На самом деле это BYTE, который сам является unsigned char.

Выводы: всегда пишем bool: false, true, но до C99 дефайним сами; в C99 и дальше подключаем stdbool.h; в Си++ просто используем.

LabWindows/CVI 9

In LabWindows/CVI, characters are signed, unless you explicitly declare them unsigned. The types float and double conform to 4-byte and 8-byte IEEE standard formats.

Знаковость и размер, битТипы
s8char
u8
s16short
u16
s32int, long; int32
u32uInt32
s64long long; __int64
u64unsigned __int64, uInt64
32float
64double, long double; float64
32pointers (void *)
32enum

Microsoft Visual C++ 2010

Variables of type char are promoted to int as if they are type signed char by default, unless the /J compilation option is used. In this case they are treated as type unsigned char and are promoted to int without sign extension.

Размер, битТипы
8bool, char
16short
32int, long
64long long
n__intn (n = 8, 16, 32, 64, 128)
32float
64double, long double

Windows Data Types

AVR GCC

По умолчанию (Atmel Studio 6.1) в настройках включена беззнаковость char.

Размер, битТипы
8char
16(short?,) int
32long
64long long
32float, double
16pointers

Итак, главное отличие от компьютерных компиляторов — 16-битный int (вместо 32). Можно его вообще не использовать, а писать short.

Приоритет операций

Лексемы Операция Класс Приоритет Ассоциативность
имена, литералы простые лексемы первичный 16 нет
a[k] индексы постфиксный 16 слева направо
f(…) вызов функции постфиксный 16 слева направо
. прямой выбор постфиксный 16 слева направо
-> опосредованный выбор постфиксный 16 слева направо
++ -- положительное и отрицательное приращение префиксный 16 слева направо
(имя типа) {init} составной литерал (C99) постфиксный 16 слева направо
++ -- положительное и отрицательное приращение постфиксный 15 справа налево
sizeof размер унарный 15 справа налево
~ побитовое НЕ унарный 15 справа налево
! логическое НЕ унарный 15 справа налево
- + изменение знака, плюс унарный 15 справа налево
& адрес унарный 15 справа налево
* опосредование (разыменование) унарный 15 справа налево
(имя типа) приведение типа унарный 14 справа налево
* / % мультипликативные операции бинарный 13 слева направо
+ - аддитивные операции бинарный 12 слева направо
<< >> сдвиг влево и вправо бинарный 11 слева направо
< > <= >= отношения бинарный 10 слева направо
== != равенство/неравенство бинарный 9 слева направо
& побитовое И бинарный 8 слева направо
^ побитовое исключающее ИЛИ бинарный 7 слева направо
| побитовое ИЛИ бинарный 6 слева направо
&& логическое И бинарный 5 слева направо
|| логическое ИЛИ бинарный 4 слева направо
? : условие тернарный 3 справа налево
= += -= *= /= %= <<= >>= &= ^= |= присваивание бинарный 2 справа налево
, последовательное вычисление бинарный 1 слева направо

Присваивание — это не оператор, а выражение. Единственная правоассоциативная операция над двумя операндами.

Примеры
Короче Со скобками
x = y = zx = (y = z)
if (NULL == (p = malloc(1)))
i = 1<<bit1 | 1<<bit0i = ((1<<bit1) | (1<<bit0))
a&b | c&d(a & b) | (c & d)
&struct_pointer->struct_member&(struct_pointer->struct_member)
struct_pointer->struct_member++(struct_pointer->struct_member)++
a == (b & c)

LabWindows/CVI 9.0

Потоки

c:\Program Files\National Instruments\CVI90\bin\MultithreadingOverview.pdf

Выполнить функцию в другом потоке: CmtScheduleThreadPoolFunction() (прототип int CVICALLBACK ThreadFunction (void *functionData)), CmtWaitForThreadPoolFunctionCompletion(). DEFAULT_THREAD_POOL_HANDLE либо CmtNewThreadPool() и CmtDiscardThreadPool().

Через таймер: NewAsyncTimer(). Прототип int CVICALLBACK FunctionName (int reserved, int timerId, int event, void *callbackData, int eventData1, int eventData2). < 10 ms плохо. Все таймеры одной программы выполняются в одном потоке.

3 способа защитить данные: Thread Lock, Thread-Safe Variable, Thread-Safe Queue.

Thread Lock

CmtNewLock(), CmtDiscardLock() — один раз, CmtGetLock() (из одного потока можно несколько раз подряд), CmtReleaseLock() (нужно ровно столько же раз) — каждый раз.

Консоль

Build → Target Settings → Create console application — чтобы стандартное окно.

SetStdioWindowOptions(10000, 0, 0); — чтобы не захватывало фокус при выводе.

Время

В «Windows 7» функция GetCurrentCVIAbsoluteTime() возвращает значения с дискретностью 1 мс. Аналогично функция clock() (CLOCKS_PER_SEC = 1000), но с ней всё работает намного быстрее.

LabWindows/CVI + VC++

Чтобы писать на C++, но при этом использовать библиотеки LabWindows/CVI, делаем так (на примере LabWindows/CVI 2013 + Visual Studio 2010sp1):

Стандартная библиотека языка Си используется из VC++, а не CVI; консоль операционной системы.

Если уже создан проект Console Application, и хочется добавить в него LabWindows, в свойствах сделать так (компилируется; другое не тестировал):

Microsoft Visual Studio

О строковый типах: «What are TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR (etc.)?» (оригинал), «Что такое TCHAR, WCHAR, LPSTR, LPWSTR,LPCTSTR (итд)» (перевод на «Хабре»). Выводы: если нужна ANSI-программа, которая будет работать только с ASCII и переносима на другие платформы, то используем GENERAL→CHARACTER SET→Use Multi-byte character set и тип char. Windows-стиль — это тип TCHAR, функции _tcscpy, _tcslen, _tcscat вместо strcpy, strlen, strcat (при этом всё равно, Use Multi-byte character set или Use Unicode Character set). 1 символ UNICODE (даже из набора ASCII) = 2 байта (используется то ли UTF-16, то ли UCS-2... Неважно). UNICODE-строка в коде: «L"Hello, World!\n"». Строка, зависящая от настроек компилятора: «_T("Или строка, зависящая от компиляции")», она же «TEXT("Или строка, зависящая от компиляции")». Макросы для конвертирования строк. Если в программе везде самому использовать char, но нужно вызывать windows-функции, принимающие TCHAR, причём чтобы всё работало независимо от настроек проекта, делаем так: #include <AtlBase.h> char *string = "Hello, World!"; OpenFile(CA2T(string)...

Библиотека «Boost»

Скачиваем с www.boost.org. Распаковываем (D:\local\programs), в VC++ 2010sp1 свойства проекта → Configuration Properties → C/C++ → General → Additional Include Directories: D:\local\programs\boost_1_55_0. Всё, можно пользоваться (теми библиотеками, которые больше ничего не требуют).

Javascript

Букмарклет «Title = address»

javascript:void(document.title=location.href);

Букмарклет «Сделать всё редактируемым»

javascript:document.body.contentEditable='true'; document.designMode='on'; void 0

Букмарклет для возвращения текстовых смайликов в «Контакте»

Протестировано 12.04.2014. Работает лишь с несколькими смайликами. Букмарклет: javascript: var images = document.getElementsByTagName("img"); for (i = 0; i < images.length; i++) { var image = images[i]; if (image.className == "emoji_css") { var smile_id = image.getAttribute("emoji"); var text_smile = ""; switch (smile_id) { case "D83DDE0A": text_smile = ":-)"; break; case "D83DDE12": text_smile = ":-("; break; case "D83DDE1A": text_smile = ":-*"; break; case "D83DDE29": text_smile = ":(("; break; case "D83DDE22": text_smile = ":'("; break; case "D83DDE14": text_smile = "3("; break; default: alert("Ошибка! Неизвестный emoji=" + smile_id); break; } if (text_smile == "") { continue; } var parent = image.parentNode; var text = document.createTextNode(text_smile); parent.replaceChild(text, image); parent.normalize(); --i; } } ; void 0;

Человекочитаемая функция:function vk_img_smiles_to_text() { var images = document.getElementsByTagName("img"); for (i = 0; i < images.length; i++) { var image = images[i]; if (image.className == "emoji_css") { var smile_id = image.getAttribute("emoji"); var text_smile = ""; switch (smile_id) { case "D83DDE0A": text_smile = ":-)"; break; case "D83DDE12": text_smile = ":-("; break; case "D83DDE1A": text_smile = ":-*"; break; case "D83DDE29": text_smile = ":(("; break; case "D83DDE22": text_smile = ":'("; break; case "D83DDE14": text_smile = "3("; break; default: alert("Ошибка! Неизвестный emoji=" + smile_id); break; } if (text_smile == "") { continue; } var parent = image.parentNode; var text = document.createTextNode(text_smile); parent.replaceChild(text, image); parent.normalize(); --i; } } }

Для «Фейсбука» аналогичную штуку не делал.

Вторая версия, 2015-01-17. Добавлена работа с классом emoji, добавлены несколько новых смайликов, убраны сообщения о неизвестных смайликах.


Пишите на site@caesarion.ru чем больше, тем лучше: любые отзывы, пожелания, комментарии, исправления грамматических ошибок, предложения — всё, что связано с этим сайтом, как с содержанием, так и с технической стороной.

Сайт в «Архиве интернета»

Valid HTML 4.01 Strict Valid CSS!

Последнее изменение этой страницы: May 05 2017 04:47:11 UTC