На самом деле на этой странице не только программирование, но и вёрстка, настройка операционных систем и всё такое.
Настройка transmission-daemon.
Обычно речь идёт о версии 5.3.
По значению. В том числе массивы.
И лишь объекты по ссылке. Чтобы по значению, надо clone: $newObj = clone $oldObj;
При этом в конце вызывается метод __clone()
, если он определён.
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);
Получить строку '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 являются лишь дополнительными именами целочисленного типа.
$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();
Обычно речь идёт о версии 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').
CREATE USER <user> WITH UNENCRYPTED PASSWORD '<password>';
CREATE DATABASE <db> OWNER <user>;
CREATE TABLE <table> (
id SERIAL,
x INT,
y INT,
PRIMARY KEY (id)
);
gpedit.msc — всякие политики, в том числе отключение автозапуска в XP (конфигурация компьютера → административные шаблоны → система)
msconfig — редактирование автозагрузки
control userpasswords2 — вход при загрузке без ввода пароля
bcdedit.exe (≥ Vista) — программа для редактирования того, что в < Vista называлось boot.ini.
diskpart (win7) — утилита для работы с разделами дисков, в том числе создания заргузочных флешек
UTF в консоли: cmd, chcp65001, свойства→шрифт→Lucida Console
всегда отображать все значки и уведомления на панели задач
вход без пароля: 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\, но сделать это не так-то просто):
net user Администратор *
net user Администратор /active:yes
regedit
:d:
(или другой диск, причём он может не совпадать с тем, который отображается в самих «Окнах»), cd windows\system32\config\
, copy system_no_wpa system
(либо можно запустить файловый менеджер, например, d:\totalcmd\totalcmd.exe
)
slmgr /ipk D4F6K-QK3RD-TMVMJ-BBMRX-3MBMV
. Или гуглить по запросу «windows 7 default key».
net user Администратор /active:no
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.
Обычно речь идёт о версии CSS 2.1.
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 варианта (причём ни один мне не нравится полностью, включая предложенный изначально с рамкой только снизу и оба варианта поведения браузеров):
a:hover img, a:focus img {
border-width: 2px 2px 4px 2px;
padding: 0;
margin: 0;
}
a:hover img, a:focus img {
padding: 0 0 2px 0;
border-width: 2px;
margin: 0;
}
a:hover img, a:focus img {
padding: 0;
border-width: 2px;
margin: 0 0 2px 0;
}
Закрывающие теги обязательны для всех элементов, кроме P (необязательно) и BR и HR (запрещено).
Ещё есть 3 вида списков и таблицы.
А ещё TT, I, B, BIG, SMALL, STRIKE, S, U — лишь последние 3 нерекомендуемые (то есть запрещённые в HTML 4.01 strict), но остальные тоже не следует использовать.
Желательно, хотя и не обязательно (should, а не must) использовать <
, >
, &
, "
вместо <
, >
, &
, "
(а вот одинарная кавычка '
в этом списке отсутствует). Речь не только о тексте, но и об атрибутах, в частности, атрибуте 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
).
char
— символ, минимум 8 бит
short int
= short
— целое, минимум 16 бит
int
— целое, возможно, естественное для машины (например, 16 или 32 бита)
long int
= long
— целое, минимум 32 бита
long long int
= long long
— целое, минимум 64 бита
float
— число с плавающей точкой одинарной точности
double
— число с плавающей точкой двойной точности
long double
— число с плавающей точкой повышенной точности
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; в Си++ просто используем.
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.
Знаковость и размер, бит | Типы |
s8 | char |
u8 | |
s16 | short |
u16 | |
s32 | int, long; int32 |
u32 | uInt32 |
s64 | long long; __int64 |
u64 | unsigned __int64, uInt64 |
32 | float |
64 | double, long double; float64 |
32 | pointers (void *) |
32 | enum |
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.
Размер, бит | Типы |
8 | bool, char |
16 | short |
32 | int, long |
64 | long long |
n | __intn (n = 8, 16, 32, 64, 128) |
32 | float |
64 | double, long double |
По умолчанию (Atmel Studio 6.1) в настройках включена беззнаковость char.
Размер, бит | Типы |
8 | char |
16 | (short?,) int |
32 | long |
64 | long long |
32 | float, double |
16 | pointers |
Итак, главное отличие от компьютерных компиляторов — 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 = z | x = (y = z) |
if (NULL == (p = malloc(1))) | |
i = 1<<bit1 | 1<<bit0 | i = ((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) |
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.
CmtNewLock()
, CmtDiscardLock()
— один раз, CmtGetLock()
(из одного потока можно несколько раз подряд), CmtReleaseLock()
(нужно ровно столько же раз) — каждый раз.
Build → Target Settings → Create console application — чтобы стандартное окно.
SetStdioWindowOptions(10000, 0, 0);
— чтобы не захватывало фокус при выводе.
В «Windows 7» функция GetCurrentCVIAbsoluteTime() возвращает значения с дискретностью 1 мс. Аналогично функция clock() (CLOCKS_PER_SEC = 1000), но с ней всё работает намного быстрее.
Чтобы писать на C++, но при этом использовать библиотеки LabWindows/CVI, делаем так (на примере LabWindows/CVI 2013 + Visual Studio 2010sp1):
copy ..\ProjectName\PanelName.uir PanelName.uir
.
Стандартная библиотека языка Си используется из VC++, а не CVI; консоль операционной системы.
Если уже создан проект Console Application, и хочется добавить в него LabWindows, в свойствах сделать так (компилируется; другое не тестировал):
О строковый типах: «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)...
Скачиваем с www.boost.org. Распаковываем (D:\local\programs), в VC++ 2010sp1 свойства проекта → Configuration Properties → C/C++ → General → Additional Include Directories: D:\local\programs\boost_1_55_0. Всё, можно пользоваться (теми библиотеками, которые больше ничего не требуют).
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 чем больше, тем лучше: любые отзывы, пожелания, комментарии, исправления грамматических ошибок, предложения — всё, что связано с этим сайтом, как с содержанием, так и с технической стороной.
Последнее изменение этой страницы: May 05 2017 04:47:11 UTC