Задать вопрос
  • Почему цикл не выводи столбик?

    Даже если исправить все синтаксические ошибки в коде, то всё равно выражение
    arr[num - '0'] адресует область памяти перед массивом, а не сам массив, т.к. символ '0' имеет код 48.
    Ответ написан
    Комментировать
  • Как работает эта программа, определяющая порядок байтов в компьютере?

    15432
    @15432
    Системный программист ^_^
    Создаётся переменная типа unsigned short int, которая почти во всех современных компиляторах имеет размер 2 байта. Затем ей присваивается значение 1. В случае архитектуры Little Endian, единица запишется в младший байт переменной, а в случае Big Endian - в старший байт. Дальше именно это и проверяется - конструкция *((unsigned char *) &x) получает значение младшего байта переменной. Если там оказался ноль, значит архитектура Big Endian.

    Код, делающий то же самое, но проверяющий старший байт:
    #include <stdio.h>
    unsigned short x = 1; /* 0x0001 */
    int main(void)
    {
      printf("%s\n", *((unsigned char *) &x + 1) == 0 ? "little-endian" : "big-endian");
      return 0;
    }
    Ответ написан
    Комментировать
  • Как получить доступ к n-му элементу GridView из адаптера?

    @aol-nnov
    я бы в модели завел свойств нужных и менял бы их.
    Ответ написан
    4 комментария
  • Зачем goto в исходниках Python?

    un1t
    @un1t
    Стандартная практика обработки ошибок или освобождения ресурсов в Си. Обычно в таких случаях goto более удобен и читаем чем альтернативные решения.
    Однако в данном конкретном примере функция очень короткая и в ней нет множества ветвлений, поэтому конечно проще написать без goto, но видимо сила привычки или задел на будущее.

    Вот напиример функция из питона с более уместным использованием goto

    static int
    ast_type_init(PyObject *self, PyObject *args, PyObject *kw)
    {
        Py_ssize_t i, numfields = 0;
        int res = -1;
        PyObject *key, *value, *fields;
        fields = _PyObject_GetAttrId((PyObject*)Py_TYPE(self), &PyId__fields);
        if (!fields)
            PyErr_Clear();
        if (fields) {
            numfields = PySequence_Size(fields);
            if (numfields == -1)
                goto cleanup;
        }
    
        res = 0; /* if no error occurs, this stays 0 to the end */
        if (numfields < PyTuple_GET_SIZE(args)) {
            PyErr_Format(PyExc_TypeError, "%.400s constructor takes at most "
                         "%zd positional argument%s",
                         Py_TYPE(self)->tp_name,
                         numfields, numfields == 1 ? "" : "s");
            res = -1;
            goto cleanup;
        }
        for (i = 0; i < PyTuple_GET_SIZE(args); i++) {
            /* cannot be reached when fields is NULL */
            PyObject *name = PySequence_GetItem(fields, i);
            if (!name) {
                res = -1;
                goto cleanup;
            }
            res = PyObject_SetAttr(self, name, PyTuple_GET_ITEM(args, i));
            Py_DECREF(name);
            if (res < 0)
                goto cleanup;
        }
        if (kw) {
            i = 0;  /* needed by PyDict_Next */
            while (PyDict_Next(kw, &i, &key, &value)) {
                res = PyObject_SetAttr(self, key, value);
                if (res < 0)
                    goto cleanup;
            }
        }
      cleanup:
        Py_XDECREF(fields);
        return res;
    }
    Ответ написан
    Комментировать
  • Какие есть библиотеки для offline распознавания текста?

    @akass
    Developer
    tesseract
    Ответ написан
    Комментировать
  • Как создать многоуровневый json?

    Нужно смотреть на JSON объекты ({ ... }) конкретно как на объекты в ООП, а не как на ассоциативный массив. Создай конкретные модели со всеми связями между собой, которые ты собираешься сериализировать в JSON. Если нужен список серверов/групп/клиентов, то используй именно список ([ ... ]) сериализированных моделей.
    Ответ написан
    Комментировать
  • Почему в C++ нужно строить всю программу на ООП (длинный вопрос)?

    Adamos
    @Adamos
    Право, может быть, вы даже "Идеальный код" не читали?
    ООП - это уникальная возможность разделить код на уровни абстракции. Реализовать все скучное, но необходимое, внутри методов класса - и забыть о нем все, кроме его интерфейса. В результате программа пишется на более высоком уровне и читается на нем же. Детали требуется изучать только тогда, когда это действительно требуется.
    Километровые простыни функций, которые может вызвать кто попало где попало с неизвестно как подготовленными входными данными и столь же неизвестными ожиданиями на выходе - ну, это может нравиться... если у вас много свободного времени или вы полжизни изучали именно этот хаос.
    Ответ написан
    Комментировать
  • Для каждой серьёзной игры существует свой редактор на подобии Unity3d?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Для больших игр неминуемо пишется свой инструментарий, потому что художникам надо быстро проверять, как смотрится арт в игре, геймдизайнерам править баланс, нарративщикам добавлять запятые в диалоги и так далее, а заставлять каждого компилять игру из C++-сорцов запрещено международной конвенцией по гуманному обращению с пленными и декларацией прав человека. Поэтому неизбежно будут какие-то тулзы, куда можно скормить png, mp3 или txt, подвигать ползунки и посмотреть, как это будет в игре.
    Иногда из этого выходит вот Unity3D или UE, иногда TES Construction Set, иногда оно так и остается в недрах.

    Disclaimer: я никогда не работал в геймдеве:)
    Ответ написан
    Комментировать
  • Конструкция SomeInterfacesomeObj - как правильно использовать?

    @onepavel
    Консультация и разработка мобильных приложений
    кодить не читая книги - зло!
    package com.company;
    
    import java.util.LinkedHashMap;
    
    public class Main {
    
        public static void main(String[] args) {
            MapData<String,Integer> mapData = MapData.map(new Zoidberg(), 10);
            System.out.print("");
        }
    }
    
    class Pair <K, V> {
        public K key;
        public V value;
    
        public Pair (K key, V value){
            this.key = key; this.value = value;
        }
    }
    
    interface Generator <T> {
        public T next ();
    }
    
    class MapData <K, V> extends LinkedHashMap<K, V> {
    
    
        public MapData (Generator <Pair<K, V>> gen, int size){
            for (int i=0; i!=size; i++){
                Pair <K, V> p = gen.next();
                put (p.key, p.value);
            }
        }
    
    
        public static <K, V> MapData <K, V> map (Generator <Pair<K, V>> gen, int size){
            return new MapData (gen, size);
        }
    }
    
    class Zoidberg implements Generator<Pair<String,Integer>> {
    
        @Override
        public Pair<String, Integer> next() {
            return new Pair<String, Integer>("i_will_read_books", 10);
        }
    }
    Ответ написан
    Комментировать
  • Как воспринимает переменные С++?

    Как разные. Регистр символов учитывается.
    Ответ написан
    1 комментарий
  • В чем различия между массивами String [] args и String... args?

    tarzan82
    @tarzan82
    Запись вида methodName(T... args) называется varargs (Variable Arguments)
    Удобство в том, что можно передавать сразу аргументы и не создавать массив и количество аргументом может быть 0 или N. Пример:

    public static void vargs(final String... strings) {
    	System.out.println(strings);
    }
    
    public static void arrs(final String[] strings) {
    	System.out.println(strings);
    }
    
    public static void main(final String... args) {
    	vargs(); // ok
    	vargs("1", "2"); // ok
    		
    	arrs(); // compilation error
    	arrs(new String[] {"1", "2"}); // ok
    }

    Есть пара моментов: методы с varargs нельзя перегружать и varargs должен быть последним аргументом

    public static void manyParams(final String... strings, final Integer number) {
    	// compilation error
    }
    
    public static void manyParams(final Integer number, final String... strings) {
    	// ok
    }
    Ответ написан
    Комментировать
  • Как в массив типа Integer записать значение типа int?

    public static class Integer implements MyRandom <java.lang.Integer> {
            private Random rand = new Random();
    
            public java.lang.Integer GetRandom() {
                return rand.nextInt(10);
            }
        }

    Сделать вот так

    Ну или переименовать свой класс из Integer во что-то другое
    Ответ написан
    1 комментарий
  • Какая разница между Java и Python?

    Python позволяет быстрее вести разработку

    Это заблуждение. На первый взгляд это действительно так, до первого серьёзного рефакторинга. Когда вам вместо чисел начнут приходить строки в функцию, вы об этом узнаете лишь в рантайме.
    Ответ написан
    3 комментария
  • Выпадает ошибка open failed: EROFS (Read-only file system), как исправить?

    a13xsus
    @a13xsus
    Lazy developer
    java.io.FileNotFoundException: /1.gif: open failed: EROFS (Read-only file system)

    private String saveFilePatch = "/1.gif";

    А зачем сохранять в корень файловой системы? Конечно она read-only. Сохраняйте на SD карту или в пользовательские папки.
    Ответ написан
    4 комментария
  • Как сделать reverse протокола приложения на андроиде?

    sim3x
    @sim3x
    wireshark
    decompile apk
    Ответ написан
    Комментировать
  • Подобрать формулу для нахождения шага между значениями?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    if ($maxValue/25<=25) $d=5; else $d=50;
    Ответ написан
    Комментировать
  • Что использовать для даты?

    TrueBers
    @TrueBers
    Гуглю за еду
    С чего это он deprecated? У него deprecated конструктор без локали, а сам класс живёт и здравствует.
    Создаётся через поиск в гугле... тьфу ты, через java.util.Calendar
    Ответ написан
    3 комментария
  • На каком аккаунте держать приложение в Google Play моем или заказчика?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Странный вопрос!
    Это приложение не Ваше, а Заказчика.
    Вам за него заплатили деньги!
    Поэтому ответ однозначен: разместите на аккаунте Заказчика.

    UPD:
    1. Вам необходимо было заранее договориться с Заказчиком о том, что Вы впишите себя в Credits/About внутри приложения, возможно оформить письменное соглашение на то, что заказчик имеет право использовать ваш продукт в любых целях, сохраняя информацию о Вашем авторстве в заранее утверждённом разделе приложения (Credits/About).
    Теперь - можете попробовать сделать это сейчас, но заказчик Вам ничем не обязан, хотя авторство автоматом сохраняется за Вами.
    2. Можете написать в гугл, чтобы он добавил поле автора отдельно. Возможно, они прислушаются и сделают это.
    Ответ написан
    4 комментария
  • Какую альтернативу Gmail выбрать под Android?

    A1ejandro
    @A1ejandro
    youtube блогер, ИТ-специалист
    Яндекс.почту? А так вообще разных почтовых приложений много, зависит от ваших предпочтений...
    Ответ написан
    Комментировать
  • Opengl 4.* или vulkan?

    TrueBers
    @TrueBers
    Гуглю за еду
    Это вообще разные вещи.
    Нужно отличать изучение API, от изучения технологии. Если вы хотите выучить просто API, учите что угодно, ибо разницу заметите только, когда поймёте основы, базу.

    OpenGL проектировался когда были другие архитектуры железа. Мультипроцессорность была только в теории, и считалась уделом суперкомпьютеров и ненужной для пользовательских ПК.
    Можно привести аналогию: OpenGL == C++, Vulkan == асинхронный Assembler + hardware threads. Например, в C++ сейчас довольно много архитектурных косяков, которые пытаются решить новыми стандартами, объявляют какие вещи устаревшими, потому что они концептуально неверны и не подходят под современные реалии.
    Но, при этом, вы можете всё то же самое написать на ассемблере, но нужно намного лучше понимать, как работает процессор и ОС, самому писать примитивы синхронизации, и т. п.

    Для этих же целей и создавался вулкан. Для программирования на нём, нужно знать все тонкости железки, читать кучи пейперов от той же НВидии, исследовать, придумывать новые фичи для современных архитектур с нуля, которые изначально были придуманы в OpenGL, но для старого железа.
    Т. е. на Вулкане нужно делать больше руками, больше оптимизировать. Вместо одного вызова функции OpenGL, на вулкане придётся несколько сотен строк написать. При этом, если вы не понимаете какой-то одной тонкости, вы сделаете менее эффективнее то, что изначально было хорошо реализовано в OpenGL. К тому же, OpenGL умеет выбрасывать ошибки, в случае, когда вы где-то накосячили. Вулкан же их не выбрасывает, он полагается на то, что вы уже знаете как этим пользоваться. Точно так же, как ассемблер просто меняет состояние регистров, у него нет понятия ошибки. Как интерпретировать эти регистры, зависит от того, насколько хорошо разработчик читал мануал к процессору.

    В итоге, я бы ответил так:

    Если вы будете заниматься графикой как наукой, дико задротить а-ля Кармак в студенчестве с его движками, что-то исследовать, писать какие-то гениальные алгоритмы, защищать на этом диссертации, публиковать их, рассказывать потом на конференции, как вы круто справились с какой-то насущной задачей, повысили производительность, то тогда учите Vulkan. Vulkan — это именно про графику как технологию, про производительность, про инжиниринг и архитектурный дизайн, а не про API и само программирование. С вулканом придётся больше сидеть с диаграммами, документациями и строить архитектуру, придумывать методы взаимодействия частей этой архитектуры, синхронизации состояний, нежели писать код.

    Если же вы пишете простые прикладные вещи, которым нужно показать какую-то графику, то учите OpenGL. Здесь вы учите только API, соглашаясь с уже готовым, слегка устаревшим, архитектурным дизайном.

    Если хотите писать игры не мирового класса, то учите готовые движки, Unity или Unreal. Они уже поддерживают за вас Vulkan, продумали за вас API и архитектуру.
    Ответ написан
    2 комментария