Pull to refresh
16
0
Евгений Табацкий @jatx

Программист

Send message

Добавил такое вот:


private static String escapeString(String str) {
        return "'" +
                str
                .replace("\\", "\\\\")
                .replace("\0", "\\0")
                .replace("'", "\\'")
                .replace("\"", "\\\"")
                .replace("\b", "\\b")
                .replace("\n", "\\n")
                .replace("\r", "\\r")
                .replace("\t", "\\t")
                + "'";
    }

Тоже думал включить его на уровне параметра. Но в конце концов, поскольку используются аннотации, решил сохранить единый стиль.

Вангую через неделю после появления «идентификационного модуля» появление его программного эмулятора.
String valueString = value!=null ? "'" + value.toString().replace("'","\\'") + "'" : "NULL";

По идее подобное экранирование должно обезопасить от инъекций. Или я не прав? )

Есть одна идея. Можно, например, сделать как-то так:


class City {
    int id;
    String name;
}

class Person {
    String fullName;
    @ObjectLink(columnName="cityId",linkToField="id")
    City city;
}

Ну и еще обычно делают так.


В конструкторе AsynkTask:


this.activityRef = new WeakReference<SomeActivity>(activity);

В начале метода onPostExecute:


SomeActivity activity = activityRef.get();
if (activity==null) return;

А просто обрабатывать onConfigurationChanged() не вариант?

На самом деле, на большинстве устройств сперва нужно включить в настройках "Отладку по USB".
Так же для некоторых девайсов может понадобиться сделать:


sudo adb kill-server
sudo adb shell

Но такие подробности я опустил, в предположении, что люди, составляющие аудиторию Хабра, смогут разобраться с этим сами.

Из описания bootimg_tools:


Note: These tools were made for Linux. They may also work on Cygwin, but I have not personally tested them.


Вы это имеете в виду? Или можете предложить альтернативный метод под Windows?

Теоретически, насколько я понимаю, нет.
Но на практике проверить не могу, поскольку мой девайс уже был рутованным.

Спасибо за поправку. Именно для этих утилит. Я как андроид-разработчик пользуюсь SDK, на счет наличия в репозиториях не знал.

В первый день я тупо сделал в баше цикл:


while true 
do
     curl ...
done

И запустил таких около 1000 процессов.


На второй день не поленился и написал на Java такой вот класс:


Main.java
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

/**
 * Created by jatx on 06.06.17.
 */
public class Main {
    private static volatile int success = 0;
    private static volatile int total = 0;
    private static int THREADS;

    public static void main(String[] args) {
        THREADS = Integer.parseInt(args[0]);

        for (int i=0; i<THREADS; i++) {
            Voter voter = new Voter();
            voter.start();
        }

        while (true) {
            try {
                Thread.sleep(2500);
                System.err.println(success + " / " + total);
            } catch (Exception e) {}
        }
    }

    private static class Voter extends Thread {
        @Override
        public void run() {
             HttpClient httpClient = HttpClientBuilder.create().build();
            while (true) {
                try {
                    HttpPost request = new HttpPost("http://stats.df.wtf/api/v1/poll");
                    request.setHeader("Content-type", "application/json");
                    StringEntity entity = new StringEntity("{\"email\":\"e.tabatsky@gmail.com\",\"language\":1");
                    request.setEntity(entity);

                    HttpResponse response = httpClient.execute(request);
                    String result = EntityUtils.toString(response.getEntity());
                    if (result.equals("{\"status\":\"ok\"}")) success++;
                    total++;
                } catch (Exception e) {
                    //e.printStackTrace();
                }
            }
         }
    }
}

Запустил в 12500 потоков, больше ресурсы ноута не позволяли.
Итого 21 место :)

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

Фотострану забросил практически сразу после регистрации. Все эти постоянные всплывающие предложения дико раздражают. Чем заниматься подобным непотребством, брали бы лучше пример с нормальных соцсетей, того же ВК, например.
Да и маркетинг в целом — явление больше негативное, нежели позитивное.

Это можно и без триггера реализовать.

Например, устанавливаем email как PRIMARY KEY или UNIQUE, и далее делаем INSERT IGNORE или REPLACE.
По-моему сфера Римана несколько более естественна.
Насколько я помню универовский курс теории функций комплексного переменного, в случае комплексных чисел вокруг бесконечности можно даже в ряды разлагать.
Дождались таки данного соотношения. И даже больше. А ведь еще пару месяцев назад это казалось немыслимым.
У меня заработало с outproxy, который стоял по дефолту при установке.

Information

Rating
Does not participate
Location
Комсомольск-на-Амуре, Хабаровский край, Россия
Date of birth
Registered
Activity