• Как выучить java?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    В своё время обучение программированию осуществлялось по иному, более человеческому алгоритму.
    Тебе являлся старший или просто более опытный товарищ, своеобразный гуру, который отвечал тебе на все твои вопросы, но не писал программы за тебя.

    Потыкавшись , с его помощью пару недель, ты вдруг начинал понимать, что пишешь!

    Возможно, на периферии бывшей великой страны, вне чёрного города жёлтого дьявола Москвабада, что-то ещё и сохранилось из тех, человечных времен. Поищите, а вдруг)))
    Ответ написан
    Комментировать
  • Java swing. как переопределять paintComponent() несколько раз, в зависимости от нажатой кнопки?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Давно Свингом не занимался, но скоро буду)) Пока есть только предложение - раз есть один BufferedImage, что мешает заменять его на другой прямо по ссылке, не перерисовывая имеющийся (создав-закачав нужное предварительно из ресурса или с диска), и потом уже вызывать paintCоmponent (repaint?) сразу после замены?

    И не проще ли использовать файлы Icon, а не BufferedImаge, который достаточно низкоуровневый? Но это, конечно, только для случая, когда иконки статические, не динамически рисуемые.

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

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

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Может, время исполнения, т.е. время с момента старта программы?
    Если да, то удобно org.apache.commons.lang.time.StopWatch.
    Ответ написан
    Комментировать
  • На чем строить GUI?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Swing вполне самодостаточен, легко эмулирует GUI любой ОС, что Windows, что другие. Кроме Андроид и прочих смартфоных.
    Ответ написан
    Комментировать
  • На правильном ли я пути к удалению ненужных функций из памяти во время выполнения кода?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Это есть проклятие парадигмы бесконечной памяти современных компьютеров и сред разработки.
    В ОС-РВ (RSX11-M) СМ-4 ( PDP-11), был ткой волшебный инструмент, Task Builder (TKB).
    Для большой задачи (например на Фортране), не помещающейся в отведённую ей память (64 килобайт) ОС, создавался описатель загрузки программных модулей (в обиходе - оверлей), т.е. чёткое формализованное описание, какой модуль когда другой модуль вызывает, и какие из них находятся в памяти одновременно.
    Естественно, такой подход требовал чёткого понимания своей задачи, проектирования структуры модулей и прочей дисциплины мышления.
    И получалось буквально волшебно! Поработает программа. подёргает свой диск DK: (2.5 мегабайта! Не килобайты!) да и попросит: а вставьте ка мне ещё дисочек, на котором прописана мой вторая часть!
    Вот оно, колдунство какое возможно было! Сегодня уже и не знаешь, какие библиотеки откуда и зачем прилинкованы))) А если памяти не хватает, надо брать другой компьютер. Или увольняться)))
    Ответ написан
    Комментировать
  • Как вывести на экран изображение?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Попробуй это, потом что-нибудь ещё. То что хочешь, вполне возможно и на Жабел:
    package tests;
    
    import java.awt.*;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    
    /**
     * <pre>
     * Class name: Demo
     * Created by SYGSKY for package ru.ts.tests
     * Date: 17.12.2010
     * Time: 16:47:55
     * <p/>
     * ... remove as soon as possible as it is only for testing purposes ...
     * <p/>
     * Changes:
     * </pre>
     */
    public class FullScreen extends java.applet.Applet
    {
      private Label l;
      private Window w;
      private boolean running;
      private int clicks;
      private String[] messages = new String[]{
        "Прикольно, да?",
        "ты хочешь меня... удалить…",
        "Ты знаешь, я не должна, но, но...",
        "Я прекрасна, прсто кликни по мне ещё раз :)"
      };
    
      public synchronized void start()
      {
        w = new Window( new Frame() );
        l = new Label( "PWND" );
        l.setFont( new Font( "Serif", Font.BOLD, 120 ) );
        l.setAlignment( l.CENTER );
        l.setForeground( Color.white );
    
        l.addMouseListener( new MouseAdapter()
        {
          public void mouseClicked( MouseEvent me )
          {
            clicked();
          }
        }
        );
        l.setCursor( Cursor.getPredefinedCursor( Cursor.HAND_CURSOR ) );
    
        w.setBackground( Color.CYAN );
        w.setOpacity( 0.7f );
        w.setLayout( new BorderLayout() );
        w.add( l, BorderLayout.CENTER );
    
        Dimension ss = Toolkit.getDefaultToolkit().getScreenSize();
        w.setBounds( 0, -128, ss.width, ss.height + 256 );
    
        w.setVisible( true );
    
        running = true;
        new Thread()
        {
          public void run()
          {
            while ( isRunning() )
            {
              try
              {
                EventQueue.invokeAndWait( toFront );
                sleep( 10 );
              }
              catch ( Exception ex )
              {
                ex.printStackTrace();
                return;
              }
            }
          }
        }.start();
    
        try
        {
          w.setAlwaysOnTop( true );
        }
        catch ( Throwable t )
        {
          // it was just an attempt, we know this should be forbidden to Applets
        }
      }
    
      private Runnable toFront = new Runnable()
      {
        public void run()
        {
          w.toFront();
        }
      };
    
      private synchronized boolean isRunning()
      {
        return running;
      }
    
      private synchronized void clicked()
      {
        if ( clicks >= messages.length )
        {
          running = false;
          w.dispose();
          return;
        }
        if ( clicks == 1 )
        {
          l.setFont( new Font( "Serif", Font.BOLD, 40 ) );
        }
        l.setText( messages[ clicks++ ] );
      }
    }
    Ответ написан
    Комментировать
  • Как реализовать общение двух и больше компьютеров в java?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Если есть общая БД, то достаточно просто реализовать получение и обработку через неё. С монопольным захватом данных, передачей данных, синхронизацией и т.д.. БД это всё поддерживают. И никаких сокетов, это плюс. Только доступ к БД, который, несомненно, тоже надо администрировать. Но это неизбежно и не даёт дополнительных затрат времени.
    Ответ написан
    Комментировать
  • Как модели связать форму отображения (полигон, линия, точка) с элементом?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Пространственные метеорологические явления отображаются обычно в виде изолинейных полей. Или в виде ареалов с плавным переменным фоном (его проще строить).
    Всё это относится к ГИС-системам и наработано огромное множество методов и библиотек для реализации графики.
    Правда, классический вариант ГИС-системы не подразумевает динамических изображений, максимум - построение информационных срезов для разных моментов времени для единого географического региона.

    Или можно использовать просто GeoServer, в который загружаются лишь геометрия, а статистику он отображает уже сам, из полученных данных
    Ответ написан
    Комментировать
  • Почему при обращении из локального класса к переменной окружающего класса, после её явной инициализации показывает её как null?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Всё логично, хотя и запутано. Устанавливается переменная одного класса (Test), а считывается другого (Test1).
    Если в main вызвать itest.setName("Имя2"), то itest.getName() напечатает "Имя2" :o)
    Ответ написан
    Комментировать
  • Куда писать методы из main(String args[]) jar-приложения в веб-приложении?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Не слишком понятно, что имелось в виду про
    то где писать то, что я писал в main(String args[])
    . Но если предположить, что ищется метод, где всё инициализируется и код пользователя запускается в первый раз, то это вполне может быть класс в HTTP-сервере (написанном на Java), расширяющий системный класс HTTPServlet и перекрывающий его метод init. Наподобие ниже приведённого:
    public final class CustomerDispatcher extends HttpServlet {
    ...
       // Вызывается при инициализации сервлета!
       public void init(ServletConfig config) throws ServletException {
          super.init(config);
          this.context = config.getServletContext();
          this.contextPath = this.context.getContextPath();
          this.rp = new RequestProcessor(this.context);
          this.sman = FssServiceFactory.getFactory().getSecurityManager();
       }
    ...
    Ответ написан
    Комментировать
  • Как изменить размер изображения Java?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Похоже, что масштаб уменьшения Вы установили, но ни к какой картинке его не применили.
    Ответ написан
    Комментировать
  • Проблемы с форматом времени в SimpleDateFormat. Где накосячил?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Тогда уж следовало сразу писать:
    Date date = new Date();
        SimpleDateFormat hoursmins = new SimpleDateFormat("HHmm");
        String stringHoursMins = hoursmins .format(date);
        int hourandminute = Integer.parseInt(hoursmins );


    Не понятно, почему SimpleDateFormat выдаёт в 12 часовом формате. Всегда и везде выдавал в формате 0-23.
    Также непонятно, почему требуется умножать часы на 100. Получается какая-то инопланетная система времяисчисления. Так, вместо наших 12 часов 30 минут = 750 минут, получится 1230 = 20 часов 30 минут. Но это уже могут быть особенности реализации или исторические особенности счёта в разных отраслях экономики (жд. моряки...)
    Ответ написан
    1 комментарий
  • Java. Каким способом объединить xml больших обьемов?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Если имеется в вижу, что есть множество мелких файлов XML общим объёмом 100Мб-1Гб, то применял следующие методы:
    1. StringBuilder с заголовком, далее в него дописываю выдранные с помощью RegEx содержимые каждого из XML. В конце записываю в StringBuilder в шапку что требуется (например, число обработанных файлов), добавляю хвост интегрального XML - и вуаля.
    2.Если не требуется шапку менять в конце работы, то открываю новый ZIP файл и пишу в его поток, который идёт сразу на диск (или в память, как требуется по ситуации). Получается ещё компактнее, раз так в 20-30 по памяти.
    3. Можно и просто в буферизованный файловый поток писать, опять-же (см. пункт 2).

    Выдирал всегда RegEx'ом только потому, что условия были простыми: найти начальный и замыкающий теги нужного куска XML. Если желательно форматирование, то можно слегка подшаманить при добавлении очередного найденного куска с дополнительными пробелами, табуляциями и \n(\r).
    Ответ написан
    Комментировать
  • Как дописать строку в конец текстового файла в Java?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Открывать каждый раз файл в методе write не на перезапись с начала файла, как сделано здесь, а на дозапись. Конкретные параметры и вызовы не помню)))
    Ответ написан
    Комментировать
  • Почему hashset добавляет одинаковые объекты?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Переписывать нужно методы hashСode и equals вместе.
    Получилось так, что equals, вызываемый при обнаружении равенства hasСode, унаследован от Object. А он там сравнивает объекты по их адресу в памяти. Которые, для разных объектов, само собой, разные. Поэтому Ваш HashSet и считает что ВСЕ новые объекты, какой бы ни был у них hashcode, будут разными!

    Просто перепишите и equals, чтобы он сравнивал между собой соответствующие друг другу поля класса у разных его экземпляров. И при их равенстве HashSet отвергнет второй объект, у которого тот же hashCode и те же значения полей.

    Больше про эти дела, например тут.

    И вообще это очень полезное и железное правило: одновременно менять (или проверять работоспособность этой сладкой парочки) hashCode и equals.
    Ответ написан
    2 комментария
  • Откуда получать тарифы ЖКХ через api?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Тарифы разные для соседних административных единиц. Кем устанавливаются - неизвестно. Если разными конторами, то одного источника нет. Скорее - разными.
    Ответ написан
    Комментировать
  • Какая средняя ЗП у .Java разработчика в Новосибирске?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    На взгляд со стороны работника, любая средняя в РФ (и не только, был опыт и с забугорьем) контора подбирает людей по принципу минимальной зарплаты. И торгуется за эту зарплату из принципа.

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

    Казалось бы, ты просчитай, продумай, что тебе выгоднее, одного брать и на много, или двух на чуть-большую сумму. Или ещё что! Нет, он берёт одного и на меньшую)))

    Такова диалектика личной прибыли и заинтересованности. Это - закономерность, и исключения её не опровергают.

    В Перми, знаю, начинающие программеры любого рода и вида берутся на 50-70 грязными. В Москве, полагаю, программеры однозначно хотят побольше. Тем более, что они в Москве все родом из перми или новосибирска и потратились на переезд. А вот дадут-ли - это уже вопрос везения, а не рыночных суб-материй.

    Всё - ПМСМ!
    Ответ написан
    Комментировать
  • История местоположения google, как получить даты посещения конкретной точки?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Гугль, значит, следит за тобой, маленький братец? Ну-ну (задумчиво отключает всякий Гугль 5 лет тому назад и не включает Яндекс).
    Ответ написан
  • Какие библиотеки существуют для разработки десктопного приложения на Java?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Основной смысл существования Java в том, что она работает везде приблизительно одинаково. Посему не следует использовать какой-либо софт, использующий нативные интерфейсы, за исключением собственно Java VM.

    В этом случае решение - только Swing. На нём реально можно писать приложения, нисколько не уступающие нативным на Windows, скажем. И выглядят они неотличимо. По крайней мере, лучше Delphi ))) Чтобы вид Java-десктоп не отличался от натbвиного, достаточно одной строки кода. Тогда в разных системах приложение будет выглядеть слегка по разному (углы, цвета), но сохраняя основные геометрические соотношения между элементами GUI и взаимодействуя одинаково с файловой системой, БД, графикой!

    Возможно, стоит поискать более высокоуровневые надстройки над Swing. Или самому сделать свою библиотеку, делающую нужные Вам вещи в 1-2 строки кода.

    Есть и разнообразные компоненты, работающие со звуком, видео, 3D. Видел Doom-3 на Java через OpenGL.
    Ответ написан
    Комментировать
  • Народ как заставить рандом работать с вероятностю в java???

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    // JAVA code
    
        public static void main( String[] args ) throws Exception
        {
            for(int num: new int[]{10,100,1000, 10000,100000,1000000})
                probByNum( num );
        }
    
        private static void probByNum( int num )
        {
           //final char[] chars = { 'а', 'б', 'в' };
            final double[] probs  = { 0.12d, 0.5d, 1.0d }; // cumulative probability for each value
    
            int[] res = new int[ 3 ];
    
            Random rnd = new Random( ( new Date() ).getTime() ); // each time different seed
            for ( int i = 1; i <= num; i++ )
            {
                double prob = rnd.nextDouble();
                for ( int j = 0; j < 3; j++ )
                {
                    if ( prob < probs[ j ] )
                    {
                        res[ j ]++; // count detected probability
                        break;
                    }
                }
            }
    
            System.out.println(
                String.format( Locale.ENGLISH,"Probability with %10d trials to hit 0.120, 0.380, 0.500 is: %4.3f, %4.3f, %4.3f",
                    num,
                    ( ( ( double ) res[ 0 ] ) / ( double ) num ),
                    ( ( ( double ) res[ 1 ] ) / ( double ) num ),
                    ( ( ( double ) res[ 2 ] ) / ( double ) num ) ) );
        }
    // Results:
    Probability with         10 trials to hit 0.120, 0.380, 0.500 is: 0.100, 0.200, 0.700
    Probability with        100 trials to hit 0.120, 0.380, 0.500 is: 0.080, 0.410, 0.510
    Probability with       1000 trials to hit 0.120, 0.380, 0.500 is: 0.122, 0.375, 0.503
    Probability with      10000 trials to hit 0.120, 0.380, 0.500 is: 0.124, 0.377, 0.499
    Probability with     100000 trials to hit 0.120, 0.380, 0.500 is: 0.122, 0.377, 0.501
    Probability with    1000000 trials to hit 0.120, 0.380, 0.500 is: 0.119, 0.380, 0.501
    Ответ написан
    Комментировать