• Что случится с программой (Go, Python, JS, PHP), если потребуется выделить память, а оперативная память в ОС закончилась?

    @Zanak
    Ответ на ваш вопрос складывается из ответа на два других:
    - В чем суть работы менеджера виртуальной памяти?
    - Может ли один процесс запросить у менеджера памяти больше, чем процессор в состоянии адресовать, исходя из его архитектуры?
    Ответ на первый вопрос: думаю, обеспечить паралельное исполнение приложений, запущеных ОС. происходит это за счет выгрузки отдельных частей не исполняемых, в данный момент, процессором приложений, чтобы обеспечить потребности активных.
    Ответ на второй: думаю не может. выгрузка страниц на диск все равно подразумевает их возврат в память по тому адресу, откуда страница была свапнута. наличие 2 страниц памяти, относящихся к одному физическому адресу и процессу открывает шанс на потребность их одновременной загрузки, что невозможно.
    Вместо резюме: реакция ОС на "прожорливость" процесса может различаться. У linux есть OOM killer, который прибивает "зажравшиеся" процессы. Форточки позволяют запрашивать память пока место на диске не заканчивается исключительно потому, что работает, обычно, более одного процесса, и каждый из них может занять до максимально адресуемого, для текущей архитектуры, куска виртуальной памяти.
    Ответ написан
    Комментировать
  • В какой момент GIL усыпляет потоки?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    Ответ написан
    Комментировать
  • Что происходит во время долгой авторизации некоторых сайтов?

    @PushMeNow
    .NET Developer
    Факторов может быть настолько много, что даже страшно представить. Может быть задержка ответа (если сайт, к примеру, американский), перебои в интернет соединении, загруженность сайта (это из явных технических задержек). Программных задержек ещё больше: валидация модели, поиск по базе, да и банальное кэширование данных для дальнейшей быстрой работы с сайтом: вы же не знаете какие именно процессы происходят во время выполнения кода, может там куча разных статических данных запрашиваются, забиваются в кэш/сессию. может там ещё какие данные подтягиваются со сторонних сервисов и т.д. Я к чему веду: бекэнд (да и фронт тоже, просто его легче отследить) порой настолько загадочная вещь, что лучше даже не задумываться - если грузится значит так нужно, значит не просто так. Ну я просто сомневаюсь, что люди, которые разрабатывали эти сайты намеренно поставили небольшую задержку скажем в 2-3 секунды (да и не слишком большая это задержка), чтобы вы чувствовали, что там выполняются какие-то массивные процессы. =)
    Ответ написан
    Комментировать
  • Как распарсить json, содержащий в листе и цифры и объект?

    bitver
    @bitver
    Go fmt
    Структура и её поля должны быть публичные, они у вас в скопе пакета.
    Ответ написан
    Комментировать
  • Как распарсить json, содержащий в листе и цифры и объект?

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

    Если известно, что там первым элементом всегда идёт число, а вторым объект, то можно использовать json.RawMessage чтобы распарсить вложенные структуры позже.
    https://play.golang.org/p/BvW3TIT52N
    Примерно так
    package main
    
    import (
    	"encoding/json"
    	"fmt"
    	"log"
    )
    
    type Attachment struct {
    	Type string `json:"type"`
    }
    
    type CountOnly struct {
    	Count int `json:"count"`
    }
    
    type vkResponseWallItem struct {
    	Id          int          `json:"id"`
    	FromId      int          `json:"from_id"`
    	OwnerId     int          `json:"owner_id"`
    	Date        int          `json:"date"`
    	MarkedAsAds int          `json:"marked_as_ads"`
    	PostType    string       `json:"post_type"`
    	Text        string       `json:"text"`
    	Attachment  Attachment   `json:"attachment"`
    	Attachments []Attachment `json:"attachments"`
    	Comments    CountOnly    `json:"comments"`
    	Likes       CountOnly    `json:"likes"`
    	Reposts     CountOnly    `json:"reposts"`
    }
    
    type Response struct {
    	Response []json.RawMessage `json:"response"`
    }
    
    func main() {
    	data := []byte(`{"response":[370,{"id":616,"from_id":-101299645,"to_id":-101299645,"date":1497367444,"marked_as_ads":0,"post_type":"post","text":"прайс актуален НО <br>АКЦИЯ \"знакомство с мастером\" - первое посещение любой дизайн бесплатно!! Спешите записаться, это будет не всегда))","can_delete":1,"can_pin":1,"is_pinned":1,"attachment":{"type":"photo","photo":{"pid":456239098,"aid":-7,"owner_id":-101299645,"user_id":100,"src":"https://pp.userapi.com/c637228/v637228340/56c6f/m_XTc7E9STE.jpg","src_big":"https://pp.userapi.com/c637228/v637228340/56c70/Jv0k8qYu1BU.jpg","src_small":"https://pp.userapi.com/c637228/v637228340/56c6e/ht4z4oVe-Jo.jpg","src_xbig":"https://pp.userapi.com/c637228/v637228340/56c71/0zpqUJ9BOBY.jpg","src_xxbig":"https://pp.userapi.com/c637228/v637228340/56c72/FQa5iNg2NnU.jpg","width":763,"height":1080,"text":"","created":1497367446,"post_id":616,"access_key":"9a6b6d3977113f56d0"}},"attachments":[{"type":"photo","photo":{"pid":456239098,"aid":-7,"owner_id":-101299645,"user_id":100,"src":"https://pp.userapi.com/c637228/v637228340/56c6f/m_XTc7E9STE.jpg","src_big":"https://pp.userapi.com/c637228/v637228340/56c70/Jv0k8qYu1BU.jpg","src_small":"https://pp.userapi.com/c637228/v637228340/56c6e/ht4z4oVe-Jo.jpg","src_xbig":"https://pp.userapi.com/c637228/v637228340/56c71/0zpqUJ9BOBY.jpg","src_xxbig":"https://pp.userapi.com/c637228/v637228340/56c72/FQa5iNg2NnU.jpg","width":763,"height":1080,"text":"","created":1497367446,"post_id":616,"access_key":"9a6b6d3977113f56d0"}}],"comments":{"count":0},"likes":{"count":1},"reposts":{"count":1}}]}`)
    
    	var response Response
    	err := json.Unmarshal(data, &response)
    	if err != nil {
    		log.Fatal(err)
    	}
    
    	var number int
    	err = json.Unmarshal(response.Response[0], &number)
    	if err != nil {
    		log.Fatal(err)
    	}
    
    	var wallItem vkResponseWallItem
    	err = json.Unmarshal(response.Response[1], &wallItem)
    	if err != nil {
    		log.Fatal(err)
    	}
    
    	fmt.Println("num:", number)
    	fmt.Println("wall item:", wallItem)
    }



    P.S. Попробуйте использовать Vk API вместо парсинга того, что предназначается джаваскрипту. Там формат гораздо более удобный. https://vk.com/dev/wall.get
    Ответ написан
    1 комментарий
  • Как парсить сайт, использующий Ajax?

    DaFive
    @DaFive
    Easy.
    Загружаем страницу, получаем атрибут кнопки "Показать телефон" вида blst="число".
    Я напишу на PHP, сами дальше разберетесь.
    Пишем функцию decrypt.
    function decrypt($value) {
            $decrypt = $value / 17;
            $p1      = floor($decrypt / 100);
            $p2      = $decrypt - 100 * $p1;
            $t1      = substr("" + $p1, 1) . '-' . pad($p2, 2);
            return $t1;
    }
    function pad($num, $size) {
            $s = $num + "";
            while (strlen($s) < $size) {
                $s = "0" + $s;
            }
            return $s;
    }


    Вызываем функцию decrypt() с аргументом blst. Получаем недостающие цифры телефона через дефис.
    Собственно, сама реализация есть у них на сайте :)
    Ответ написан
    6 комментариев
  • Как в React изменить состояние родительского компонента?

    fornit1917
    @fornit1917
    Например объявлять в родительском компоненте функцию, которая будет делать вам что надо, и прокидывать ее в дочерний через props. В дочернем просто вызывать ее.
    Ответ написан
    Комментировать
  • Как организовать совместную работу верстальщика и программиста?

    webirus
    @webirus
    Тыжверстальщик! Наверстай мне упущенное...
    Нафига верстку кидать в Гит?
    Если уж верстаку хочется иметь бэкап, достаточно личного битбакета.
    Пусть верстает как есть, отдает программеру, тот уже делает гит-проект.
    Потом уже оба клонируют к себе и работают через пул и пуш.
    Ответ написан
    3 комментария
  • Аналоги selenium для python?

    qlkvg
    @qlkvg
    python backend developer
    а чем selenium не устраивает? он по сути - обвязка над браузером, там тупить особо не чему. другой вопрос, что веб нынче тяжелый. у меня selenium+phantomjs с отключенными картинками работает вполне шустро.
    На PyQt+webkit сам ничего не писал, но чужой проект оставил не лучшее впечатление(хотя вполне возможно, что там проблема была в руках разработчика, а не webkit'e)
    Ответ написан
    Комментировать
  • Какие действительно классные сайты сделаны на Phalcon?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Вы ищите сферического коня в вакууме.
    Всё зависит в первую очередь от кодера, а только потом - от фреймворка.
    Берите один алгоритм и тестите: на ноде и на фалконе, и уже полученное - сравнивайте.
    Ответ написан
    2 комментария
  • Как правильно организовать код в php-фреймворке?

    Settler1
    @Settler1
    Правильно написанный вопрос - половина ответа
    Как принято в php вообще делать - что в контроллере мы делаем запросы к базе, используя ORM или конструктор запросов, агрегируем данные и выплевываем, или все нужно выносить в модели, но тогда модели будут просто огромными, что делать?


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

    У нас как раз Ваша проблема с проектом, когда мы пришли и увидели код, там вся логика была исключительно в контроллерах. Ощущение что предыдущие программисты про ничего другое вообще не слышали.
    Ответ написан
    2 комментария
  • Как правильно организовать код в php-фреймворке?

    zolt85
    @zolt85
    Программист
    Учиться, учиться и еще раз учиться, как завещал дедушка Ленин.
    Не видя сам код и структуру проекта, тут трудно что-либо советовать. Почитайте "Чистый код" Боба Мартина, особенно про принцип единой ответственности. Если метод вашего класса не помещается на мониторе компьютера - его необходимо переписать. Ну и все в таком духе. Главное не гнаться за чистотой кода ради самой чистоты. Все к чему призывает дядя Боб, это писать читаемый, поддерживаемый код, который после Вас смогут читать и поддерживать другие разработчики.

    И еще важный момент, закрепите правила разработки на уровне команды. Т.е. что бы все писали одинаково. Структура проекта должна быть четкой и понятной. Мы в своей команде такие правила обозначили (они конечно же пересматриваются, обсуждаются) и теперь команда из 6 разработчиков легко ориентируется в коде enterprise монстра с 6 летней историей, и с over 5000 классов на борту, и даже умудряется его улучшать.

    По поводу контроллеров: я лично не знаком с философией Laravel, сам разрабатываю на Java и мой framework - Spring. У меня философия на счет контроллеров такая - контроллер является посредником между front и back end-ами. Никакой логики контроллер в себе не содержит, от слова "совсем". Вся логика вынесена в фасад, который в свою очередь может включать в себя кучу сервисов. Сервисы (по-возможности) разрабатываются с учетом принципа единой ответственности. Сервисы содержат в себе всю бизнес-логику приложения.
    Ответ написан
    3 комментария
  • Js-фреймворк и jQuery, какой использовать фреймворк?

    Rou1997
    @Rou1997
    React.js не ставит своей целью заменить jQuery и в нем нет никаких средств для отправки AJAX-запросов, поэтому они полностью совместимы и более того, jQuery рекомендуется самими разработчиками React, учитесь пользоваться Google, буквально за одну минуту можно найти.
    Ответ написан
    2 комментария
  • На чем писать программу под Windows?

    kimono
    @kimono
    Web developer
    Переписать chromium.
    Ответ написан
    Комментировать
  • Как верно проектировать базу данных?

    Melkij
    @Melkij
    PostgreSQL DBA
    Если нужна таблица - должна быть таблица.

    Postgresql предоставляет шикарную возможность разделить базу данных на схемы. Есть пачка таблиц, описывающая какую-нибудь сущность? Перенесите их в отдельную схему и пусть не мешаются в public. Таблицы аггрегации? Выкиньте их в отдельную схему.
    Замечательно помогает, если становится многовато таблиц (несколько десятков разве много?).
    Правда, если вы любитель всякого орм, ваша библиотека может не уметь схемы.
    Ответ написан
    Комментировать
  • Как верно проектировать базу данных?

    @lega
    или вообще все данные в одну колонку запихнуть.

    На клиенте "объект" можно распарсить из любого вида, даже если это одна колонка сжатых данных в gzip.

    Вопрос в индексах, вам нужно хранить данные так, что-бы можно было сделать на них индексы, и любые запросы выполнялись мгновенно.
    В итоге если вам надо добавить например список телефонов к элементу таблицы, и вам не нужно делать по ним поиск, проверку уникальности, группировки и т.п. то нет смысла плодить отдельную таблицу под них, удобнее использовать json или массив. (хотя в некоторых БД уникальность и поиск можно сделать и для json/массива).

    В итоге будет быстрее работать, т.к. нет JOIN, экономия RAM т.к. нет доп. индекса для JOIN, да и вообще удобней т.к. меньше сущностей.
    Ответ написан
    Комментировать