Java Decompiler

The “Java Decompiler project” aims to develop tools in order to decompile and analyze Java 5 “byte code” and the later versions.

JD-GUI is a standalone graphical utility that displays Java source codes of “.class” files. You can browse the reconstructed source code with the JD-GUI for instant access to methods and fields.

JD-Eclipse is a plug-in for the Eclipse platform. It allows you to display all the Java sources during your debugging process, even if you do not have them all.

JD-Core is a library that reconstructs Java source code from one or more “.class” files. JD-Core may be used to recover lost source code and explore the source of Java runtime libraries. New features of Java 5, such as annotations, generics or type “enum”, are supported. JD-GUI and JD-Eclipse include JD-Core library.

JD-Core, JD-GUI & JD-Eclipse are open source projects released under the GPLv3 License.

Java Decompiler (java-decompiler.github.io)

Получение файла из e-mail и чтение его содержимого через android-приложение

Для начала необходимо добавить код intent_filter в файле AndroidManifest для той Activity которая будет отвечать за обработку открытия файла с расширением .vnnt. Расширение может быть любым, желательно чтобы оно было уникальным.

Читать далее «Получение файла из e-mail и чтение его содержимого через android-приложение»

Очистка логов journalctl в Ubuntu

Для очистки логов по условиям: до даты или обрезать до такого-то размера (в кол-ве записей или в Мб) можно использовать встроенные команды:

journalctl --vacuum-size=128M 
journalctl --vacuum-time=1d

Записки ученика iOS программиста

 Все знания полученные здесь взяты из книги «Swift разработка приложений в среде Xcode для iPhone и iPad».

 Исходный код можно получить с сайта GitHub https://github.com/Apress/beg-iphone-dev-w-swift-3

  • для изменения иконки приложения лучше воспользоваться сервисом https://appicon.co Находим изображение размером 1024х1024 и передаем этому сервису? он сам вернет архив с нужными иконками.
  •  Создание кода при помощи которого можно форматировать текст через swift:
Читать далее «Записки ученика iOS программиста»

Блокировка ipv6 запросов к vsftpd

При настройке vsftpd и включении ufw происходит блокировка.

Если в файле vsftpd.conf установлены следующие параметры

  • listen=NO
  • listen_ipv6=YES

и еще включен firewall и у Вас не работает подключение к ftp, то можно попробовать следующее.

В файле vsftpd.conf установить следующие параметры:

  • listen=YES
  • а listen_ipv6=YES закомментировать.

Android. Добавление надписи и метаданных к фото.

Следующий метод нарисует на фото текущую дату и время в нижнем правом углу:

public static Bitmap signBitmap(Bitmap background) {
    background = background.copy(Bitmap.Config.ARGB_8888, true);
    Paint paint = new Paint();
    paint.setColor(Color.YELLOW);
    paint.setTextSize(18f);
    Date date = new Date();
    String dateString = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss", Locale.getDefault()).format(date);
    Canvas canvas = new Canvas(background);
    canvas.drawText(dateString, background.getWidth() - 180, background.getHeight() - 40, paint);
    return background;
}
Читать далее «Android. Добавление надписи и метаданных к фото.»

Оптимизация запросов из базы данных для мобильного приложения

  • Основным механизмом этого процесса является trigger в PostgreSql.Создается функция которая обновляет информацию о том, в каком состоянии находиться таблица. Состояние — это переменная в которой храниться время с типом данных double precision.
INSERT INTO core.sd_table_change (c_table_name, n_change)
VALUES (_c_table_name, (SELECT EXTRACT(EPOCH FROM now())))
ON CONFLICT (c_table_name) DO UPDATE
SET c_table_name = _c_table_name,
n_change = (SELECT EXTRACT(EPOCH FROM now()));
  • Далее создается триггер, который изменяет «состояние таблицы»
CREATE OR REPLACE FUNCTION core.cft_change_version() RETURNS trigger
   LANGUAGE plpgsql
   AS $$
BEGIN
   IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
      select core.sf_table_change_update(t.c_table_name_ref) from  (select TG_TABLE_NAME as c_table_name_ref UNION select  c_table_name_ref from core.sd_table_change_ref where c_table_name = TG_TABLE_NAME) as t; END IF; RETURN NEW;
END
$$;
ALTER FUNCTION core.cft_change_version() OWNER TO mobnius;
COMMENT ON FUNCTION core.cft_change_version() IS 'Триггер. Обновление справочной версии';
  • Для хранения информации о состоянии, создается 2 таблицы:
  1. Состояние таблиц — имя таблицы и её числовое состояние
  2. Таблицы зависимых состояний
CREATE TABLE core.sd_table_change (
c_table_name text NOT NULL,
n_change double precision NOT NULL
);
ALTER TABLE core.sd_table_change OWNER TO mobnius;
COMMENT ON TABLE core.sd_table_change IS 'Изменение состояния таблицы';
COMMENT ON COLUMN core.sd_table_change.c_table_name IS 'Имя таблицы';
COMMENT ON COLUMN core.sd_table_change.n_change IS 'Версия изменения';

ALTER TABLE core.sd_table_change
ADD CONSTRAINT sd_table_change_pkey PRIMARY KEY (c_table_name);
CREATE TABLE core.sd_table_change_ref (
id smallint DEFAULT nextval('core.sd_table_change_ref_id_seq'::regclass) NOT NULL,
c_table_name text NOT NULL,
c_table_name_ref text NOT NULL
);
ALTER TABLE core.sd_table_change_ref OWNER TO mobnius;
COMMENT ON TABLE core.sd_table_change_ref IS 'Зависимость таблиц состояний';
COMMENT ON COLUMN core.sd_table_change_ref.c_table_name IS 'Таблица';
COMMENT ON COLUMN core.sd_table_change_ref.c_table_name_ref IS 'Зависимая таблица';

ALTER TABLE core.sd_table_change_ref
ADD CONSTRAINT sd_table_change_ref_pkey PRIMARY KEY (id);

ALTER TABLE core.sd_table_change_ref
ADD CONSTRAINT sd_table_change_ref_c_table_name_fkey FOREIGN KEY (c_table_name) REFERENCES core.sd_table_change(c_table_name) NOT VALID;

ALTER TABLE core.sd_table_change_ref
ADD CONSTRAINT "sd_table_change_ref_cTable_name_ref_fkey" FOREIGN KEY (c_table_name_ref) REFERENCES core.sd_table_change(c_table_name) NOT VALID;