Как стать автором
Обновить
25
0
Дмитрий Корольков @funnybanana

Программист.

Отправить сообщение

теперь давайте установим PHP (Язык программирования).

Это вы хорошо уточнили...

И вы начинаете с установки PHP (языка программирования), но для windows пользователей зачем то отправляете качать open server вместо https://www.php.net/downloads.php

Для чего именно open server, а не скажем VertrigoServ могли бы объяснить..

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

Как по мне эта статья не имеет ценности для хабра... Таких статей, с таким же кодом тут с десяток.

а ещё можно туда можно воткнуть вебкамеру вроде такой:

и сделать видеонаблюдение на лестничной клетке.

А никто из вас господа не рассматривал его как роутер/коммутатор?

У меня в коридор приходят 5 кабелей от интернет-розеток по всей квартире + провод от провайдера, присматриваюсь к такому вот мини-пк у которого 6 портов:

планировал поставить туда openWRT или накатить обычный debian поставить накопитель на пару Тб и использовать его вместо роутера и коммутатора, развернуть там качалку торрентов, и сервер. Но вот я ни разу не сис. администратор и не уверен что эти порты можно использовать именно так.

Я для tg бота использовал wit.ai, ещё на том этапе когда они тренили свой движок распознавания речи. Но даже тогда русский очень неплохо распознавался. Из плюсов - цена (бесплатно), из минусов - не поддерживаются длинные фразы. У меня был бот который в телеге аудиосообщения в текст переводил, ну и дома я управляю некоторыми девайсами с помощью этого сервиса (собственно для этого он и задумывался)

Тоже хотел свой icq оживить, пароль помню…
У друга моя переписка в истории сообщений есть, правда последнее сообщение там было в 2017, а вместо имени я подписан как [DELETED].
Написал в саппорт, сказал что хочу пользоваться их мессенджером, на что мне сказали идти лесом.
Ну ок, с такой политикой им никакие обновления клиентов не помогут.

P.S у меня ещё пол тыщи визиток есть где мой UIN указан, но проблема вот что ещё пол тыщи визиток на руках у людей… Впредь буду обходить все продукты от mail стороной.
дробь указывается точкой.
Конструктивная критика:

К юзабилити большие вопросы.
попробовал почитать там пример… выходит очень медленно потому что нужно вправо тянуться что бы отметить слово которое знаешь. перевод тоже смотреть нужно в другой части экрана…
Меню слева вообще во время чтения нужно скрывать.
по хорошему счёту скрыть нужно всё кроме текста.
выделение сделать менее ярким.
показ перевода сделать не справа а под текстом который был переведён.
сделать комбинацию клавиш для слов которые знаешь (двойной клик или шит+клик)

я так понимаю каждое слово храниться в БД, а у каждого пользователя есть таблица в которую вписывается айди слова + его статус.
представляю сколько будет весить БД если сайтом будут активно пользоваться… но хрен с ним с весом, со скоростью чтения из такой БД что будет?

P.S а так идея конечно интересная, а главное совсем простая в реализации…
Ну и в добавок в первом цикле можно проверять (если массив отсортирован)
if (arr[i] > val) break;

и не крутить лишний раз цикл если число в массиве больше чем искомое…
Для меня в первую очередь была бы интересна та активность пользователей кто в первую очередь побегут чистить свою историю… Так что возможно это будет не удаление а перемещение истории в папку «Есть что скрывать»
Кстати про БП, там ведь кулер тоже шумит…
он уже не работает.

Как вариант выкрутился установив переключение и на ctrl+Shift и на alt+Shift — при этом срабатывает переключение клавиатуры на Shift+Ctrl (немного неудобно сперва жать шифт, ведь привык с ctrl нажимать комбинацию, но уже лучше чем CapsLock)

image
Минуточку:
Также сообщается, что патч для Linux будет по умолчанию включать kpti и на компьютерах с процессорами AMD, вызывая соответствующее падение производительности.


