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

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

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

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

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

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

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

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

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

    @mletov
    Все упирается в объемы данных. Если предполагаемое количество записей не будет исчисляться миллионами или даже десятками миллионов, то лучше придерживаться нормализации. Бардака будет меньше. Иначе да, денормализация или всякие решения типа nosql.

    Так же свою лепту вносит заказчик.
    Например, нужно выводить сводные данные за некие отчетные периоды. С т зрения программирования, лучше считать динамически на основе правильно нормализованной базы. Добавилась в период строчка - пересчитатли общий результат за этот период. Но, с т зрения учета, заказчики часто требуют, что если период закрылся - то результаты по нему не пересчитывают, даже если в этот период впихнули еще строчек задним числом. Приходится добавлять еще одну таблицу вопреки нормализации.
    Ответ написан
    3 комментария
  • Почему на production не рекомендуют использовать систему контроля версий?

    ppokrovsky
    @ppokrovsky
    Нет такого, что рекомендуют или не рекомендуют. Все зависит от вашего проекта. Те доводы, которые здесь перечислены насчет CI итд - правильные. Дополнительным аргументом в пользу deploy-скриптов может быть, например, необходимость изменения схемы БД на проде с очередным апдейтом, чего git не сделает сам по себе. Плюс, обновление через git - не очень рабочий вариант в случае компилируемого кода. Конечно, можно навернуть поверх гита каких-нибудь билдеров, но этому уже точно на проде не место.

    Но если, например, проект простой, компилируемого кода нет, и в команде есть договоренность о том, что в master попадает только протестированный код, то никакого криминала в том, чтобы сделать git pull, нет.
    Ответ написан
    Комментировать