Algorithmic complexity - верхняя оценка сложности алгоритма. Например, оценка O(n) означает, что сложность линейная, то есть в простом случае проход по массиву осуществляется один раз; O(n2) - квадратичная, для каждого элемента массива проводится сравнение с каждым; Пузырьковая сортировка имеет оценку O(n*log(n)). Коротко почитать можно здесь
SELECT *
FROM (SELECT `page_id`, max(`datetime`) AS `datetime`
FROM `f_comments`
WHERE `user` = {$userId}
GROUP BY `page_id`) AS `my`
LEFT JOIN `f_comments` AS `other` ON `other`.`page_id` = `my`.`page_id`
WHERE `other`.`user` != {$userId}
AND `other`.`datetime` > `my`.`datetime`
Задача лёгкая, но... это же Вас интервьюируют, а не коллективный интернет-разум.
Для входящих - развести каналы DAHDI на разные контексты и/или написать небольшой IVR, который позволит звонящему выбрать номер, с которым его надо соединить.
Для исходящих - маршрут может определяться по caller-id звонящего, в том числе и по маске:
Для исходящих - маршрут может определяться по caller-id звонящего, в том числе и по маске:
exten => _8XXXXXXXXXX/111, 1, Dial(DAHDI/1/${EXTEN})
exten => _8XXXXXXXXXX/_2XX, 1, Dial(DAHDI/2/${EXTEN})
<?php
$rowblock = -2;
$rows = array();
foreach ($profile as $i => $user) {
if ($i%4 == 0) {
$rows[] = '<tr>';
$rows[] = '<tr>';
$rowblock += 2;
}
$rows[$rowblock] .= "<td><img src='/profile/user/{$user['pro_img']}'>";
$rows[$rowblock+1] .= "<td><p>{$user['pro_fam']} {$user['pro_im']} {$user['pro_otch']}<p>{$user['dol_name']}";
}
for ($i = $i%4; $i < 3; $i++) {
$rows[$rowblock] .= "<td>";
$rows[$rowblock+1] .= "<td>";
}
echo "<table>",implode('', $rows),"</table>";
?>
Знать нужно:
1. Предметную область на уровне достаточном, чтобы суметь переложить задачу, выраженную в терминах предметной области, в алгоритмы, необходимые для написания программы.
2. Язык программирования, достаточно эффективный для предметной области, общие алгоритмы и структуры данных.
3. Английский язык.
4. Общие разделы прикладной математики, например, комбинаторику, теорию погрешностей...
1. Предметную область на уровне достаточном, чтобы суметь переложить задачу, выраженную в терминах предметной области, в алгоритмы, необходимые для написания программы.
2. Язык программирования, достаточно эффективный для предметной области, общие алгоритмы и структуры данных.
3. Английский язык.
4. Общие разделы прикладной математики, например, комбинаторику, теорию погрешностей...
Если посмотреть на Google Maps Javascript API, то правильнее всего будет
var query = event.latLng.toUrlValue(15);
Если заранее неизвестен хотя бы общий вид функции, то, по моему, проще дизассемблировать программу и разобраться в вычислениях, чем пытаться определить взаимозависимости между 50 параметрами. Например, для такой функции двух переменных
зависимость от y сильно проявляется только в малой области значений x в районе x=b. А ведь функция может быть и кусочно-непрерывной, например
зависимость от y сильно проявляется только в малой области значений x в районе x=b. А ведь функция может быть и кусочно-непрерывной, например
Если сразу ко всем элементам определённых типов, скажем ко всем input, select и textarea - то по тэгам, если просто к разным элементам, то по классу.
По известному набору точек можно лишь предположить вид функции, например набор (-1, 0), (0, 0), (1, 0) может принадлежать как прямой y=0, так и синусоиде y=sin(πx) или полиному y=x3-x. Обычно вид функции выбирается из физической модели процесса, для которого получены данные.
Вставить вывод внутрь while
И не используйте функции mysql_*, они уже год как в статусе deprecated, переходите на mysqli_* или PDO.
while($data = mysql_fetch_array($qr_result))
echo "<div><h1>", $data['title'],"</h1><p>",$data['text'],"</p></div>";
И не используйте функции mysql_*, они уже год как в статусе deprecated, переходите на mysqli_* или PDO.
function monthDays(year, month) {
return (month == 2 ?
((year % 4 != 0 ||
(year % 100 == 0 && year % 400 != 0)) ? 28 : 29) :
(((month < 8 && (month & 1) == 0) ||
(month > 7 && (month & 1) == 1)) ? 31 : 30));
}
function dateDiff(date1, date2) {
var years, months, days, hours, minutes, seconds;
var y1, m1, d1, d2, dd;
years = date2.getUTCFullYear()-(y1 = date1.getUTCFullYear());
months = date2.getUTCMonth()-(m1 = date1.getUTCMonth());
days = (d2 = date2.getUTCDate())-(d1 = date1.getUTCDate());
hours = date2.getUTCHours()-date1.getUTCHours();
minutes = date2.getUTCMinutes()-date1.getUTCMinutes();
seconds = date2.getUTCSeconds()-date1.getUTCSeconds();
dd = 0;
if (seconds < 0) {
seconds += 60;
minutes--;
}
if (minutes < 0) {
minutes += 60;
hours--;
}
if (hours < 0) {
hours += 24;
days--;
dd = 1;
}
if (days < 0) {
days = monthDays(y1, m1)-d1+d2-dd;
months--;
}
if (months < 0) {
months += 12;
years--;
}
return {years: years, months: months, days: days,
hours: hours, minutes: minutes, seconds: seconds};
}
var d1 = new Date("10/7/1917");
var d2 = new Date('3/28/2014');
var diff = dateDiff(d1, d2);
console.log(diff.years+' лет, '+
diff.months+' месяцев, '+
diff.days+' дней, '+
diff.hours+' часов, '+
diff.minutes+' минут, '+
diff.seconds+' секунд');
Asterisk ставится на linux, вполне подходит debian или ubuntu. Функционал, который Вы описываете, реализуется без проблем. Для преобразования из аналога нужны платы или шлюзы FXS/FXO.
Хорошие платы выпускает Digium, например здесь можно подобрать комплектацию по типу шины (PCI/PCI-Express) и количеству FXO (внешних) и FXS (внутренних) аналоговых линий. В Вашем случае, если не будете использовать факс, то подойдёт AEX801E, её потом можно расширить с помощью модулей на 1 или 4 порта FXS/FXO.
Из IP-телефонов - Cisco Linksys SPA5xx (хороши, но дороги), Siemens Gigaset с радиотрубкой, Fanvil, Grandstream и прочие довольно дешёвые, но с качеством - как повезёт.
Хорошие платы выпускает Digium, например здесь можно подобрать комплектацию по типу шины (PCI/PCI-Express) и количеству FXO (внешних) и FXS (внутренних) аналоговых линий. В Вашем случае, если не будете использовать факс, то подойдёт AEX801E, её потом можно расширить с помощью модулей на 1 или 4 порта FXS/FXO.
Из IP-телефонов - Cisco Linksys SPA5xx (хороши, но дороги), Siemens Gigaset с радиотрубкой, Fanvil, Grandstream и прочие довольно дешёвые, но с качеством - как повезёт.
Первое предупреждение говорит о том, что Вы, скорее всего, не проверяете валидность переданных пользователем данных. Если это не данные от пользователя, то всё ещё хуже, обращение к массиву по несуществующему индексу - ошибка в логике работы программы.
Второе и третье предупреждения, как уже сказали, - результат ошибки в mysql_query, которая вернула false вместо идентификатора ресурса, скорее всего из-за неверного запроса. Грозит чем угодно, начиная от некорректного вывода элементов сайта и заканчивая дырой с SQL-инъекцией. Кроме того, использование mysql_* грозит непереносимостью сайта на следующую версию PHP, начиная с версии 5.5.0 эта библиотека в статусе depricated.
Второе и третье предупреждения, как уже сказали, - результат ошибки в mysql_query, которая вернула false вместо идентификатора ресурса, скорее всего из-за неверного запроса. Грозит чем угодно, начиная от некорректного вывода элементов сайта и заканчивая дырой с SQL-инъекцией. Кроме того, использование mysql_* грозит непереносимостью сайта на следующую версию PHP, начиная с версии 5.5.0 эта библиотека в статусе depricated.
IMHO, программирование, в первую очередь это не конкретные языки, а алгоритмы и данные. Если Вы можете построить алгоритм решения задачи и подобрать оптимальные для данного алгоритма структуры данных, то большая часть задачи уже решена. Перевести алгоритм на язык программирования (закодировать) - задача на порядок проще. По мере знакомства с конкретным языком кодирование будет проходить легче и эффективнее.
Английский выучить крайне желательно, именно на нём идёт практически вся официальная документация, на нём общается большинство разработчиков.
Полезно также освоить какой-нибудь язык низкого уровня, ассемблер или C (без плюсов), программирование на них позволяет легче понять, что скрывается за абстракциями языков высокого уровня.
Английский выучить крайне желательно, именно на нём идёт практически вся официальная документация, на нём общается большинство разработчиков.
Полезно также освоить какой-нибудь язык низкого уровня, ассемблер или C (без плюсов), программирование на них позволяет легче понять, что скрывается за абстракциями языков высокого уровня.
Путь в таблице `table` поле `field1` определено как UNIQUE (или PRIMARY KEY).
Добавление только новых
Добавление с заменой
Удаление
Добавление только новых
INSERT IGNORE INTO `table` (`field1`, `field2`, `field3`)
VALUES (`valA1`, `valA2`, `valA3`), (`valB1`, `valB2`, `valB3`)
Добавление с заменой
INSERT INTO `table` (`field1`, `field2`, `field3`)
VALUES (`valA1`, `valA2`, `valA3`), (`valB1`, `valB2`, `valB3`)
ON DUPLICATE KEY UPDATE `field2` = VALUES(`field2`), `field3` = VALUES(`field3`)
Удаление
DELETE FROM `table` WHERE `field1` IN (`valA1`, `valB1`)
var points = [{x: 0, y: 0}, {x: 0, y: 50}, {x: 10, y: 50}, {x: 10, y: 0}];
var segLen = [];
var totalLen = 0;
for (var i = 0; i < points.length-1; i++) {
var l = Math.sqrt((points[i+1].x-points[i].x)*(points[i+1].x-points[i].x)+
(points[i+1].y-points[i].y)*(points[i+1].y-points[i].y));
segLen.push(l);
totalLen += l;
}
var percent = 55;
var needLen = totalLen*percent/100;
for (var i = 0; i < points.length-1 && needLen > 0; i++)
if (needLen >= segLen[i]) {
// пройти путь points[i] - points[i+1]
needLen -= segLen[i];
} else {
x = points[i].x+(points[i+1].x-points[i].x)*needLen/segLen[i];
y = points[i].y+(points[i+1].y-points[i].y)*needLen/segLen[i];
// пройти путь points[i] - {x, y}
needLen = 0;
}
А что вообще показывает консоль при звонке с внутреннего на внутренний телефоны? Можете показать диалплан и вывод консоли?
Проверьте параметр canreinvite в sip.conf или users.conf. Если он установлен в yes у обоих пользователей, то после первичного соединения Asterisk предлагает ip-телефонам соединиться напрямую, естественно, что запись при этом не работает.
Подключить ещё один HDD, перенести на него /var/lib/mysql и смонтировать на этот путь