• Как библиотеку засунуть вместе с самой программой?

    EugeneP2
    @EugeneP2
    Java Dev
    Используйте maven

    Если хотите собрать исполнимы jar файл с включенным в него зависимостями, я использую maven-assembly-plugin:
    <packaging>jar</packaging>
       ....
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-assembly-plugin</artifactId>
    				<configuration>
    					<archive>
    						<manifest>
    							<mainClass>ru.toster.MainClass</mainClass>
    						</manifest>
    					</archive>
    					<descriptorRefs>
    						<descriptorRef>jar-with-dependencies</descriptorRef>
    					</descriptorRefs>
    				</configuration>
    				<executions>
    					<execution>
    						<id>make-assembly</id> <!-- this is used for inheritance merges -->
    						<phase>package</phase> <!-- bind to the packaging phase -->
    						<goals>
    							<goal>single</goal>
    						</goals>
    					</execution>
    				</executions>
    			</plugin>
     </build>
    ...


    потом в командной строке

    mvn assembly:single

    Для сборки war архива никаких доп. плагинов можно не прописывать, а запустить команду
    mvn package

    в pom файле указать только тип архива "war"
    <packaging>war</packaging>

    Если не пользуетесь mvn, в IDE обычно есть встроенные средства для сборки, например в Eclipse IDE:
    File -> Export -> Runnable Jar File -> Package required libraries into generated JAR


    Можно собрать исполнимый jar файл вручную и запаковать в него все нужные библиотеки jar, но сами библиотеки должны бить в распакованном виде, т.е. prog.jar/lib/MySql.jar - такой работать не будет, джава не может грузить джары из джаров:) Нужно будет все либы распаковать вручную, чтоб было: prog.jar/com.mysql.MySqlDriver.class (это пример).

    Например когда вы используете Eclipse для сборки, он встраивает свой загрузчик в архив, потому jar/jar работает. А выше указанный maven плагин как раз распаковать все архивы зависимостей.
    Ответ написан
    2 комментария
  • Как узнатьсколько строк вернул запрос?

    grumblik
    @grumblik
    В меру любопытен и разумно пытлив
    Тут два пути. Первый получить с помощью SQL запроса - точно верный метод.
    И получить с помощью подсчёта строк полученных из запроса - не всегда верный метод(только при маленьком наборе данных).

    Сейчас объясню почему:
    Представьте, что у вас таблица на 100 000 000 000 строк.
    Вы делаете запрос и получаете в результате 10 000 000 000 строк.
    Допустим все эти строки вам нужны в программе (пользователь в форме на сайте глюканул и запросил все данные за последние 10 лет). Но вы сначала проверяете с помощью count(*) сколько вернулось строк.

    Очевидные плюсы - ваша программа не вылетит потому, что вы получаете всего одно значение, а не 10 000 000 000(И соответственно можете не допустить выгрузки такого большого количества данных которые подвесят вашу систему - что то типа if result > 10 000 then return "Слишком много данных"). Во вторых анализатор SQL вполне возможно обойдётся внутренней статистикой, а не проходом по индексам (или если совсем не повезёт фул тейбл сканом, что даже на миллионой таблице может сильно затормозить). В любом случае при использовании count мы не наблюдаем падения производительности, а в хорошем случае наблюдаем её прирост.

    А теперь представим, что вам нужно сделать отчет, вы знаете SQL запрос который вернёт нужные значения, но вы не знаете сколько строк он вернёт. RAM на вашей машине ограничен. Есть вариант, что программа сожрёт всю доступную память и уйдёт в своп(или упадёт если она 32'ух битная и приложению максимум выделяется 1,5 Гб) если заранее не проверить сколько данных мы запихнём в программу. Поэтому нужно перед выгрузкой данных проверить сколько у нас получится этих данных.

    По этому самый лучший вариант сначала "SELECT COUNT(*) FROM chel", а потом уже "SELECT <какие-то_столбцы> FROM chel".
    Это будет правильно. Ну и старайтесь избегать подзапросов там где без них можно обойтись.

    PS это облегчит жизнь и вам и DBA которые будут сопровождать вашу БД.
    С уважением админ как раз одной такой большой БД у которого программисты периодически пишут косячный SQL
    Ответ написан
    2 комментария
  • Как узнатьсколько строк вернул запрос?

    EugeneP2
    @EugeneP2
    Java Dev
    Никак не узнать.

    Или перед основным запросом выполнить SELECT count(*) FROM TABLE
    Ответ написан
    Комментировать
  • Как перехватить пакет?

    MaxDukov
    @MaxDukov
    впишусь в проект как SRE/DevOps.
    РКН забанил гугл? Вы же даже название типа ПО знаете - снифферы.
    поставьте Wireshark.
    Ответ написан
    3 комментария
  • Как перехватить пакет?

    valerium
    @valerium
    Изобретая велосипед
    tcpdump, wireshark
    Ответ написан
    Комментировать
  • Как сделать SSL socket клиент серверное приложение?

    StFaustoff
    @StFaustoff
    jDev
    Работа с сертификатами бывает разная. Это может быть как просто использование сертификата на стороне сервера и дальнейшая проверка через центры сертификации, так и использование самоподписанных сертификатов, когда и клиент и сервер имеют один сертификат и обмениваются ими при подключении. Первый вариант проще, второй бесплатный.
    После этого нужно настроить веб контейнер. Вот тут есть хороший пример настройки TomCat'a. Собственно я использую двухфазную самоподписанную сертификацию.
    После этого начнется "жара" =) Так как я пользуюсь самоподписанным сертификатом, то задача немного усложняется. Дело в том, что на стороне мобильного клиента необходима предварительная настройка контекста интернет соединения для работы с сертификатом. Соответственно идут клиент обращается серверам сертификации, чтобы проверить надежность ресурса. Но так как все самопальное, то приходиться настройки безопасности переводить в режим - доверять всему.
    После этой настройки, контекст передается для создаваемого коннекта и регистрируется.
    Приведу пример кода, выстраданного многими часами кропотливой работы
    try{// Работа с SSL пробрасывает исключения, порой очень неприятные и непонятно как устранимые
       KeyStore keyStore = KeyStore.getInstance("Your_Type_Of_Certificate");//делаем хранилище ключей, аналогичное типу Вашего сертификата
       InputStream in = ...// крепим к потоку сам файл сертификата
       try{
          keyStore.load(in, "Your_Password".toCharArray());//грузим в хранилище сертификат, дополняя его паролем от сертификата
       }catch (Exception ex){
          Log.wtf("OMG",ex.getLocalizedMessage());//либо файла нет, либо пароль не тот
       }finally {
          in.close();
       }
       // Один из "столпов" клиентского SSL, отвечает за хранение всех сертификатов. Имеются разные варианты его настройки(разные алгоритмы)
       KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
       kmf.init(keyStore, "Your_Password".toCharArray());
       KeyManager[] keyManagers = kmf.getKeyManagers();
    
       //Второй элемент, который "должен" проверять, валидны ли наши сертификаты
       TrustManager[] wrappedTrustManagers = new TrustManager[]{
           new X509TrustManager() {
               public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                  return null;
                }
                public void checkClientTrusted(X509Certificate[] certs, String authType) { }
                public void checkServerTrusted(X509Certificate[] certs, String authType) {}
            }
       };
       SSLContext sslContext = SSLContext.getInstance("TLSv1");//Создаем контекст SSL по типу протокола
       sslContext.init(keyManagers, wrappedTrustManagers,  new java.security.SecureRandom());//инициализируем его
           return sslContext;// Радуемся =)
       }catch (Exception ex){
            Log.wtf("OMG", ex.getLocalizedMessage());// Печалимся ='(
            return null;
       }


    После этого контекст можно использовать при создании соединений
    //Устанавливаем контекст
       HttpsURLConnection.setDefaultSSLSocketFactory(методНаписанныйВыше().getSocketFactory());
        //Та самая "защита" которая говорит "мне плевать на всех, коннекчусь куда хочу". Виной этому самоподписанный сертификат.
       HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
       
       SchemeRegistry registry = new SchemeRegistry();
    
        SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
        socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
        registry.register(new Scheme("Type_Of_Connection", socketFactory, 443));
    
        SingleClientConnManager mgr = new SingleClientConnManager(yourConnection.getParams(), registry);
        //Я работаю по https, по этому пример для него
        DefaultHttpClient httpClient = new DefaultHttpClient(mgr, yourConnection.getParams());
    
        HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);


    За такой код я бы и сам себя убил, но увы, любые попытки его поправить к успеху не привели, я рукожоп)
    Стоит заметить, что я использую библиотеки org.apache.http и другие deprecate вещи. Вам же я желаю сделать все по уму и красоте. Надеюсь помог)
    Если будут вопросы, обращайтесь.
    Ответ написан
    4 комментария
  • Что такое провайдер в программировании?

    dunmaksim
    @dunmaksim
    Технический писатель
    Как правило провайдер используется для инкапсуляции более сложного кода, скрывая детали реализации. Он служит этакой обёрткой, реализуя шаблон проектирования "Фасад".
    Вы копируете файл из каталога в каталог, просто перетащив его мышью. Но как это произошло на физическом уровне? Вам этого знать не обязательно, всё скрыто под множественными слоями абстракций.
    Чтобы не думать о каких-либо низкоуровневых вещах, часто вводят провайдеры, сервисы и т.д. Суть одна - скрыть какие-либо часто используемые сложные функции и рутинную работу за простым и понятным интерфейсом.
    Ответ написан
    2 комментария
  • В чем проблема при установке SSL сертификата?

    @Flantru
    Родной контент тоже должен отдаваться по https, а в коде видно например:
    mg class="lcomm-user-foto" src="http://prosmart.by/uploads/fotos/foto_1.gif" alt="li4nost-фото">


    Плюс соединение с гуглом тоже по http
    Все ссылки переводите на относительные, т.к. сейчас принудительно прописан http
    Ответ написан
    Комментировать
  • Какой объем данных можно хранить в SQLite?

    LeEnot
    @LeEnot
    Енот-андроид
    При РАЗУМНОМ применении sqlite, проблем со скоростью у вас не будет.
    Грамотно стройте схему и индексы. Ну и не нужно туда пихать сериализованные картинки и другие файлы.
    На счет предельного объема - вы скорее заполните sdcard, чем дойдете до предела sqlite.
    Ответ написан
    Комментировать
  • Какой объем данных можно хранить в SQLite?

    @Adgh
    Не первоисточник, но:
    https://ru.wikipedia.org/wiki/SQLite

    "Максимальный размер страницы базы данных 32 768 SQLITE_MAX_PAGE_SIZE
    Максимальное количество страниц в файле базы данных 1 073 741 823 SQLITE_MAX_PAGE_COUNT

    На текущий момент только значение SQLITE_MAX_PAGE_SIZE не может быть больше заданного по умолчанию. Таким образом, не изменяя SQLITE_MAX_PAGE_COUNT, можно сказать, что максимальный размер файла базы данных составляет примерно 32 ТБ (35’184’372’056’064 Б)."
    Ответ написан
    Комментировать
  • Как запустить программу на java фоном?

    script88
    @script88
    nohup java -jar programm.jar &

    В этом случае запущенный бинарник останется работать даже при отключении от сервера, но весь выводимый программой текст будет записываться в файл nohup.log, создаваемый в текущем каталоге.
    Ответ написан
    Комментировать
  • Как отследить клавишу Backspace?

    Ewintory
    @Ewintory
    Java / Android developer
    Отслеживать не нужно. Нужно просто использовать правильные инструменты. Для работы с EditText есть специльный TextWatcher.
    editText.addTextChangedListener(new TextWatcher() {
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    // TODO Auto-generated method stub
                }
    
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    // TODO Auto-generated method stub
                }
    
                @Override
                public void afterTextChanged(Editable s) {
                    // TODO Auto-generated method stub
                }
            });
    Ответ написан
    Комментировать
  • Как вызвать Toast с другого класса?

    StFaustoff
    @StFaustoff
    jDev
    Ка дополнительный вариант ко всем предыдущим ответам, можно попробовать MyClass.this.

    PS
    Только я не пойму такой мудреной системы инстанцировать Activity в другом Activity.
    Мы создадим Activity в другом Activity чтобы ты мог использовать Activity пока работает Activity =)

    757-tachka-na-prokachku-ostalos-tolko-pr
    Ответ написан
    Комментировать
  • Почему не работает запрос?

    Writerim
    @Writerim
    Заполнить позже...
    вот
    конкретнее вот эта строка
    WHERE DATE(datetime) = '2009-10-20'
    Ответ написан
    2 комментария
  • Как удалить дубликаты строк, оставляя одну из них?

    BuriK666
    @BuriK666
    Компьютерный псих
    Ответ написан
    Комментировать
  • Как сделать свои собственные лайки на сайте?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Если сайт не очень популярный, то хватит следующих скриптов для исключения возможности проголосовать дважды.

    https://github.com/Valve/fingerprintjs2
    +
    https://github.com/samyk/evercookie/ (перед установкой переименуйте все скрипты, чтобы не блокировались adblock-ом)

    Про привязку к ip забудьте.
    Ответ написан
    1 комментарий
  • Как функцию ctrl+z (отмена последнего действия) запихнуть в кнопку?

    POS_troi
    @POS_troi
    СадоМазо Админ, флудер, троль.
    <script type="text/javascript"> 
    function change() { 
    theText.focus(); 
    document.execcommand("undo"); 
    } 
    </script> 
    <textarea rows="10" cols="10" id="theText"></textarea> 
    <a href="javascript:change();">undo</a>


    Взять любой редактор на JS и посмотреть?
    Ответ написан
    1 комментарий
  • Как грамотно загрузить HTML страницу в другую HTML страницу на JavaScript?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Если грамотно, то вот так:
    var request = $.get('common.htm');
    
    request.done(function(response) {
        var $response = $(response);
    
        // Вместо $response.find(), возможно, придется использовать $response.filter()
        // Это зависит от структуры возвращаемого документа
        $('#header').html($response.find('.header').html());
        $('#menu').html($response.find('.menu').html());
        $('#footer').html($response.find('.footer').html());
    });
    Ответ написан
    Комментировать
  • Где можно найти дизайнера, который будет работать за опыт?

    In4in
    @In4in
    °•× JavaScript Developer ^_^ ו°
    Ахах, это вам что, Minecraft, чтобы работать за Опыт?

    Никто на это не согласится, если люди хотят показать себя - делают что-то свое для портфолио, свои идеи воплощают. А за осуществление ваших нужно выложить денюжки.

    Если и найдете такого дизайнера, то только того, что сделает вам 2 полоски и 3 красные кнопки.
    Ответ написан
    Комментировать