• Можно на пальцах объяснить, про суть localhost и порты?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Если человек, не знакомый с арифметикой захочет понять, что означает "два плюс три равно пять", ему недостаточно объяснить, что такое "два", или что такое "плюс"! Так же и тут. Для понимания, что такое localhost, сначала нужно понять, что такое хост вообще, что такое сеть, что такое имя хоста, что такое сервер, как это все связано с адресами и номерами портов, а те - с, собственно, одним конкретным компом (который, в зависимости от контекста, могут называть и "хостом", и "сервером", и "localhost"). Так что, на всякий случай:

    Комп, подключенный к сети, называют хостом. К нему обращаются по уникальному адресу или имени. Одному имени (т.е. одному хосту) могут соответствовать несколько разных адресов.

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

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

    На одном компе (=хосте, сервере) может одновременно выполняться несколько разных программ-серверов. Для того, чтоб обратиться к конкретной из них (адрес-то у всех один и тот же!), в протоколе TCP/IP используются разные номера портов.

    Если на компе запущен, например, HTTP сервер (= Webserver, например, Nginx или Apache), он "слушает" порт 80, а если не запущен, порт 80 никто не слушает, и если обратиться к такому хосту (= серверу, компу) по его адресу в порт 80, никакого ответа не придет... хотя сам хост и будет доступен.

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

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

    localhost - "общеизвестное" имя компа для самого себя и ему соответствует IP адрес 127.0.0.1. Это - общепринятая договоренность, которую просто нужно знать. Если говорят "установить сервер на localhost", это означает "установить на тот самый комп, с которого и обращаться к этому серверу".
    Ответ написан
    1 комментарий
  • Как сделать объемные буквы (используя 3D text)?

    @privet_andrei123
    1. Попробуй использовать 3д шрифт чего лучше не делать )
    2. Создай 3д модель буков и обьедени слово из этих моделей и сохрони в прифаб и потом юзай (помог чем смоги сорри)
    Ответ написан
    Комментировать
  • Почему не работает Timer в Thread?

    vadimpopov94
    @vadimpopov94 Автор вопроса
    Dev
    Помогло в итоге в методе run() добавить
    if (Looper.myLooper() == null){
         Looper.prepare();
     }

    Полный листинг
    private void refreshUserCoordinates(final Context contextThread) {
        Intent intent = getIntent();
        final String user = intent.getStringExtra("user");
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                if (Looper.myLooper() == null)
                {
                    Looper.prepare();
                }
                GeoPosition geoPosition = new GeoPosition();
                geoPosition.SetUpLocationListener(contextThread);
                ServerInteraction serverInteraction = new ServerInteraction("http://razdvatri.ru/refreshCoordinates.php",
                        "{\"user\" " + ":\"" + user + "\", \"latitude\" " + ":\"" + geoPosition.getLatitude() + "\", \"longitude\" :" + "\"" + geoPosition.getLongitude() + "\"" + "}", "put");
                serverInteraction.execute();
            }
        }, 0L, 50L * 1000);
    }
    Ответ написан
    2 комментария
  • Как запустить Xamarin.Forms приложение на айфоне?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Нет
    Ответ написан
    Комментировать
  • Как тренироваться тестировщику?

    @5am
    можно глянуть в сторону платформ для краудсорс тестирования, но не уверен что там необходимы модульные тестировщики (в основном разрабатывающие юнит тесты)

    можно еще глянуть в сторону rest assured для REST тестов (но обычно этим занимается отдельная команда автоматизаторов) + развиваться в ширь (этим всем так или иначе придется пользоваться если потребуется написать тесты которые шире чем юниты)
    очереди (rabbit, etc)
    системы мониторинга ошибок, логи (kibana / sentry / ect)
    консоль
    книги (например: Шаблоны тестирования xUnit. Рефакторинг кода тестов (сам не читал))
    доклады с проф конференций (такое себе, но что то подчерпнуть так или иначе получится)
    Ответ написан
    1 комментарий
  • Какую книгу по C# выбрать?

    @asArtem
    Никогда не читайте документацию в качестве обучения, как рекомендуют выше. Документация - это справка не более.
    Читать нужно только книги обучающие, иначе зёрна от плевел не отделить и за год даже.
    Ответ написан
    Комментировать
  • Как найти ВСЕ кратчайшие пути между двумя вершинами?

    @crazywu
    Мне кажется, что удобнее всего использовать обход в ширину. Записывая вес и путь до каждой встретившейся вершины.
    В конечной точке соберутся все варианты.
    Только эта штука будет жутко кушать память и не помешало бы сделать некоторые оптимизации:
    -удалять/не записывать более длинные пути
    -обьединять при дальнейшем поиске пути "слившиеся" в одной вершине
    (Это то, что сразу приходит на ум, может есть ещё какие-то варианты)
    Ответ написан
    Комментировать
  • Как откатиться к другому коммиту?

    @Ryabos
    Я бы поступил так:
    Клонировать репозиторий (git clone ...), переключиться на нужный коммит (git checkout), создать из этого коммита новую ветку (git branch -b ...) и вносить свои изменения.
    Ответ написан
    Комментировать
  • Как найти ВСЕ кратчайшие пути между двумя вершинами?

    longclaps
    @longclaps
    А зачем?
    Представь себе шахматную доску, твои вершины - клетки, рёбра - границы смежных клеток и только они, переход шаг_влево/шаг_вправо/шаг_вверх/шаг_вниз.
    Сколько существует кратчайших путей с левой нижней клетки в правую верхнюю? спойлер: 3432
    А если вообразить аналогичный трёхмерный куб? 399072960
    Вывод: задача хреново поставлена.
    UPDATE
    Для наглядности, пусть из одной из нужных вершин выходят 3 грани.
    Строишь кратчайший путь, он проходит через первую из 3 граней. Путь запоминаешь, грань перерезаешь.
    Строишь кратчайший путь, он проходит через вторую грань. Если он равновелик первому - запоминаешь, вторую грань перерезаешь, если больше - вторую и третью грани можешь совсем выкинуть.
    Достаёшь первый путь, восстанавливаешь первую грань, идёшь по пути дальше до вершины с развилкой. режешь грань кратчайшего пути - ну, понятно, рекурсия.
    На вырожденном графе, как я и обещал, хана.
    Ответ написан
    3 комментария
  • Какие теоретические основы необходимы программисту?

    angrySCV
    @angrySCV
    machine learning, programming, startuping
    вот что еще в качестве базы:
    базы данных
    синтаксис языка (пару языков, скриптовый + компилируемый)
    стандарты работы - гит, код ревью, комментирование кода, составление документации
    рабочие инструменты -> парсеры, сдк, апи, работа с HTTP, среды разработки, средства для прототипирования, схемы по документированию кода.
    Тестирование - юнит тесты, генераторы тестов, интеграционные тесты, нагрузочные тесты
    =========
    Ну и как дополнение - предметные знания в области в которой работаешь, если это банки - значит что-то с финансами, транзакциями.
    Плюс само собой фреймворки, библиотеки и тд
    Ответ написан
    Комментировать