• Какую GUI выбрать для Go?

    geebv
    @geebv
    Во всех случаях более чем достаточно web интерфейса
    Ответ написан
    Комментировать
  • С чего начинается CI?

    MaxDukov
    @MaxDukov
    впишусь в проект как SRE/DevOps.
    однозначно начните с GIT. и очень советую посмотреть статью про модель ветвления в гит - дабы не изобретать велосипед.
    Ответ написан
    Комментировать
  • С чего начинается CI?

    akubintsev
    @akubintsev
    Опытный backend разработчик
    CI - это автоматизированная сборка проекта на основе версионного контроля и прогон тестов.

    Собственно, начинать надо с задачи реализации деплоя.
    Деплой сделать - задача нетривиальная. Есть для этого разные инструменты и универсального решения нет. Отладить процедуру деплоя нужно для сборок в CI и для продакшена/стейджа.
    Лично я для своего последнего маленького проекта для выкладки в продакшн выбрал deploybot.com - в принципе всё, что нужно есть, в том числе и хорошая интеграция с DigitalOcean.

    Что касается инструмента для CI, то из бесплатных обычно пользуются Jenkins. Я пробовал в последнем проекте PHP CI - тоже годно, но не настолько гибкий инструмент.

    Выкладку на продакшн/стейдж можно настроить по-разному. Например по коммиту в специальную ветку, по ключевым словам в коммите или вообще вручную. На прод однозначно стоит делать выкладку вручную.

    А, еще один немаловажный момент. Для успешного функционирования этого всего дела нужно внедрить версионирование схемы БД и фикстуры (для CI).

    Жизненный цикл у нас был такой. Тимлид определяет некий не большой, но и не очень маленький набор фич, которые должны попасть в новую версию приложения. Все тикеты связаны с версиями. И поэтому может случится так, что даже готовую фичу он определит в другую версию продукта.
    Каждая готовящаяся к релизу версия получает свою ветку в git и там делается мердж нужных коммитов с фичами. Каждый коммит автоматически тестируется в CI.
    Когда все фичи сделаны и коммиты слиты, то можно залить на стейдж сервер и погонять вживую версию в условиях близких к боевым. И наконец, если всё хорошо, то делается деплой на продакшн.
    Ответ написан
    Комментировать
  • Как организовать переносимый пакет?

    @matperez
    Принципиально, вам нужно разделить изменение библиотеки и подключение ее к другим проектам через composer. Т.е. коммитить изменения "из любого проекта" не получится, только напрямую в библиотеку и потом вытягивать обновления в текущий проект.

    Если хотите фиксировать версию библиотеки в данном проекте, при описании приватной репы в composer.json можно указать номер ревизии или ветку (через атрибут reference)
    "source": {
                  "url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
                  "type": "git",
                  "reference":"master"
                }
    Ответ написан
    Комментировать
  • Как использовать API VK в Yii2?

    sanchezzzhak
    @sanchezzzhak
    Ля ля ля...
    Дополнение к первому ответу выше, практический пример в лоб.
    public $enableCsrfValidation = false;
    
    	public function actions()
    	{
    		return [
    			'social' => [
    				'class' => 'yii\authclient\AuthAction',
    				'successCallback' => [$this, 'successCallback'],
    			],
    		];
    	}
    
    /**
    	 * @param $client
    	 */
    	public function successCallback($client)
    	{
            $day = 86400;
    		$client_id = Yii::$app->request->get('authclient');
    		$attributes = $client->getUserAttributes();
    
            // VK
    		if($client instanceof VKontakte)
    		{
    			$auth_params = $client->getAccessToken()->getParams();
    			$email = ArrayHelper::getValue($auth_params,'email','');
                // Аватарка из VK да ПОБОЛЬШЕ!!!
                $vk_data_response = $client->api('users.get','POST',['uids'=>  $attributes['id'] , 'fields'=> 'photo_max_orig']);
                if($vk_data_response = ArrayHelper::getValue($vk_data_response,'response',false))
                {
                    $vk_data = array_shift($vk_data_response);
                    Yii::$app->session->setFlash('social_avatar', $vk_data['photo_max_orig']);
                }
    		}
    
    //...
    }
    Ответ написан
    6 комментариев
  • Какую IDE выбрать для Go?

    uvelichitel
    @uvelichitel Куратор тега Go
    habrahabr.ru/users/uvelichitel
    Вот здесь видно, что Andrew Gerrand и Brad Fitzpatrick, ведущие разработчики языка работают в Vim. Rob Pike и Russ Cox предпочитают Plan9port acme, здесь. Мне acme нравится.
    Ответ написан
    Комментировать
  • Как получить JSON из PHP в JS который формируется на странице?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    <script> var json_array = "<?= json_encode($jsonArray) ?>"; </script>
    Ответ написан
    2 комментария
  • Какую IDE выбрать для Go?

    voidnugget
    @voidnugget
    Программист-прагматик
    У delve интеграция с IDE' пока только в планах.
    С GDB бывает немного сложновато, у Atom'a нет его поддержки, есть SublimeGDB - ним можно пользоваться, ну и конечно же у emacs / vim тоже куча плюшек.
    Ответ написан
  • Где сертифицироваться Android разработчику?

    @olexandr7
    Думаю надо смотреть тут: https://developers.google.com/university/courses/mobile

    Или если точнее, то тут: www.pce.uw.edu/certificates/android-app-developmen...
    Ответ написан
    Комментировать
  • Стоит ли использовать, как стартовое IDE для с++ code::blocks?

    @endemic
    Поддерживаю Алексея Волегова, для начала текстовый редактор самое то. Если начинать с IDE то возникает много магии типа "чтобы запустить компиляцию надо нажать на эту кнопку". Текст и консоль дает большее понимание. А потом модно на IDE
    Ответ написан
    Комментировать
  • Авторизация Instagram через curl. Как сделать?

    Pjeroo
    @Pjeroo
    Веб-разработчик
    https://instagram.com/developer/ может лучше стоит воспользоваться API, а не заниматься не пойми чем?
    Ответ написан
    6 комментариев
  • Как обратиться к свойству объекта?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Можно напрямую указать this
    var myObject = {
    	prop1: function () {
    		console.log('Анимация прошла!');
    	},
    	prop2: function () {
    		$('div').animate({
    			opacity: 0.25
    		}, 100, function () {
    			this.prop1();
    		}.bind(this));
    	}
    }
    
    myObject.prop2();

    А вот вам использование паттерна «Модуль»
    var myObject = function () {
    	/*А тут можно много чего приватного создать*/
    	var _class = {
    		prop1: function () {
    			console.log('Анимация прошла!');
    		},
    		prop2: function () {
    			$('div').animate({
    				opacity: 0.25
    			}, 100, function () {
    				_class.prop1();
    			});
    		}
    	};
    
    	return _class;
    }();
    
    myObject.prop2();
    Ответ написан
    1 комментарий
  • Почему выскакивает ошибка #1064 при выполнении SQL запроса INSERT INTO?

    shaks
    @shaks
    во первых запрос должен иметь примерно такой формат:
    INSERT INTO `price` (`N`, `title`, `localsum`, `regionsum`, `rfsum`, `intersum`) VALUES  (1,'Poi',2,1000,1500,2000,4000)

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

    `localsum` char(100) not null,
    `regionsum` char(100) not null,
    `rfsum` char(100) not null,
    `intersum` char(100) not null,

    эти поля должны быть int а не char
    Если вы хотите именно строку, то цифры (при вставке) нужно оборачивать в кавычки

    в третьих, раз `N` int not null auto_increment, то значение N можно или игнорировать при вставке, или передавать NULL

    P.S. Строку вставки можно делать так:
    INSERT INTO `price` SET `field`=1, `field2`=2, `field3`=3

    так визуально понятней что куда вставляется

    ------
    UPD
    <?php
    // соединение с базой:
    chdir(dirname(__FILE__));
    $dsn = 'mysql:host=localhost'.
        ';dbname=temp_development'.
        ';port='.
        ';connect_timeout=15';
    
    $user = 'root';
    $password = '123qwe#';
    $db = new PDO($dsn, $user, $password);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    
    
    $file = "./price.txt";# 'Poi',2,1000,1500,2000
    # в файле я убрал последнее значение, т.к. для него нет соответствующей колонки в ДБ
    if($fp = fopen($file, 'r'))
    {
        $sql = "INSERT INTO `price` (`title`, `localsum`, `regionsum`, `rfsum`, `intersum`) VALUES ";
        $prepare = array();
        $insert = array();
        while($line = fgets($fp))
        {
            $line = trim($line);
            if(!$line)
                continue;
            # Читаю файл построчно, чтоб память не загадилась если файл содержит оч много данных
    
            // валидацию данных я не делаю
            array_push($prepare, implode(",", array_fill(0, 5, "?")));
            $insert = array_merge($insert, explode(",", $line));
    
        }
        $pr = $db->prepare($sql."( ".implode("), (", $prepare)." )");
        $pr->execute($insert);
    }

    этот код сгенерирует такой вот запрос в бд:
    INSERT INTO `price` (`title`, `localsum`, `regionsum`, `rfsum`, `intersum`) VALUES ( '\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000'), ('\'Poi\'','2','1000','1500','2000' )
    Ответ написан
    3 комментария
  • Как сделать полупрозрачный блок с дырой в центре?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Используем box-shadow во избежание переполнения. Пример
    Ответ написан
  • Как в go использовать json?

    mututunus
    @mututunus
    Backend developer (Python, Golang)
    Ответ написан
    Комментировать
  • Почему в Yii в поведении в beforeDelete не определяется $this->owner?

    ischerbin
    @ischerbin
    *nix админ увлекающийся программированием
    При вызове обработчика beforeDelete ему передается объект - событие (CEvent $event) может быть удастся получить owner-а из $event->sender?
    Ответ написан
    1 комментарий
  • Yii2 нужны ли формы для RESTful API?

    что такое ActiveRow?
    зачем форма для api?
    валидация происходит в методе $model->validate(), но не в форме.
    Ответ написан
    5 комментариев
  • RESTful API и реали Безгражданства?

    saintbyte
    @saintbyte
    Django developer
    "Безгражданство" - Веселый перевод =) Смысл такой: отсутствие состояния (stateless). То есть запросы - это получение информации в зависимости от ПЕРЕДАННЫХ параметров , сервер между запросами не хранит ничего и не знает о предыдущих запросах нечего. Серверу в должно быть пофиг на все кроме того откуда брать параметры. Но так стали REST стали использовать для получения информации конкретными пользователями , пришлось добавить access_token. Это как бы служит для авторизации - но я бы назвал это "установление переменных среды". Получили токен - нашли "среду" конкретно пользователя развернули , а у пользователя там свои переменные и права - и все довольны. А вообще раз работает то не трогайте . Думаете от хорошей жизни появился REST - мне кажется что SOAP просто тяжко.
    Ответ написан
    4 комментария