Зачем это делать если об уязвимости АМД процессоров ничего не известно?
P.S сижу на AMD a10
Ну вот, судя по комментариям мне просто необходимо изредка вываливать свой «неформат» ибо про PSR-2 не слышал, пойду почитаю. А на счёт else if — так короче, строк меньше, больше строк вмещается на экран — мне удобнее читать (только мне, ибо в команде не работаю, кодом обычно не делюсь)

И не надо ругаться что не слышал про это соглашение, вроде мониторю хабр регулярно, про php читаю всё…
Автора уже дважды за такие посты закидывали минусами…
При этом ему по второму кругу задают одни и те же вопросы…
Мне же понятно что ему просто интересно собрать свой (хоть и сомнительный) велосипед…
На самом деле я тоже люблю велосипеды, но не готов их публиковать на хабре.
Как пример приведу один php файл который использую для sql запросов (тут не весь функционал а лишь тот который мне нужен для определенного проекта):
200 строк кода на php (не для слабонервных)
<?php
class SQLCONFIG {
	private $config = [
		["host" => "localhost", "username" => "root", "password" => "24022017", "database" => "bd1", "charset" => "utf8"],
		["host" => "localhost", "username" => "root", "password" => "24022017", "database" => "bd2", "charset" => "utf8"]
	];
	function getConfig($def = 0){
		if (isset($this->config[$def])) return (object)$this->config[$def];
	}
}
class SQL extends SQLCONFIG{
	private $columns, $rows, $table, $output, $operation, $where, $group, $order, $limit, $join = '', $query;
	public $sql;

	function __construct($def = 0){
		$config = $this->getConfig($def);
		if (empty($config)) {
			$this->error("Отсутствуют настройки для подключения.");
		}else{
			$this->sql = mysqli_connect($config->host, $config->username, $config->password) OR $this->error();
			mysqli_select_db($this->sql, $config->database) OR $this->error();
			mysqli_set_charset ($this->sql, $config->charset) OR $this->error();
		}
	}

	function __destruct(){
		@mysqli_close($this->sql);
	}

	public function close(){
		$this->clear();
		mysqli_close($this->sql);
		return;
	}

	public function select($table, $columns = "*", $output = "arr"){
		$this->operation = __FUNCTION__;
		$this->table = $this->columns = ""; $this->output = $output;
		$this->table = "`{$table}`";
		if (!is_array($columns)) $columns = explode(",", $columns);
		foreach ($columns as $key => $value) $this->columns .= "{$this->table}.`".str_replace(".", "`.`", $this->check($value))."`,";
		$this->columns = rtrim($this->columns, ",");
		return $this;
	}

	public function where($where = ""){
		$this->where = (!empty($where)) ? " WHERE {$where}": "";
		return $this;
	}

	public function group($group = ""){
		$this->group = "";
		if (!is_array($group)) $group = explode(",", $group);
		foreach ($group as $key => $value) $this->group .= "`".str_replace(".", "`.`", $this->check($value))."`,";
		$this->group = rtrim($this->group, ",");
		$this->group = (!empty($group)) ? " GROUP BY {$this->group}" : "";
		return $this;
	}

	public function order($order = "", $sort = "DESC"){
		$this->order = "";
		$sort = strtoupper($sort);
		$sort = ($sort == "DESC" || $sort == "ASC" || $sort == "RAND()") ? $sort : "";
		if (!is_array($order)) $order = explode(",", $order);
		foreach ($order as $key => $value) $this->order .= "`".str_replace(".", "`.`", $this->check($value))."`,";
		$this->order = rtrim($this->order, ",");
		$this->order = (!empty($order)) ? " ORDER BY {$this->order} {$sort}" : "";
		return $this;
	}

	public function limit($start = 0, $count = 0){
		$this->limit = ($count > 0) ? " LIMIT {$start},{$count}" : "LIMIT {$start}";
		return $this;
	}

