Ответы пользователя по тегу Программирование
  • Как связываются ресурсы с кодом?

    jamakasi666
    @jamakasi666
    Просто IT'шник.
    Тут все немного проще.
    Программисты пишут набор утилит. Програмка или плагин для экспорта-импорта моделей\анимаций\партиклов\звуков\текстур.
    Дальше программисты описывают формат уровня и редактор для него.
    Все это делает этакий "мост" между программистами и всеми остальными.
    Программисты дальше уже по известным форматам ресурсов делают загрузку уровней и описывают логику всего в игре и очень часто многие параметры выносят в конфиги или скрипты. Дальше Уже снова дизайнеры\моделлеры и т.д. начинают подбирать параметры, к примеру размеры тех или иных моделей, их физические свойства, уровень здоровья, скорость бега и т.д.

    Т.е. привязать свойства моделей к свойствам классов и запуск анимаций к вызовам методов, получить возможность дублировать объекты и переключать сцену или активную камеру.
    Тут у вас тоже немного неправильное понимание. Привязывается не код к свойствам моделей. Любой контент это просто визуальная часть которой управляет код. Любое свойство это цифровое значение, откуда будет браться это значение совершенно неважно. Таже модель, в общем виде, это просто массив точек в пространсве. Отдельным файлом к ней может быть скелет в котором опять же точка это кость у которой есть вес(грубо говоря радиус по которому она может двигать соседние точки в пространсве). Еще одним файлом может быть анимация которая тоже является уже массивами точек костей в интервале времени. Еще один файл может описывать текстурную развертку над треугольниками построенными по массиву точек модели описывая каждый треугольник в виде координат на 2д текстуре. Все это может быть упаковано как в 1 файл так и в кучу разных. Именно программист в коде описывает загрузку всего этого добра и смешивает\накладывает эти данные слоями друг на друга.
    Позже программист берет все эти файлы и реализует к примеру переключение анимации что по факту будет просто назначение нужного файла с анимацией(та о которой говорилось выше).

    PS вообще вопрос очень абстрактный и без живых примеров которые будут просто огромные сложно дать простой ответ "вот как это происходит".
    Ответ написан
    Комментировать
  • Что собой представляет Java EE (Web) приложение?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Java очень разносторонняя и ткунть в живой пример почти нереально. Она может быть задействована на любом участке сайта.
    Т.е. ,например, она может вообще весь сайт генерировать(скажем так вместо php весь сайт генерируется с помощью явы). Или это может быть только кусочек на странице. А может быть такое что она висит только в бэкенде и работает с базами и т.д.
    Вещь очень специфичная, как подметили выше, и используется в основном в очень больших и сложных проектах. В остальных случаях это пальба баллистическими ракетами по мухам.
    В пример могу подкинуть пару CMS написанных на яве.
    Ответ написан
    Комментировать
  • Как соединить 2 компа напрямую?

    jamakasi666
    @jamakasi666
    Просто IT'шник.
    Мало информации, лучше нарисовать псевдосхемой.
    Как я понял комп1 где то далеко, прячется за натом провайдера? Или от провайдера ip статичный и белый а серый нат только на стороне локалки в виде обычного роутера?
    Комп2 я так понимаю ваш комп.
    Вопрос где находится сервер? у вас, вместе к комп1 или где то отдельно и имеет свой статичный внешний ip?

    Если комп подходит под описание того что нат у него внутри своей локалки то надо просто пробросить dmz зону на комп1. Если доступа к роутеру нет но есть upnp то шаманить и програмно пробивать себе порт через upnp.

    Другой вариант это любой vpn.

    Еще 1 вариант это написать простейший аналог turn сервера. Т.е. грубо говоря где то на сервере у которого есть возможность открывать любые порты и присутсвует белый внешний ip стоит turn сервер. Turn в самой простой реализации будет работать так:
    По дефолту ждет соединение на любом порту, пусть это будет даже сокетное соединение. При получение входящего соединения начинает ждать 2е соединение. После подключения обоих клиентов он у каждого получает input и output концы, затем кросирует их между собой. комп1(output)->комп2(input) и наоборот комп1(input)->комп2(output). В конечном счете сервер просто проксирует соединение, для комп1 и комп2 соединение будет именно друг с другом но в тоже время сами они будут являться клиентами для turn сервера, нат становится не проблемой, серый ип тоже.
    Ответ написан
    Комментировать
  • Как организовать такую сеть?

    jamakasi666
    @jamakasi666
    Просто IT'шник.
    1) microtic rb2011UiAS-2Hnd + нужный sfp модуль. Или как написали выше обычный медиаконвертер + бытовой роутер как написали выше.
    2) На линуксах есть такая штука как x-forward и можно например тяжелые софтины запускать на мегаПС а слабенький софт все так же запускать локально. Если вопрос относится к игрушкам то есть steam in home streaming.
    Ответ написан
  • Сброс всех аттрибутов статичного класса на null?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Null это вообще плохо. Зачем Вам нужен статичный класс если всеравно будете изменять переменные в нем, может лучше посмотреть в сторону синглтонов? Зачем вообще сбрасывать в null переменные?
    Напишите лучше конкретное место и задачу с которой столкнулись так будет намного проще сказать как лучше решить проблему.
    Я так предполагаю что вам подойдет такой вариант:
    public class Test{
        public static Test instance;
        public Long attr1 = null;
        public String attr2= null;
        public Double attr3= null;
        public Long attr4= null;
        private Test(){}
        public static synchronized Test getInstance(Boolean clear){
           if(instance==null || clear==true) instance = new Test();
           return instance;
        }
      }
    Ответ написан
    9 комментариев
  • Есть ли простые примеры применения ООП?

    jamakasi666
    @jamakasi666
    Просто IT'шник.
    "Паттерны проектирования" O'Reilly. Шедевральные примеры, написано простым языком, кучи примером и отличные объяснения что\зачем\почему.
    Ответ написан
    1 комментарий
  • Java почему вылетает java.lang.NullPointerException?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    mass не инициализирован. Вообще лучше используй коллекции =D
    List<Integer> mass;
    
                void sayLen(){
                    if (mass == null) {
                        System.out.println("0");
                    } else {
                        int len = this.mass.size();
                        System.out.println(len);
                    }
                }
                void addToMass(int e){
                    if (mass == null) {
                        mass = new ArrayList<>();
                        this.mass.add(e);
                    } else {
                        this.mass.add(e);
                    }
    
                }
    
            }
    Ответ написан
    1 комментарий
  • Как реализовать обратную совместимость пользовательских данных в программе?

    jamakasi666
    @jamakasi666
    Просто IT'шник.
    Если формат данных только дополняется то решение элементарное. Скажем у вас в проекте есть 2 класса реализующих чтение и сохранение данных. С каждой версией у вас просто появляются новые данные и старые точно не меняются. Добавляете(если не сделали уже) в каждом файле номер версии. В программе с каждым нововведением просто делаете еще пару классов чтения\записи под новую версию. Потом просто при открытие файла смотреть версию и использовать нужный класс для чтения.

    Другой вариант более тупой, поправить класс чтения\записи так чтобы он игнорировал неизвестные ему данные. Т.е. если вы откроете в старой версии программы файл от более новой версии то он просто проигнорирует неизвестные ему данные.

    На практике видел реализацию очень интересную. Там было очень хитро устроено чтение. Правда проект на яве был.
    Был класс чтения\записи файла, псевдокод:
    class CReader{
    public CReader(URL file);
    void readData(){
       someStructs;
    }
    void writeData(){
       someStructs;
    }
    ... другие методы
    }

    То была первая версия программы, потом выходит новая версия в которой появились некие новые данные и структуры но старые не изменялись. Псевдокод:
    class CReader1 extends CReader{
    @Override
    void readData(){
       super(); //Выполнить родительский метод
       someNewStructs;
    }
    @Override
    void writeData(){
       super(); //Выполнить родительский метод
       someNewStructs;
    }
    }

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

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Сильно рекомендую почитать "Паттерны проектирования" (O'relly Эрик и Элизабет Фриман), очень много подобных вопросов исчезнет сразу и писать будет намного проще.
    Для Вашей ситуации предусмотрены абстрактные классы. К примеру:
    public abstract class MyClass{
    //Ваши общие методы реализованны тут
    // Подсчет тока по каждому двигателю
        private float getCurrent(int engine){
            float phasesA = calculatePhaseForEngine(0, MassCurrentsPhases, engine);
            float phasesB = calculatePhaseForEngine(1, MassCurrentsPhases, engine);
            float phasesC = calculatePhaseForEngine(2, MassCurrentsPhases, engine);
    
            return (phasesA + phasesB + phasesC) / 3;
        }
        // Подсчетываем ток по выбраному двигателю
        private static float calculatePhaseForEngine(int i, float[] MassCurrentsPhases, int currentEng) {
            return MassCurrentsPhases[3 * currentEng + i];
        }
    public abstract void doSomething(); //Такие методы наследники будут обязаны реализовать
    }

    Дальше наследуетесь от абстрактного класса и реализуете методы которые отличаются логикой. Кода становится меньше, читается и понимается лучше и накосячить уже сложнее т.к. общие методы гарантировано у всех одинаковые.
    Ответ написан
    Комментировать
  • Программирование под windows на java?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    у меня слабый комп 1 гб оперативки

    Я так понимаю у вас вин7 на этом компе. Тогда рекомендую поставить WinXP, лагов станет во много раз меньше. Хотя еще более хорошим вариантом был бы Puppy Linux и нетбинс в него, загружаться сможешь прямо с флешки или сд диска.
    Ответ написан
    Комментировать
  • Кто нибудь сталкивался с ТСД (ткрминал сбора данных) zebex PDL-20?

    jamakasi666
    @jamakasi666
    Просто IT'шник.
    Любой ТСД это всегда колоссальная попаболь, конкретно с этим девайсом не сталкивался но во многих других всегда были проблемы следующие:
    1) Лицензии на встроенное ПО в ТСД. Они как правило в комплект с ТСД не входят.
    2) Драйверы и софт как правило заточены под ПО из п1 и опять же как правило требуют еще одну отдельную лицензию.
    3) Повязать ТСД с той же 1С вообще геморой размером с 25 килограмовую гирю, оно вроде бы как работает а вроде бы и нет.
    Ответ написан
    Комментировать
  • Как уйти с распутья технологий?

    jamakasi666
    @jamakasi666
    Просто IT'шник.
    И я свои 5 копеек вставлю. Имею 2 образования, первое получил учась в военке на физика ядерных установок, понял что мне это не интересно и вообще не мое, ушел. Следом поступил в обычный гражданский институт на программиста т.к. всегда была тяга к знаниям в области IT. Учился очно и работал по ночам. Работал сис. админом, интересно но платят не очень. Нашел работу по профилю программистом 1С, поработал, не понравилось т.к. хотелось Jav'ы . Нашел работу ява программистом, работал но понял что мне абсолютно не интересно делать рутинные задачи и вообще появился "рвотный рефлекс" на эту работу. В конечном счете сейчас работаю связистом. Работа безумно нравится и кроме того я нашел то что искал. Мне не надоедает копаться в АТСках и параллельно писать на яве для себя. Так же очень часто пишу программки которые с удовольствием используют на моей основной работе другие люди. В итоге программирование стало моим хобби которым я разбавляю основную работу, иногда пишу программки под заказ знакомым и т.д. , но не полноценным аутсорсом.
    В общем к чему я все это, если есть тяга и жажда знаний в IT, то это очень легко может стать тяжелым и нудным бременем когда область знаний "личного интереса" исчерпана но изучать что то новое не дают корпоративно. Уйдя от работы программистом смог наконец окунуться в мир PHP, JS, Go, Python, C и мне это нравится, хоть и понимаю что мог бы получать в несколько раз больше работая программистом на яве.
    PS: прямо крик души получился.
    Ответ написан
    1 комментарий
  • Проинстанцировать?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Проще говоря создать экземпляр класса. SomeClass sm = new SomeClass();
    Ответ написан
    Комментировать
  • Несколько вопросов по клиент-серверному соединению?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Чтобы понять принципы делай как можно проще. Например:
    1) Представь свою структуру данных точными последовательностями. Скажем у тебя это данные типа "фамилия", "имя", "возраст","в_браке". Типы будут такие string, string, int, boolean. 4 поля данных.
    2) Теперь тебе надо сереализовать твою структуру. Переводишь все ("фамилия", "имя", "возраст","в_браке") в байты.
    3) На клиенте подключаешься к сокетному серверу, открывается соединение. Берешь первое поле "фамилия" (помним что это у тебя уже байты), считаешь его размер(скажем получилось 17 байт). Переводишь число(int) 17 в байты. Пишешь в сокет серверу байтовое число 17. Затем пишешь туда же все свои 17 байт данных. Повторяешь такое со всеми данными.
    4) Сервер запущен и ждет соединения. Клиент подключился, сервер начинает ждать данные. Помним что в п1. у нас заранее известна структура данных. Начинаешь читать из сокета байты размерами int. Прочитал получилось число 17. Читаешь из сокета 17 байт, получилось поле "фамилия", снова читаешь из сокета байты размером int. Узнал из него сколько байт надо прочитать и читаешь их. Таким образом делаешь 4 раза(см. п.1). Теперь остается перевести данные из байт в string, string, int, boolean и получишь на сервере "фамилия", "имя", "возраст","в_браке".
    5) Сервер отключает клиента или скажем по такому же принципу шлет ответ.
    Все выше написанное сильно кривое но для понимания как работает передача данных по сети самое то.
    Что бы перестать бояться сокетов и понять их, представь что это обычные файлы, которые ты открываешь, пишешь и читаешь.
    Ответ написан