• Как перенести базу postgresql из нерабочей системы, если в chroot сервис не запускается?

    Melkij
    @Melkij
    PostgreSQL DBA
    Найдите, где datadir базы. Скорей всего /var/lib/postgresql/(версия базы)/main, но могла была быть перемещена, так же может стоять несколько кластеров базы и разные версии базы - в дебианах и убунтах это делается легко.

    Далее установить на новой системе postgresql идентичной major версии и не ниже minor версии что была там. Какая была major версия - смотрите файлик PG_VERSION в datadir. minor версию ставьте последнюю актуальную.
    Так понимаю, старая система в принципе не работает? Т.е. старая база выключена? Выключите и новую (пока пустую) базу. Проверьте, если не уверены, обе базы должна быть выключена.
    Переименовываете datadir на новом сервере (вообще, можно удалить, но можно и ошибиться консолью и дропнуть не то =) )
    Копируете каталог базы: rsync -a /olddatadir /newdatadir
    Копируете и правите если надо конфиги из /etc/postgresql/версия_базы
    Если каталог pg_tblspc/ в datadir не пуст - скопируйте и симлинки из него и все данные по этим симлинкам в аналогичные места на новой машине.
    Если pg_xlog/ является симлинком - его необходимо скопировать. Можно оставить симлинком, можно содержимое перекопировать.
    Пробуете запустить базу на новом месте. Смотрите в логи. Если на старом месте база не была повреждена (и ничего нужного скопировать не забыли) - то она запустится.
    Ответ написан
    1 комментарий
  • Что делать со всеми миграциями?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Команда squashmigrations поможет сжать их в одну.
    Ответ написан
    1 комментарий
  • На чем основывается выбор java vs .net для автоматизации бизнеса?

    zolt85
    @zolt85
    Программист
    Смотреть нужно, в первую очередь, на скилл команды, которую собираетесь привлечь к разработке. Если команда рубит в Java и не-в-зуб-ногой в .Net, то выбор будет очевиден. Следующий нюанс - инфраструктура. Если Вы собираетесь строить ее на Windows, то наверное .Net будет лучше смотреться. Затем архитектура приложения. Если Вы собираетесь делать desktop приложения, опять же для windows, то тут без вариантов - лучше взять C#, WCF и .Net. Если у Вас будет Web приложение, с браузером в качестве клиента, то Java тут по серьезней выглядит с ее наработками в "кровавом ынтэрпрайзе". А можно все в кучу смешать - клиент будет десктопным приложением на .Net Framework, а сервер - написан на Java.

    Я бы просто описал в виде ТЗ хотелки, и дал бы оценить его опытному разработчику, думаю он сделает верный выбор стека технологий.
    Ответ написан
    Комментировать
  • Как влиться в Spring и что на нем разрабатывать в одиночку?

    @frozen_coder
    Java-developer
    Как уже писали ранее, посмотрите реализации классического примера на Spring - Pet Clinic
    https://github.com/spring-petclinic

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

    Примеры:
    Работа магазина. Там есть всякие товары, продажа-покупка и т.д. и т.п. Можно наворотить.
    Работа склада. Тоже самое, товары, складские журналы, поступление, списание и прочие прелести.
    Работа банка. Валюта, вклады и кредиты всякие и т.д. и т.п.
    Работа автомастерской, стоянки, булочной, столовой, полицейского участка, мед. пункта и тд и тп.
    Какой-нибудь справочник-реестр-библиотека-каталог каких-нибудь составных записей из разных других записей, в которых тоже есть какие-нибудь записи с возможностью добавления, удаления, объединения, редактирования при условиях той фазы луны, погоды за окном и вашего расположения духа.

    Еще Spring - это в основном система для интеграции. Вот и прикручивайте различные штуки к нему. Сделайте SOAP-сервис, что-нибудь для ORM, Security, можно очередь забабахать, можно облака прикрутить, даже вроде graphQL можно или можно будет.

    Посмотреть, что можно накрутить и сгенерить новый проект можно с помощью такого вот сервиса:
    https://start.spring.io/
    Ответ написан
    Комментировать
  • В чем минусы Rails и хуже ли он Django?

    @asd111
    Rails и Django решают одну и ту же задачу - web программирование. В целом те кто использует Django используют его ради возможностей python, чтобы быстро прикрутить к своему проекту тот же анализ данных на python на scikit-learn и на других библиотеках для анализа данных, которые изначально пишутся для python и С++, а для других языков обычно выходят с задержкой либо не выходят вообще.

    Если вы раньше писали на ruby-rails, то python и django вам понравятся, особенно если вы посмотрите scikit-learn и т.п. возможности python для анализа данных. Главная причина популярности python - очень качественные библиотеки и простое API в этих библиотеках.
    Молодежь для бэкэнда сейчас выбирает обычно php либо golang, иногда javascript.
    Про php вы зря думаете что плохой язык. Если нужно писать только веб без математики, то php с yii или symfony неплохой выбор. Главное битрикс не использовать :) А в плане скорости php 7 очень даже норм.
    Golang обязательно посмотрите. Все таки один из самых быстрых языков для веба сейчас. И многие из тех кому нужна была скорость перешли с ruby-python на golang.

    Рельсы медленно умирают - это факт. Потому что ruby ничего не может предложить кроме веба. А для веба сейчас появился очень быстрый golang и туда ушли почти все рельсовики кому не по душе php и python.
    Ответ написан
  • В чем минусы Rails и хуже ли он Django?

    Sanasol
    @Sanasol Куратор тега Веб-разработка
    нельзя просто так взять и загуглить ошибку
    В чем минусы Rails и хуже ли он Django? А может всё таки остаться на PHP?

    Остаться на пхп потому что руби плохой, а питон не...
    Можно найти статьи, видео и всё что угодно по запросу "что не так с <название языка/фреймворка>"
    или "минусы <название языка/фреймворка>".

    Вопрос ни о чём. Речь о трёх разных языках и технологиях.

    Если вы так боитесь минусов, то сразу посмотрите про каждый язык такое видео и не будьте программистом вообще.

    Больше на этот вопрос никак не ответить.
    Ответ написан
    3 комментария
  • Как отобразить архив статей?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    К сожалению, на одну и ту же модель нельзя зарегистрировать более 1 класса админки.
    Есть вариант с прокси-моделью, посмотрите здесь. Там даже тема схожая - публикации.
    Ответ написан
    Комментировать
  • Расскажите о профессии верстальщик (в офисе)?

    @ncer
    Frontend
    1. Какая сейчас зп у верстальщиков в регионах (живу в Калининграде)? На сайтах вакансий я вижу предложения в 30, 25 и даже 20 тыс. (Хотя попадаются и на 80-100 000, но там требуют очень серьезные скиллы.) Насколько это соответствует реальным зп?

    Это средние цифры по больнице, даже для мск. Суть не в том, чтобы верстаком получать горы (это нереально), а в том, чтобы договориться с работодателем, что верстак - это начало и хотелось бы развиваться в сторону фронтенда. Договориться, чтобы на первых порах время от времени тебе давали какие-то простенькие JS задачки с условием "смог - круто, не смог - ну ладно, в следующий раз получится".

    2. Правильно я понимаю, что рабочий день верстальщика - это 8 часов верстки с перерывом на обед? Насколько высокая загруженность? На моей предыдущей работе, например, непосредственно работать приходилось процентов 40 времени.

    В целом - да. Но опять же в среднем по больнице. Это зависит от стажа и опыта. На первых порах, возможно, даже придется перерабатывать. Все зависит от кол-ва заказов, их сложности, твоего личного темпа работы, фазы луны и кучи других факторов. Но даже Москва не сразу строилась. С опытом можно научиться работать столько, сколько нужно и даже тратить часть рабочего времени на обучение.

    3. Насколько реально, работая в офисе, и, будучи заваленым задачами по верстке, попутно развиваться в веб-разработке и изучать ЯП, например PHP и JS?

    Возвращаясь к п1, если договориться с начальником про рост во фронтенде, то в общем-то вполне реально совмещать работу и изучение JS - оно само напрашивается. Все остальное - скорее всего в нерабочее время.

    4. Есть ли карьерный рост непосредственно в профессии? Какой потолок зарплат в верстке без программирования? (подключение плагинчиков и простенькие вещи на jquery не в счет)

    Карьерный рост - это фронтенд. Сначала джуниор, потом мидл, потом сеньор, а потом, если хотите, тимлид. У каждого из них зп выше, чем у предыдущего.

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

    Определенно стоит. Но не ради того, чтобы оставаться верстальщиком, а ради того, чтобы развиваться во фронтендера. См. п1.
    Ответ написан
  • Расскажите о профессии верстальщик (в офисе)?

    Krasnodar_etc
    @Krasnodar_etc
    fundraiseup
    1 - Суммы очень разнятся, от 20-ти до 60-ти, + редко около 80 000 (Краснодар) . Не знаю, как человек должен верстать за 80, но, наверное, очень круто)

    2 - Формально - да. Но так бывает разве что в веб-студиях. И даже там спокойно можно находить время на изучение JS/PHP, чтение Хабра, ... . В больших не-IT компаниях времени будете тратить на дело столько же, сколько раньше. Загруженность может быть высокая на первых порах, но когда "набьёте руку", определитьесь с инструментами и подходом - это всё уже не будет занимать столько времени.

    3 - Реально. Настолько, что все так делают)

    4 - Карьерный рост верстальщика ведёт во Frontend , то есть в мир JS , всяких там Angular/React/Vue и прочего.

    5 - Да стоит как-угодно начинать, я думаю. Можете сделать второе резюме уже сейчас - "Junior Frontend" и параллельно с поиском работы учить JS . Хотя бы на уровне jQuery и базовых принципов.

    Верстальщик - это, как правило, начало карьерного пути, на нём не стоит оставаться очень долго. Возможности роста у вас 100% будут, даже при плотном графике.
    Ответ написан
    6 комментариев
  • Java ,как составить план обучения и с чего начать код?

    @game802
    я не специалист/разработчик по JAVA, и вообще на нем не разрабатываю, но порекомендую такую штуку, которая очень сильно поможет Вам в обучении (она относится абсолютно ко всем ЯПам).
    Суть заключается в том, чтобы крепко освоить базу! Вы должны понимать, что все вокруг строится на БАЗЕ (БАЗОВЫХ основах/принципах). И, если Вы знаете БАЗУ, Вы сможете со спокойной душой изучать совершенно любые штуки, которые на это БАЗЕ и построены.
    Опыт на уровне простых методов / классов и do/while/for -) - рекомендую, для начала, очень хорошо углубиться в базу, дабы в будущем очень сильно увеличить Вашу скорость обучения по всем остальным технологиям.
    Вот, как-то так! Удачи в обучении!
    Ответ написан
    Комментировать
  • Интернет-магазин на Falcon и VueJS?

    copist
    @copist
    Empower people to give
    Описанная тобой схема, при которой приложение разбито на две части: клиентское на JS и серверное, которые обмениваются данными через открытое API по HTTP - называется Rich Internet Application или Single Page Application. Реализуется на любом стеке. PHP/Python/NodeJS/Ruby/Go/C#/Java и др. с одной стороны и Vue/Angular/Meteor/React и др. (тыщи их) с другой стороны.

    (Упомянуя схема "микросервисная архитектура" по сути декомпозиция серверной части на незаввисимые модули с открытым API, совсем не обязательно реализовано через HTTP. Частный случай SPA/RIA.)

    Проблему назову одну. Только она не даёт покоя. Она выматывает душу, нервы и кошелёк.

    Интернет магазин должен быть открыт для индексации поисковым ботам, а HTML генерится в runtime на JavsScript. Только Google умеет выполнять JS, и то весьма посредственно. Остальные вообще JS не трогают. Есть два решения:
    для индексации сразу рисовать HTML на стороне сервера
    или снимать "отпечатки" HTML c приложения через виртуальный браузер, что сбоит

    Отрисовка HTML на стороне сервера (server side render) может быть реализована тремя способами:
    * подменять выдачу через серверный язык программирования, то есть вместо шаблонизации в Vue рисовать в Falcon - блин, две шаблонизации, две логики работы с данными (через AJAX и напрямую из базы)
    * имитировать исполнение JS на сервере (хм, это возможно опять же несколькими способами) - тут вообще танцы с бубном
    * отказаться от PHP/Python/Ruby и др. в пользу NodeJS и изоморфного фрейморка, например MeteorJS или VueJS (Nuxt)

    Если на рендеринг для поисковиков забить болт и отказаться от органического трафика, то можно мой опус про эту проблему проигнорировать. Трафик может быть не только органический. Его можно гнать через контекстную или тизерную рекламу, через социалки, через медийную или офлайновую рекламу. Зависит от размера кошелька владельца проекта.

    P.S. Про Google: проверено, глючит в тех местах, где клиентский JS начинает подкачку данных через HTTP - гугль обрывает рендеринг и в поисковом индексе лежат пустые HTML страницы. Толку от них никакого.
    P.P.S Снятие "отпечатков" HTML для SPA можно через специальные сервисы (prerender.io или brombone.com) или сделать самостоятельно, например через PhantomJS или Electron. В любом случае для проекта с десятком тысяч страниц это расходы на оплату сервиса, либо на мощный сервер. И электрон и фантом виснут, а HTML довольно большие и со временем забивают диск/базу. Опят же надо не забывать про то, что страницы требуют подгрузки данных через AJAX, надо чуть подождать.
    Пример: web-mastery-gauge.ru сделан на Angular, для поисковиков HTML отрисовывается через prerender.io - для проекта с 15 страницами это вообще никакой сложности не вызывает.
    P.P.P.S. SPA просто идеально для реализации той части пользовательского интерфейса, которая не индексируется поисковыми ботами. Например, то доступно только авторизованным пользователям. В этом случае не требуется server side render и 75% проблем отпадают. В том же интернет-магазине может быть админка - её можно сделать на VueJS.
    Ответ написан
    6 комментариев
  • Как сделать шаблонизатор на php?

    copist
    @copist
    Empower people to give
    Сначала - зачем нужен шаблонизатор. Тут подмена понятий. Скорее вопрос такой: как отделить вывод от заголовков. Если не отделять, то может быть такая ошибка

    <html>
    <body>
    <?php
    // начать сессию
    session_start(); // отправить куку PHPSESSID через заголовки HTTP
    // но она не может отправиться, потому что уже начался вывод HTML в строке "<html ..."
    
    // если не авторизован, то отправить на страницу логина
    if (empty($_SESSION['username']))
        header('Location: /login.php'); // но заголовок HTTP тоже не может отправиться, как и кука
    ?>
        <h1>Hello, <?php echo $_SESSION['username'] ?></h1>
    </body>
    </html>


    Проблема решается, если вывод HTML делать после вывода заголовков. Например, использовать буфер
    <?php ob_start(); // открыть буфер ?>
    <html>
    <body>
    <?php
    session_start(); //  кука PHPSESSID отправится, потому что HTML ещё в буфере
    if (empty($_SESSION['username']))
        header('Location: /login.php'); // заголовок HTTP отправится, потому что HTML ещё в буфере
    ?>
        <h1>Hello, <?php echo $_SESSION['username'] ?></h1>
    </body>
    </html>
    <?php ob_end_flush(); // выбросить содержимое буфера наружу и закрыть его ?>


    Однако так придётся писать в каждом месте, где формируется HTML. Можно ли сократить?

    Простейшее представление через буфер

    <?php
    function render($viewPath)
    {
        if (!is_file($viewPath))
            return 'View "'. $viewPath . '" not exists';
        ob_start();
        include($viewPath);
        return ob_get_clean();
    }
    
    session_start();
    if (empty($_SESSION['username']))
        header('Location: /login.php');
    
    $viewsPath = __DIR__.'/views/'; // где лежат представления
    render($viewsPath . 'page.php'); // нарисовать страницу HTML


    <?php
    # page page.php
    ?>
    <html>
    <body>
        <h1>Hello, <?php echo $_SESSION['username'] ?></h1>
    </body>
    </html>


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

    <?php
    function render($viewPath, $vars)
    {
        if (!is_file($viewPath))
            return 'View "'. $viewPath . '" not exists';
        extract($vars); // extract делает из массива набор переменных в локальной области видимости
        ob_start();
        include($viewPath); // эти переменные будут видны внутри подключаемого файла
        return ob_get_clean();
    }
    
    session_start();
    if (empty($_SESSION['username']))
        header('Location: /login.php');
    
    $viewsPath = __DIR__.'/views/'; // где лежат представления
    render($viewsPath . 'page.php', array( // отображаемые данные передаются массивом
        'username' => $_SESSION['username'],
    ));


    # page.php
    <?php
    /**
     * Подсказки для IDE, чтобы не подсвечивал переменные как неопределённые
     * @var string $username
     */
    <html>
    <body>
        <h1>Hello, <?php echo $sername ?></h1>
    </body>
    </html>


    Не правда ли, с представлениями код становится значительно изящнее. А если логика для реализации представлений хранится в отдельном файле-библиотеке, то код становится короче и понятнее.

    В фреймворках вместо функции render может использоваться объектная реализация

    <?php
    class ViewException extends Exception {}
    
    class View
    {
        public $viewsPath = __DIR__.'/views/';
        
        public function __construct($viewsPath = null)
        {
             // настройка представлений
            // например, можно перепределить место хранения представлений
            if (!is_null($viewsPath))
                $this->viewsPath = $viewsPath;
        }
    
        public function render($viewPath, $vars)
        {
            if (!is_file($this->viewsPath . $viewPath))
                throw new ViewException('View "'. $viewPath . '" in folder "'. $this->viewsPath . '" not exists');
            extract($vars);
            ob_start();
            include($this->viewsPath . $viewPath);
            return ob_get_clean();
        }
    }
    
    $view = new View();
    $view->render('page.php', array(
        'username' => $_SESSION['username']
    ));


    Как таблицы шаблонизаирова если в одной 3 столбца, в другой 5?

    Никто в представлениях не запрещает использовать языковые конструкции. Это могут быть конструкции языка PHP или какой-нибудь другой язык, специально написанный для шаблонизатора. Например, в Smarty, Blade, Pug свои языки. Передай в представление количество колонок и сделай цикл :)

    у первой первый столбец должен быть 70% а у второй последний?

    В представлениях можно подключать стили CSS, через которые меняется отображение (колонка 70%).
    У каждого представления может быть свои стили.
    Если нужно, чтобы были некоторые общие стили и дополнительные, нужные только для этой страницы, используют что-то типа буферизирования вывода блока стилей.

    <?php
    class Assets
    {
        public static $cssLinks = array();
        public static $css = array();
    
        // добавить ссылку на файл стилей
        public function addCssLink($link)
        {
            self::$cssLinks[$link] = $link;
        }
    
        // добавить блок стилей
        public function addCss($name, $css) // $name - это чтобы не дублировались блоки стилей, на всякий случай
        {
            self::$css[$name] = $css;
        }
    
        public function renderCss()
        {
            foreach(self::$cssLinks as $url)
                echo '<link href="'.$url.'" rel="stylesheet" type="text/css" />';
            echo '<style type="text/css">';
            foreach(self::$css as $css)
                echo $css;
            echo '</style>';
        }
    }


    # index.php
    
    $assets = new Assets();
    // общие стили
    $assets->addCssLink('https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css');
    
    // ...
    
    $view = new View();
    $view->render('page.php', array(
        'username' => $_SESSION['username']
    ));


    # page.php
    <?php
    /**
     * @var string $username
     */
    $assets = new Assets();
    $assets->addCssLink('/path/to/my/styles.css'); // ещё один файл стилей
    $assets->addCss('h1 { color: red; }'); // или даже что-нибудь микроскопическое, только для этой страницы
    ?>
    <html>
    <head>
    <?php $assets->renderCss() ?>
    </head>
    <body>
        <h1>Hello, <?php echo $username ?></h1>
    </body>
    </html>


    И аналогично про JS.
    Ответ написан
    7 комментариев
  • Как в ткинтере создать окно внутри главного окна?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    import tkinter as tk
    
    root = tk.Tk()
    root.title("Main Window")
    root.geometry("640x480")
    
    sub = tk.Toplevel(root)
    sub.transient(root)
    sub.title('Sub Window')
    sub.minsize(320, 240)
    sub.maxsize(320, 240)
    
    pos = []
    
    def main_move(event):
        if pos:
            sub.geometry("+{0}+{1}".format(pos[0], pos[1]))
    
    
    def sub_move(event):
        min_w = root.winfo_rootx()
        min_h = root.winfo_rooty()
    
        max_w = root.winfo_rootx() + root.winfo_width() - 15
        max_h = root.winfo_rooty() + root.winfo_height() - 35
    
        if event.x < min_w:
            sub.geometry("+{0}+{1}".format(min_w, event.y))
    
        elif event.y < min_h:
            sub.geometry("+{0}+{1}".format(event.x, min_h))
    
        elif event.x + event.width > max_w:
            sub.geometry("+{0}+{1}".format(max_w - event.width, event.y))
    
        elif event.y + event.height > max_h:
            sub.geometry("+{0}+{1}".format(event.x, max_h - event.height))
    
        global pos
        pos = [event.x, event.y]  
    
    
    root.bind('<Configure>', main_move)
    sub.bind('<Configure>', sub_move)
    
    root.mainloop()
    Ответ написан
    Комментировать
  • Порядок изучения C#?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Неплохая книга Бена Ватсона "С# 4.0 на примерах" - много примеров, как делать конкретные вещи, в том числе, по WPF.

    Программирование зиждется на трёх китах - 1) знание (синтаксис) языка, 2) алгоритмы и 3) архитектура. Причём, последние не связаны с языком. Читайте не только о языке, но и общие знания - паттерны, архитектура, алгоритмы. В большинстве классических книг примеры написаны не на c#, но их чтение сильно развивает как программиста.
    Мартин Р. Чистый код. Создание, анализ и рефакторинг рекомендую прочитать хотя бы до 12 главы, дальше - углубление. Первые главы дают шикарный базис для построения архитектуры - почему писать так, а не иначе. Примеры на Java, но этот язык довольно сильно похож на C#.
    Фаулер М. Рефакторинг. Улучшение существующего кода классическая книга
    Гамма Э и др. Приёмы объектно-ориентированного проектирования суперклассическая книга, так называемая "банда четырёх"
    Скиена С. Алгоритмы. Руководство по разработке книга о алгоритмах, проще, чем известная книга Д. Кнута

    Ну и посмотрите этот список книг.
    Ответ написан
    Комментировать
  • Как эффективно проверять новые данные в БД?

    @melnikov_m
    Можно реализовать примерно так
    1) создать для задачи колонку isRead(0/1 не прочитано/прочитано)
    2) при создании записи добавлять в кеш с привязкой к пользователю, что у него есть непрочитанная задача
    Yii::$app->cache->set('newTask-user-'. $userId, 1);

    конечно нужно сначала проверять счетчик на существование и инкриментировать его. Например, это умеет редис
    https://yiigist.com/package/drsdre/yii2-redis-coun...
    В общем, если счетчика нет, то он создается, если есть, то берется его старое значение и делается +1
    3) Когда пользователь зашел в список задач, то идет обращение не в БД, а к этому счетчику и пользователь видит (+1, +2 и т.д).
    Когда заходит в конкретную задачу, то если колонка isRead = 0, то записываем 1, а счетчик делаем -1.
    4) Наверное, еще придется предусмотреть "разогрев кеша", если он упал(на случай если вы предполагаете, что нагрузка будет реально большая)
    Для этого пишем задачу, которая запускается при запуске сервера кеширования, в которой берем count всех непрочитанных задач, сгруппированных по пользователям и записываем эти значения в счетчики.
    Ответ написан
    1 комментарий
  • Как развернуть веб-сервер + 1С?

    @Dementor
    программист, архитектор, аналитик
    Ну так у Вас практически все уже сделано!

    Осталось самое мелкое и незначительное:
    1. Купить у вашего интернет провайдера статический IP-адрес
    2. Купить красивое доменное имя
    3. На ns-сервере (его продавцы доменных имен предоставляют бесплатно) привязать ваш домен к вашему IP с помощью A-записи
    4. Настроить Apache на ответ по запросу этого доменного имени
    5. Купить для домена сертификат или воспользоваться бесплатным от Let’s Encrypt (можно и без него, но хром и мозила обещают все сайты без HTTPS показывать как неблагонадежные - если такое устраивает, то пропускайте этот и следующий пункт)
    6. Установить купленный сертификат в вашей системе и настроить Apache на его использование
    7. Добавить в ваш фаервол разрешающие правила для вашего HTTP/HTTPS трафика
    8. Если вы работаете из локальной сети, то еще возможно нужно будет настроить форвардинг HTTP/HTTPS трафика с вашего роутера на компьютер с физически установленным Apache (где при этом база 1С находится не имеет значения; главное, что бы на компе с веб-сервером стояли 1С-кие библиотеки и был прямой доступ по локалке)
    Ответ написан
    4 комментария
  • Знание которые не устареют через 10-20 лет?

    AgentProvocateur
    @AgentProvocateur
    По вебу вообще сложно что-либо предугадывать даже на 5 лет вперед, не говоря уже о 20-30. Какими они будут эти web 4.0, 5.0...n.0 - вряд ли достоверно известно даже в Google и Microsoft.

    Наиболее вероятное развитие - всё будет браузером. Операционная система - подобие браузера, и всё в облаках - софт в виде web-сервисов (подключаемых из аппстора на рабочем столе), данные в виртуальных хранилищах и т.д. Даже игры будут крутиться на серверах, а пользователю будет передаваться только "клиентская часть" в видеопотоке. При этом всё будет кроссплатформенным с минимальными требованиями к конфигурации устройства. Не важно, ПК у пользователя (обычный или квантовый), ноутбук, планшет, смартфон, шлем VR, телевизор и проч. - каждый будет иметь возможность оплатить доступ к какой-нибудь GTA 10 и зарубиться в неё на максималках.

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

    Дело в том, что такая модель полностью убивает пиратство и дико выгодна коммерчески всей IT-индустрии, потому и считается наиболее вероятной. Уже прут первые потуги типа Chrome OS, перемены начнутся, когда выкатится браузерный Windows и ТОП-500 web-сервисов адаптируются под него, а затем и под версии от Google и Apple. Собственно, примерно то же произошло с мобильным рынком с появлением Android.

    Вот только когда весь мир утонет с любого утюга и самовара в браузерах и на серверах, там уже понадобятся другие подходы в структурах данных, протоколах, базах, организации дата-центров, безопасности и т.д. А какими они будут..."сегодня в завтрашний день не все могут смотреть. Вернее, смотреть могут не только лишь все, мало кто может это делать" (с)

    С теми же языками программирования холивары горят. Огромное количество специалистов бьют пяткой в грудь на тему "javascript захватит мир", не меньшее количество людей напротив уверены, что "этот ужасный язык - лишь временная и костыльная мера переходного периода, не способная заменить на сервере .NET или компилируемый Go, рвущий все топы".

    Продолжение:
    Ответ написан
    1 комментарий
  • Сколько у вас ушло времени чтобы стать python junior developer?

    @Trahibidadido
    Backend/DevOps
    Пришел python\django juniorом с улицы. За немалое время работы сожрал пуд соли. Самое большое разочарование - все ищут питонистов для быстрой разработки (порог вхождения ниже наверное только у php) и берут джунов на не джуниорские задачи. Я за первый месяц работы что только не писал, от системы скидок для интернет магазинов на Django, до админки системы курьерской доставки интернет-ритейлера написаной на связке Flusk+Vue+Jquery которую до меня писал десяток человек и все бросали.

    Никто практически никогда не готов тебя учить, если на более "мейнстримных" языках ты получаешь более низкий оклад, но больший штат серьезных девов с многолетним опытом и высокий шанс того что за тобой будут "присматривать", то попадая в компанию которая пишет на python - ты сам по себе. Потому что питонистов тупо мало и стоят они дорого, никто не хочет тратить их время на всякие кодревью и митапы.

    Не согласен с оратором выше, джун это просто человек способный писать работающий код. Как он это делает и что этот код из себя представляет - вопрос второй. Я пишу нереальные костыли и ничего, заказчик доволен, начальнику пофигу, зп на карточке.
    Ответ написан
    Комментировать
  • Как отобразить номер телефона через Html helper?

    Самый простой вариант - создать свой класс, наследованный от Html и использовать его во всем проекте:
    <?php
    namespace app\helpers;
    class Html extends \yii\helpers\Html
    {
        public static function phone($phone, $options = [])
        {
            $options['href'] = 'tel:'.$phone;
            if (!isset($options['class'])) {
                $options['class'] = '';
            }
            return static::tag('a', $phone, $options);
        }
    }


    А дальше несколько вариантов:
    • Добавить еще несколько удобных методов и оформить все это в виде пакета composer, пример.
    • Сделать pull-request в yii2 или тому же Картику.
    Ответ написан
    5 комментариев
  • Что за тип данных static?

    @D3lphi
    Это класс, верхний в иерархии наследования, из которого происходит вызов метода. Self и Static можно поставить в один ряд. Self - это класс, в котором написан этот метод, а static - класс, из которого происходит вызов метода. Это может быть тот же самый класс, а может - наследник. Прочтите про позднее статическое связывание.
    Ответ написан
    Комментировать