	public function join($table, $columns, $on, $prefix = ""){
		if (!is_array($columns)) $columns = explode(",", $columns);
		foreach ($columns as $key => $value){ 
			$dop = (!empty($prefix)) ? " as {$prefix}_{$value}" : "";
			$this->columns .= ",`".$this->check($table)."`.`".str_replace(".", "`.`", $this->check($value))."`{$dop}";
		}
		$this->join .= " INNER JOIN `".$this->check($table)."` ON {$on}";
		return $this;
	}

	public function insert($table, $data = array()){
		$this->operation = __FUNCTION__;
		$this->columns = $this->rows = ""; $this->table = "`{$table}`";
		if (isset($data[0])) {
			foreach ($data[0] as $key => $value) $this->columns .= "`".$this->check($key)."`,";
			foreach ($data as $key => $value) {
				$this->rows .= "(";
				foreach ($value as $values) $this->rows .= "'".$this->check($values)."',";
				$this->rows = rtrim($this->rows, ",")."),";
			}
		}else{
			foreach ($data as $key => $value) {
				$this->columns .= "`".$this->check($key)."`,";
				$this->rows .= "'".$this->check($value)."',";
			}
			$this->rows = "(".rtrim($this->rows, ",")."),";
		}
		$this->columns = rtrim($this->columns, ",");
		$this->rows = rtrim($this->rows, ",");
		return $this;
	}

	public function update($table, $data = array()){
		$this->operation = __FUNCTION__;
		$this->rows = ""; $this->table = "`{$table}`";
		foreach ($data as $key => $value) $this->rows .= "`".$this->check($key)."` = '".$this->check($value)."',";
		$this->rows = rtrim($this->rows, ",");
		return $this;
	}

	public function delete($table){
		$this->operation = __FUNCTION__;
		$this->table = $this->table = "`{$table}`";
		return $this;
	}

	public function count($table, $columns="*"){
		$this->precounter($table, $columns, __FUNCTION__); return $this;
	}
	public function sum($table, $columns){
		$this->precounter($table, $columns, __FUNCTION__); return $this;
	}
	public function min($table, $columns){
		$this->precounter($table, $columns, __FUNCTION__); return $this;
	}
	public function max($table, $columns){
		$this->precounter($table, $columns, __FUNCTION__); return $this;
	}
	public function avg($table, $columns){
		$this->precounter($table, $columns, __FUNCTION__); return $this;
	}
	private function precounter($table, $columns, $operation = "count"){
		$this->operation = $operation; $this->table = "`{$table}`";
		$this->columns = ($columns != "*") ? strtoupper($operation)."(`".$this->check($columns)."`) as ".strtolower($operation) : strtoupper($operation)."(*) as ".strtolower($operation);
		return;
	}

	public function query(){
		if ($this->operation == "select") {
			if ($this->output == "only") $this->limit = " LIMIT 0,1";
			$query = "SELECT {$this->columns} FROM {$this->table}{$this->join}{$this->where}{$this->group}{$this->order}{$this->limit};";
		}
		if ($this->operation == "insert") {
			$query = "INSERT INTO {$this->table} ({$this->columns}) VALUES {$this->rows};";
		}
		if ($this->operation == "update") {
			$query = "UPDATE {$this->table} SET {$this->rows}{$this->where}{$this->group}{$this->order}{$this->limit};";
		}
		if ($this->operation == "delete") {
			$query = "DELETE FROM {$this->table}{$this->where}{$this->group}{$this->order}{$this->limit};";
		}
		if ($this->operation == "count" || $this->operation == "sum" || $this->operation == "min" || $this->operation == "max" || $this->operation == "avg") {
			$this->rows = (!empty($this->group)) ? ",".str_replace(" GROUP BY ", "", $this->group) : "";
			$query = "SELECT {$this->columns}{$this->rows} FROM {$this->table}{$this->join}{$this->where}{$this->group}{$this->order}{$this->limit};";
		}
		return $query;
	}

