• Статус сервера/сайта в виде светофора/лампочки?

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    а смысл?

    поясню - где разместите? в рабочем помещении отдела ИТ? (иной раз в лице одного админа)...
    .. или в серверной? - там смысла еще меньше

    веселее пуш на смартфон, когда пропал пинг(или иной индикатор доступности) - тут уже можно и о 24/7 рапортовать

    и не факт что сложнее - если сервера закрыты от большой сети - ... но вам в любом случае нужны контролирующие узлы (или взаимный контролирующий сервис, фоном на каждом сервере) + облачное приложение, котрое, по запросу от "контролера" отправляет пуш

    ... это как бы вполне себе начальный уровень мобильных приложений, но эффективность выше, а по усилиям - еще вопрос что сложнее

    ps кстати да (привет Роман Мирр) могут быть готовые решения... то есть во множестве готовых решений, могут быть и такие, которые из коробки пушат алерты
    Ответ написан
    1 комментарий
  • Что делать с жалобой на торрент-клиент от хостинг-провайдера?

    hostmaster
    @hostmaster
    DevOps Engineer
    Любой кто участвует в раздаче bittorrent видит IP адреса всех активных участников, это используют компании нанятые правообладателями. Они подключаются с раздаче, собирают IP адреса и/или сохраняют часть сетевого трафика с этих IP для возможного доказательства в суде. Зачем они начинают писать жалобы провайдерам и шантажировать пользователей, так в некоторых европейских странах это грозит серьезным штрафом.

    Да провайдер VPN может вас сдать "с потрохами". "не ведем логов" это очень не конкретная формулировка, если они пришли к вам значит логи есть. Они могут называть это метаинформацией но это все равно логи.

    Поэтому внимательно читаем правила использования и проверяем репутацию провайдеров. Проверяем разрешено ли использование bittorrent и что провайдер будет делать при получении DMCA notice. Не гонимся за дешевизной.

    На вопрос что делать. Предположим вы в России, правообладатель скорее всего нет, где провайдер VPN не очень важно. Тогда Вам практически ничего не грозит, вы вне их юрисдикции. Подавать на Вас в местный суд долго дорого и бесперспективно, по этому лучше бы Вам все отрицать. Провайдер может Вас сдать, однако вряд ли будет это делать без решения суда иначе это серьезное нарушение защиты персональных данных. Максимум на что они пойдут это отключат Ваш аккаунт. Поэтому "нет не качал, не знаю, не видел, не в курсе вообще о чем вы"
    Ответ написан
    Комментировать
  • Как пиарить паблик, контент которого противоречит правилам рекламы вКонтакте?

    nicepotato
    @nicepotato
    Дизайн всего (ну почти)
    посмотрите как делают топовые группы типо лепры и тд.. в мате замазывают буквы например. То, что мат-понятно, правилам не противоречит. По другому никак, особенно если пабл станет крупным.
    Ответ написан
    3 комментария
  • Это считается плагиатом сайта?

    Stalker_RED
    @Stalker_RED
    Плагиатят цвета, ага, так и запишем.
    Ese9I9.png
    Ответ написан
    Комментировать
  • Как добавить кода в ajax отправку формы?

    Exploding
    @Exploding
    wtf?
    Ну можно использовать метод ajaxComplete еще. Он кстати уже после ajaxSuccess срабатывает и содержит всё включая ошибки, результат и т.д.
    Почитайте, может подойдет...
    $(document).ajaxComplete(function(event, xhr, options){
    //...
    });

    Спойлер

    Cломался хайлайтинг js-a или он и не работал? оО
    Ответ написан
    1 комментарий
  • В таблице может быть несколько первичных ключей?

    megafax
    @megafax
    web-программист
    Первичный ключ может быть только один.
    НО
    Первичный ключ может быть по нескольким полям. Это иногда может вводить в заблуждение, что их несколько, но это не так. Он всегда только один.
    Ответ написан
    3 комментария
  • Как написать запрос с "USE INDEX (artist_2)" используя kohana 3 orm?

    @romalu Автор вопроса
    Всем спасибо за помощь, для себя выбрал путь переопределения методов классов в приложении.
    Добавляем метод в ORM (application/classes/ORM.php):
    <?
    class ORM extends Kohana_ORM {
    
    	public function use_index($index)
    	{
    		$this->_db_pending[] = array(
    			'name' => 'use_index',
    			'args' => array($index),
    		);
    		return $this;
    	}
    }

    И прописываем нужное в application/classes/Database/Query/Builder/Select.php
    <?
    class Database_Query_Builder_Select extends Kohana_Database_Query_Builder_Select {
    
    	protected $_use_index = NULL;
    
    	public function use_index($index)
    	{
    		$this->_use_index = $index;
    
    		return $this;
    	}
    
    	public function compile($db = NULL)
    	{
    		if ( ! is_object($db))
    		{
    			// Get the database instance
    			$db = Database::instance($db);
    		}
    
    		// Callback to quote columns
    		$quote_column = array($db, 'quote_column');
    
    		// Callback to quote tables
    		$quote_table = array($db, 'quote_table');
    
    		// Start a selection query
    		$query = 'SELECT ';
    
    		if ($this->_distinct === TRUE)
    		{
    			// Select only unique results
    			$query .= 'DISTINCT ';
    		}
    
    		if (empty($this->_select))
    		{
    			// Select all columns
    			$query .= '*';
    		}
    		else
    		{
    			// Select all columns
    			$query .= implode(', ', array_unique(array_map($quote_column, $this->_select)));
    		}
    
    		if ( ! empty($this->_from))
    		{
    			// Set tables to select from
    			$query .= ' FROM '.implode(', ', array_unique(array_map($quote_table, $this->_from)));
    		}
    
    		if ($this->_use_index !== NULL)
    		{
    			// Use index
    			$query .= " USE INDEX (" . $this->_use_index . ")";
    		}
    
    		if ( ! empty($this->_join))
    		{
    			// Add tables to join
    			$query .= ' '.$this->_compile_join($db, $this->_join);
    		}
    
    		if ( ! empty($this->_where))
    		{
    			// Add selection conditions
    			$query .= ' WHERE '.$this->_compile_conditions($db, $this->_where);
    		}
    
    		if ( ! empty($this->_group_by))
    		{
    			// Add grouping
    			$query .= ' '.$this->_compile_group_by($db, $this->_group_by);
    		}
    
    		if ( ! empty($this->_having))
    		{
    			// Add filtering conditions
    			$query .= ' HAVING '.$this->_compile_conditions($db, $this->_having);
    		}
    
    		if ( ! empty($this->_order_by))
    		{
    			// Add sorting
    			$query .= ' '.$this->_compile_order_by($db, $this->_order_by);
    		}
    
    		if ($this->_limit !== NULL)
    		{
    			// Add limiting
    			$query .= ' LIMIT '.$this->_limit;
    		}
    
    		if ($this->_offset !== NULL)
    		{
    			// Add offsets
    			$query .= ' OFFSET '.$this->_offset;
    		}
    
    		if ( ! empty($this->_union))
    		{
    			foreach ($this->_union as $u) {
    				$query .= ' UNION ';
    				if ($u['all'] === TRUE)
    				{
    					$query .= 'ALL ';
    				}
    				$query .= $u['select']->compile($db);
    			}
    		}
    
    		$this->_sql = $query;
    
    		return parent::compile($db);
    	}
    
    }

    На заметку, в методе compile я дописал строки в исходный метод compile
    if ($this->_use_index !== NULL)
    		{
    			// USE INDEX
    			$query .= " USE INDEX (" . $this->_use_index . ")";
    		}

    Теперь можно использовать ORM:
    ORM::factory('Mp3')->use_index('artist_2')->where('artist', '=', $artist_name)->where('id', '>', $start_mp3_id)->order_by('id')->limit(10)->find_all();
    Ответ написан
    Комментировать
  • Слышали ли вы об авторизации через email?

    foxytrail
    @foxytrail
    Для меня, как для пользователя, это все усложняет.
    Я хочу войти на сайт, а не отвлекаться на вкладку с почтой. И то, если такая вкладка открыта и почта пришла сразу.

    Кто сейчас не пользуется менеджерами паролей?
    Между двумя сайтами с идентичным содержимым и функционалом, различающихся только системой входа, выберу классический вариант.
    Ответ написан
  • Как создать виджет сообщества в vk?

    @Gesparo Автор вопроса
    Fullstack разработчик
    Итак, задачу все же удалось решить. Опишу способ решения этой задачи для тех, кто подписался и для тех, кто столкнется с аналогичной задачей.

    Предварительные условия:
    Необходимо создать iframe приложение и добавить его в сообщество. Насколько я понял - это необходимо только для создания ключа ( чтобы можно было управлять виджетом на стороне сервера ) и первоначального добавления виджета на страницу.

    Iframe приложение должно "смотреть" на страницу где будет вот такой вот код:
    index.html:
    <!doctype html>
    <html lang="ru">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    
        <!-- Подключаем jquery -->
        <script src="https://code.jquery.com/jquery-1.12.4.min.js" defer></script>
        <!-- Подключаем VK -->
        <script src="https://vk.com/js/api/xd_connection.js?2"  type="text/javascript" defer></script>	
    	
        <!-- Подключаем скрипт регулировки высоты -->
        <script src="/vk_height.js" defer></script>
    	
    </head>
    <body style='text-align:center;padding-top:50px;' id='body'>
    	<a href="javascript:void(0)" id="set-permission">Создать ключ доступа к виждету сообщества</a>
    	<br>
    	<br>
    	<a href="javascript:void(0)" id="set-widget">Добавить виждет в сообщество</a>
    </body>
    </html>


    vk_height.js:
    // инициализация вк
    VK.init(, function() { 
         console.log('Init successful');
      }, function() { 
         console.log('Error init');
    }, '5.73'); 
    
    // функция дня изменения размера окна в зависимости от содержимого страницы
    function autosize(width) {
        //Проверяем элемент body на наличие.
        if (!document.getElementById('body')) {
            alert('error');
            return;
        }
        // Успешно ли подключен ВК скрипт
        if (typeof VK.callMethod != 'undefined') {
            /*
            Вызываем функцию vk js api для управления окном.
            VK.callMethod('функция', параметры)
            В данном случае у нас - VK.callMethod('изменение_размеров_окна', ширина, высота);
            Так же добавляем еще 60 пикселей что бы было небольшое расстояние.
            */
            VK.callMethod('resizeWindow', 840, document.getElementById('body').clientHeight + 60);
        } else {
            alert('error #2');
        }
    }
    
    $(document).ready( function(){
        //Вызываем функцию регулировки высоты каждые пол секунды.
        setInterval('autosize(607)', 500); 
    	
    	$('#set-permission').on('click', function(e) {
    		e.preventDefault();
    		
    		// запрос прав доступа для дальнейшего обновления данных посредством крона
    		// после запрса создается ключ, который можно посмотреть на странице управления сообществом
    		// его и нунжно будет применить для обновления данных в виджете через сервер
    		// дока прав тут https://vk.com/dev/permissions
    		// дока метода тут https://vk.com/dev/clientapi?f=3.+showGroupSettingsBox
    		VK.callMethod("showGroupSettingsBox", 64);
    	});
    	
    	$('#set-widget').on('click', function(e) {
    		e.preventDefault();
    		
    		// запрос установки виджета
    		// типы виджетов можно глянуть тут https://vk.com/dev/objects/appWidget
    		// как подключить виджет можно глянуть тут https://vk.com/dev/apps_widgets
    		VK.callMethod('showAppWidgetPreviewBox', 'text', 'return {' + 
    			'"title": "Цитата",' + 
    			'"text": "Текст цитаты"' + 
    		'};');
    		
    		// типы событий, генерируемых после выполнения запроса на установку виджета можно глянуть тут https://vk.com/dev/apps_widgets
    		// работа с событиями вк https://vk.com/dev/Javascript_SDK?f=4.1.+VK.addCallback
    		VK.addCallback('onAppWidgetPreviewSuccess', function f(data){ 
    			alert("Виджет успешно добавлен"); 
    		});
    	});	
    	
    });


    После создания данных страниц у вас появится возмжность создать ключ (который будет доступен из управления сообществом) и создание простого виджета

    Серверную часть я полностью описывать не буду и покажу только само тело запроса, главное запросить данные через culr по ссылке https://api.vk.com/method/ (Вот гайд)

    Сам запрос:
    $api = new \App\Api\Main\Vk(['access_token' => 'ключ_корый_мы_сгенерировали_первой_кнопкой']);
        $api->request(
            'appWidgets.update',
            [
                'type' => 'list',
                'code' => '
                    var users = API.users.get({"user_ids": [11111, 22222, 33333]});
                    
                    return { 
                      "title": "Конкурс за призы", 
                      "rows": [
                                  { 
                                      "title": users[0].first_name + " " + users[0].last_name, 
                                      "icon_id": "id11111",
                                      "descr" : "1 место - 2000 баллов",
                                      "button" : "Результаты конкурса",
                                      "button_url" : "https://vk.com/link"
                                  },
                                  { 
                                      "title": users[1].first_name + " " + users[1].last_name, 
                                      "icon_id": "id2222",
                                      "descr" : "2 место - 1890 баллов",
                                      "button" : "Правила и призы",
                                      "button_url" : "https://vk.com/link"
                                  },
                                  { 
                                      "title": users[2].first_name + " " + users[2].last_name, 
                                      "icon_id": "id22222",
                                      "descr" : "3 место - 1890 баллов",
                                      "button" : "Хочу на марафон",
                                      "button_url" : "https://vk.com/link"
                                  }
                             ]
                };'
            ]
        );


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

    Вышенаписанный php код можно добавить в крон, автоматизировать и наслаждаться жизнью. И на последок - вот пример рабочего кода в сообществе (сорян за стили, и некоторые замазанные части, мне лень было делать нормальный скрин):
    5a9e7f04c5275110898228.png
    Ответ написан
    5 комментариев
  • Как хранить версии текстов?

    @res2001
    Developer, ex-admin
    Можно версионность организовать на основе одной таблицы, достаточно добавить в таблицу поле с timestamp. При изменении просто добавляем новую запись с новым timestamp. Для выбора текущей записи, выбираем запись с наибольшим timestamp. Легко делается интерфейс для просмотра изменений и т.п.
    Для удаления, нужно завести поле состояния, куда будет писаться признак удаления, физически записи не удалять.
    Подобную схему таблиц с историей неоднократно видел в банковском софте.
    Ответ написан
    Комментировать
  • Клиент на Upwork угрожает международным судом, возможно ли это?

    kumaxim
    @kumaxim
    Web-программист
    Допустим, я и Вы - оба граждане Российской Федерации. Мы с Вами подписали договор, по которому я Вам плачу условные 5 т.р. за 10 часов Вашей работы в месяц. Все у нас было хорошо 6 месяцев, однако, потом с моей стороны возникли проблемы, скажем клиент/партнер меня кинул, на счете у меня осталось 25 рублей, откуда брать денег не понятно. В данном случае, не получая денег от меня Вы останавливайте работу и имеете право подать на меня в суд с требованием взыскать условныу 5 т.р., которые я Вам задолжал. С Вашей стороны, да и со стороны закона все чисто, гладко и ровно.

    Теперь давайте переместимся на мою сторону. Денег у меня на счете сейчас нет и не предвидится. Взять бысто деньг мне не от куда. С Вами по существу мне спорить не о чем. Я прекрасно понимаю, что если Вы получите решение суда и предъявите его приставу, то мой счет будет очень быстро заблокирован и как-то рассчитаться с Вами я не смогу. В таком случае, моей стратегий будет затягивание времени. Скажем, Вы подаете на меня в суд, я в суде заявил возражение, мол истец не выполнил в полной мере процедуру досудебного урегулирования конфликтов, предусмотренную договором. Разумеется, в нашем договоре есть пункт типа "Все споры и претензии решаются путем переговоров...", однако, не прописан их формат, условия согласования и т.п. На этот момент я давлю и прошу отложить рассмотрение дела по существу на 8 недель. Затем, через 2 месяца я предоставлю в суд справку о том, что мол ложусь в стационар на неделю, поэтому присутствовать не могу и т.п.

    Всеми этими действиями я добиваюсь одного - максимально отсрочить блокировку моего счета, как план минимум. Мне это нужно для того, чтобы найти способ залатать дыру, которая у меня появилась из-за недобросовестных действий моего клиента/партнера. Для того чтобы Вы не подали на меня в суд вовсе, я могу начать докапываться до всяких мелочей, в духе а вот тут две запятые не в том месте... либо я могу начать пугать Вас, мол по Вашей вине у меня вот сайт упал, я понес убытки, для тебя это такая-то статья ГК РФ... либо я могу развести Вас на какое-то правонарушение, и имея на руках на Вас компромат сказать: "Да, я Вам должен условные 5 т.р.,однако, если Вы подадите на меня в суд, тогда я достану вот эти вот факты и заставлю Вас заплатить условные 10 т.р." Эти дела никак не связаны, однако, в Вашей голове промелькнет: "Да ну его нафиг, не буду с этим му###м связываться", чего мне собственно и нужно.

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

    В Вашем случае, Вы должны вспомнить одно замечательное выражение: "Последнюю работу я делаю бесплатно". Автора, к сожалению, не помню, но суть от этого не меняется. У Вас наступил плохой случай, последний этап работы Вам никто не оплатит. Примите это как факт, запишите этого клиента в свой список недобропорядочных контрагентов и больше с ним не работайте.

    Категорически нельзя соглашаться на предложение Вашего клиента получить оплату за пределами Upwork. Категорически нельзя как-то оскорблять оппонента или его ближайшее окружение. Вы не должны дать ему ни единого повода, чтобы разыграть другую карту. Ни в коем случае не опускайтесь до уровня оппонента, если он начинает вести себя как быдло. На угрозу про суд отвечай: "Хорошо, поговорим в суде вместе с моим юристом".

    Мой главный совет - не будь мудаком, как в данной ситуации, так и вообще по жизни.
    Ответ написан
    4 комментария
  • Кто может объяснить что такое сайты с кейсами cs go?

    kawabanga
    @kawabanga
    А что вам интересно то?

    Гэмблинг стал основной игр как раз с CSGO. Когда Valve запустили систему кейсов, но ключик сделали платным. Т.Е. раз в неделю тебе падает кейс, но чтобы открыть его, тебе надо потратить 160 руб. В большинствен случаев падало дерьмо, стоимостью менее 10 рублей. Но иногда, в некоторых кейсах есть скины оружия стоимостью по 100К (dragon lore, или крутые ножи, гуглите там есть ценники). Посмотрите видеообзоры - самые дорогие инвентари кс го, чтобы понимать о каких суммах тут речь идет.

    И вот, благодаря жадинам из Valve, стали появляться беспроигрышные лотерейки -вебсайты.

    Точнее было три основных направления:
    1) Ставки - лучший сайт csgolougne
    2) Рулетка - но их позакрывали, после того как на Valve наехали по этому поводу.
    3) Лотерейки.

    Лотерейки и ставки спонсируют топовые соревнования в России. И там крутиться очень много денег.
    Ответ написан
    7 комментариев
  • Что должен знать каждый С++ программист?

    saboteur_kiev
    @saboteur_kiev Куратор тега C++
    software engineer
    Каждый C++ программист должен уметь пользоваться поисковыми системами.
    Особенно в тех случаях, когда он собирается задать вопрос, который за него уже задавали множество раз, и на который можно найти готовые ответы.
    Ответ написан
    Комментировать
  • Какой принцип работы нескольких операторов ->?

    @kayart
    Это называется chaining - цепочка вызовов функций. Благодаря тому, что функция возвращает объект (чаще всего this), можно вызывать такие функции подряд, не прописывая их отдельно.

    Достаточно поискать в гугле запросы в стиле "PHP Chaining"
    В качестве примера - вот
    Ответ написан
    Комментировать
  • Авторизация на DLE сайте через PHP как сделать?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    как любой скрипт авторизации на любом сайте с POST параметрами и куками,
    ну может еще CSRF
    Ответ написан
    Комментировать
  • Как правильно проверить синтаксис PHP?

    BenderLib
    @BenderLib
    JS
    Извините, но у меня не хватило терпения смотреть на данный код, он ужасен.
    Ответ написан
    6 комментариев
  • Может ли планшет принимать радио сигнал?

    Moskus
    @Moskus
    Любое электронное устройство, имеющее определенные компоненты, может служить, при неких обстоятельствах, приемником радиосигналов, в которых используется амплитудная модуляция. То есть принимать-то такое устройство может любые сигналы в определенном диапазоне частот, но только сигнал с амплитудной модуляцией может быть им преобразован в понятную речь. Возможно это благодаря тому, что какая-то часть схемы устройства эквивалентна детекторному радиоприемнику. Свою роль могут играть не только реальные электронные компоненты, но и такие вещи, как паразитная емкость между проводниками, индуктивность динамиков, длинные проводники, играющие роль антенны. Сигнал, чтобы его принять таким образом, должен быть достаточно сильным.
    Ответ написан
    Комментировать
  • Как научиться учить программирование?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    А просто со временем, до всех доходит, что программирование это не интересные исследования, познания неведомого как в фантастике, прикручивание двумя кликами новых движков.
    А на деле - это еще и множество рутинной и кропотливой работы, которая по сути - скучная, однообразная, И ее процентов 80.

    Вы это наконец поняли. Какую мотивацию вы хотите от нудной и кропотливой работы - неясно. Мотивация может быть в зарплате, в создании своего продукта, если он есть. А так - человек должен уметь мотивировать себя сам, а не ждать пока его рассмешат клоуны.
    Ответ написан
    4 комментария
  • Как можно закрепить своё понимание нового стандарта ES6?

    Stalker_RED
    @Stalker_RED
    Пару месяцев назад приняли ES8, а вы закрепляете ES6?

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

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

    Также не стоит забывать, что браузеры при реализации этих "фич" могут запаздывать на годы. Те-же промисы не работают в IE и никогда работать не будут.
    Ответ написан
    1 комментарий