	public function send($query = ""){
		$this->query = (empty($query)) ? $this->query() : $query;
		$res = mysqli_query($this->sql, $this->query) OR $this->error();
		if ($this->operation == "select" || $this->operation == "count" || $this->operation == "sum" || $this->operation == "min" || $this->operation == "max" || $this->operation == "avg") {
			$result = array();
			if ($this->output == "arr") while ($row = mysqli_fetch_assoc($res)) $result[] = $row;
			elseif ($this->output == "full") while ($row = mysqli_fetch_array($res)) $result[] = $row;
			elseif ($this->output == "only") $result = mysqli_fetch_assoc($res);
			elseif ($this->output == "object") while ($row = mysqli_fetch_object($res)) $result[] = $row;
			else{
				if ($res->field_count == 1 && $res->num_rows == 1)	{ 
					$result = mysqli_fetch_assoc($res);
					if (isset($result[$this->operation])) $result = (float)$result[$this->operation];
				}
			}
		}else if($this->operation == "insert"){
			$result = (int)mysqli_insert_id($this->sql);
		}else if($this->operation == "update"){
			$result = $res OR $this->error();
		}else if($this->operation == "delete"){
			$result = $res OR $this->error();
		}else{
			$result = true;
		}
		$this->clear();
		return $result;
	}

	public function operation($operation){
		$this->operation = $operation;
		return $this;
	}
	public function output($output){
		$this->output = $output;
		return $this;
	}

	private function error($error = ""){
		$error = (empty($error)) ? mysqli_error($this->sql) : $error;
		die("<div style='background-color:#e95656;color:#fff;font-size:16px;padding:20px;margin:20px;font-family:Consolas,monaco,monospace;'>{$error}</div>");
	}

	private function check($value){
		$value = mysqli_real_escape_string($this->sql, $value);
		return $value;
	}

	function clear(){
		$this->where = $this->group = $this->order = $this->limit = $this->join = "";
		$this->columns = $this->rows = $this->table = $this->output = $this->operation = $this->query = "";
	}

}

?>


И пару примеров:

<?php

include "sql.php";
$sql = new SQL(0); // 0 - первый конфиг подключения.
print_r($sql->select("temp")->send());
// Вернет все строки из таблицы temp
print_r($sql->select("temp", "id,name")->where("`id` > 0")->order("date")->limit(0,100)->send());

// а так же всякие там $sql->insert("temp", ["name" => "test"])->send();
// $sql->update("temp", ["name" => "test1"])->send();
// ещё join можно использовать... есть count, SUM, MIN, MAX, AVG...
?>


В полноэкранном режиме не работает мышь, в оконном режиме работает.

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

Конфиг на котором тестил: AMD A10-7890K, 16Гб ОЗУ видеокарта интегрированная в проц Radeon R7 (OS Ubuntu 16.04)

видео

Для показа у меня был стол, стул и старый ноутбук с Linux.

С релизом не забудьте про Linux, опубликуетесь в стим — я даже рублём помогу, очень нравятся подобные жанры.

P.S лет 20 назад играл в игру вроде хищника, так там игрок тоже по стенам бегал (без изменения глобальной гравитации) очень понравилось.
Согласен с автором, довольно непродуманная кнопка… что бы попасть на 9ю страницу нужно сперва пойти на 8ю…
В своей реализации я сделал модуль который на входе получает кол-во страниц и текущую страницу, затем просто в цикле генерирует ссылки и помещает их в блок, добраться до нужной страницы становится проще… выглядит это примерно так:

тут видео


(ссылки внутри так же прокручиваются колесом мыши)
А в PHP ещё хуже:


Ну вот обычно php ругают те кто в нём не разбирается…
Конец разработки запланирован на осень 2015 года.


image

узнаю в авторе себя… тоже 5 лет работаю над проектом и каждый раз переписываю его с нуля…
выглядит не эстетично, нужно бы добиться плавных линий…
image

Информация

В рейтинге
Не участвует
Откуда
Волгодонск, Ростовская обл., Россия
Дата рождения
Зарегистрирован
Активность