LINUX.ORG.RU

Сообщения bvn13

 

Как пользоваться Telegram, если его заблокируют

 , ркс,

Буквально со дня на день Роскомнадзор может начать процедуру блокировки мессенджера. 20 марта Роскомнадзор уведомил мессенджер неисполнении требования передать ключи шифрования ФСБ и поставил дедлайн 15 дней. Они истекают 4 апреля.

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

Здесь инструкция РосКомСвободы «Как пользоваться Telegram, если его заблокируют».

Кто предупрежден - тот вооружен! Пользуйтесь сами, передавайте информацию другим!

В статье рассказаны следующие варианты работы телеграм-мессенджера (официальные, поддерживаются нативно в телеграм!):

  • VPN
  • SOCKS5
  • Tor
  • браузер

___

А у меня-таки вопрос. Как на линуксе поднять SOCKS5 сервер?

UPD: нашел хороший ман, как ставить Dante SOCKS5 сервер https://wiki.dieg.info/socks

Перемещено jollheef из general

bvn13
()

У Телеграма юбилей! 200кк юзверей онлайн

 

bvn13
()

Не отправляются данные на сервер при POST запросе

 , , , ,

Господа Java-исты, вопрос к вам.

Юзаю Spring, Thymeleaf (SpringBoot2, Thymeleaf 5 - он же в СпрингБуте 2?)

Есть форма редактирования пользователя:

<form th:action="@{'/admin/users/'+${userForm.id}}" method="post" th:object="${userForm}">
            <input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
            <input type="hidden" name="lang" th:value="${#locale.language}"/>
            <input type="hidden" name="id" th:value="${userForm.id}"/>

            <!--roles-->
            <div class="form-group">
                <label for="roles" th:text="#{admin.user.roles}"></label>
                <div id="roles">
                    <div th:each="role : ${roles}">
                        <input type="checkbox" th:field="*{roles[__${role.name}__]}" th:checked="${userForm.roles.get(role)}" th:disabled="${disabledRoles.contains(role)}"/>
                        <span style="padding-left: 10px;" th:text="${@translationService.translate(role)}">Role</span>
                    </div>
                </div>
            </div>

            <div class="form-group">
                <button class="btn btn-success" type="submit" th:text="#{admin.action.update.btn}"></button>
            </div>

        </form>

userForm передается такой объект, предварительно заполненный:

@Getter @Setter
public class UserForm extends BaseForm {

    private String username;
    private String realname;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
    private String phoneNumber;
    private Long telegramChatId = 0L;
    private Boolean deletedMark = false;

    private Map<UserRole.ROLE, Boolean> roles = new HashMap<>();

    private Long city;

}

В итоге имею вот такое: https://i.imgur.com/u67fnlO.png

Bсе бы хорошо, но!

Если переключить галки (снять, поставить), то все хорошо, на сервере в контроллер принимаются только взведенные галки:

    @PostMapping("/{userId:\\d+}")
    public String doUserEdit(@PathVariable(name = "userId") Long userId, UserForm userForm, Model model, Principal principal) {
    //...
    }

Но вот если жмякнуть Submit ничего не трогая, то отрендеренные как «checked» галки на сервер не отправляются.

Почему?

bvn13
()

YandexBrowser блокирует аддон friGate

 

Держу не нужно YandexBrowser для хождения на их Webmaster. Сегодня открыл, а он меня начал предупреждать, мол, возможно, это не я расширение поставил, а оно само. И не дает включить расширение обратно.

Возможно, поэтому теперь так: YandexBrowser не нужно

Пост не для того, чтобы спросить, как быть: тут понятно - не использовать YandexBrowser «не нужно». Скорее, пост в качестве предупреждения.

bvn13
()

C--

 кя, с--, ,

Вот тут есть любители всяких там Кисьих языков, ЯРов, которые они пилят от своего ССЗБ-ства.

А когда я учился в школе (да, это были 1990-2000е) мы с одноклассником писали на С--. Был чувак в ФИДО (ЕМНИП), который пилил этот самый С-- как синтаксически С-подобный, но компилируемый в asm-код. Проги получались (только под венду, да) минималистичные, считай чистый байт-код, очень шустрые, и всемогущие, ибо дергай-нехочу эти int-ы (системные прерывания).

А чего б вам, создатели КИ, ЯР и иже с ними, не найти исходники да и не продолжить? годная же тема!

Перемещено tailgunner из development

bvn13
()

Ищу подработку на пару часов в день

 

Коротко об умениях:

  • 1С,
  • Java (Spring/SpringBoot, JavaFX и иже с ними, Apache Camel сейчас на основном месте поднимаем в Apache Karaf контейнерах),
  • Python 3 (Tornado, если суть),
  • ReactJS (Flux делал в одном проекте),
  • могу CSS (но не фанатею),
  • HTML,
  • могу и в админство, но тоже не фанатею, и не особо уже люблю. Видимо, стар стал.

оставлю ссылку

bvn13
()

Получить слово на основании части слова из строки

 ,

Как?

Пример:

aaa bbb ccdddfff gg

Есть подстрока ddd, мне нужно получить ccdddfff

bvn13
()

Новый (для меня) pastebin (текст и картинки) с полным API - работает с curl тоже

 , ,

https://ptpb.pw/

Перепосщивать хау-ту не буду. По ссылке прямо все четко написано, с примерами.

bvn13
()

Spring не хочет писать в БД

 , , pircbotx, ,

Создал issue, но не уверен, что ответят мне там.

Не знаю, как быть. При записи в БД через Repository получаю фриз, контекст не возвращается обратно.

Как быть?

bvn13
()

API для FreePBX

 , , freeepbx

Не являюсь админом ни телефонии, ни этой морды FreePBX. Как она устроена - тоже не знаю.

Хочется автоматизировать перевод номеров телефонов.

Есть какое-то API? или воспользоваться стандартными http-запросами? я посмотрел, там эта форма отсылает на сервер данные в виде php-массивов... меня это страшит.

bvn13
()

Yandex.Касса, basic authorization - Illegal password format

 , , , , yandex касса

Может, сталкивался кто?

Автоматизирую возвраты по кассе.

В доках пишут, что нужно делать авторизацию:

curl https://payment.yandex.net/api/v3/refunds \
  -X POST \
  -u <Идентификатор магазина>:<Секретный ключ> \
  -H 'Idempotence-Key: <Ключ идемпотентности>' \
  -H 'Content-Type: application/json' \
  -d '{
        "amount": {
          "value": "2.00",
          "currency": "RUB"
        },
        "payment_id": "215d8da0-000f-50be-b000-0003308c89be"
      }'

Я ставлю заголовок Authorization в значение "Basic "+Base64(КассаИД+":"+Секрет), но получаю в ответ json с ошибкой «Illegal password format».

Если передать левый пароль (секрет), то пишет то же самое.

Где собака порылась?

bvn13
()

Отправить POST на сервер и обойти проверку CORS

 , , , just-for-fun, web-client

Есть сервис https://baza-otvetov.ru, на котором есть форма викторины https://baza-otvetov.ru/quiz

Сервер отдает на запрос к https://baza-otvetov.ru/quiz страницу html, а после загрузки выполняется следующий javascript-код

<script type="text/javascript">
    function ask(){
        $.ajax({
        cache: false,
        type: "POST",
        url: "/quiz/ask",
        data: {
        },
        beforeSend: function(){
            $(".check").html('<div style="text-align:center;"><img src="/design/images/ajaxloader.gif" /></div>');
        },
        success: function(html){
            $(".check").html(html);
        },
        error: function(){
            $(".check").html('Произошла ошибка, попробуйте обновить страницу.');
        }
        });
    }
    $(document).ready(function () {
        ask();
    });
</script>

Т.е. вопрос с ответами он подгружает POST-запросом к https://baza-otvetov.ru/quiz/ask. Так вот, я никак не могу сэмулировать этот ПОСТ-запрос.


@SpringBootApplication
public class PostrequestApplication implements CommandLineRunner {

	private static final Logger logger = LoggerFactory.getLogger(PostrequestApplication.class);
	private static final String USER_AGENT = "Mozilla/5.0";

    static final String COOKIES_HEADER = "Set-Cookie";
    static java.net.CookieManager msCookieManager = new java.net.CookieManager();


    public static void main(String[] args) {
		SpringApplication.run(PostrequestApplication.class, args);
	}

	@Override
	public void run(String... strings) throws Exception {
        logger.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>> START <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");

        System.setProperty("sun.net.http.allowRestrictedHeaders", "true");


        HttpsURLConnection get = sendGet("https://baza-otvetov.ru/quiz");
        HttpsURLConnection post = preparePostConnection("https://baza-otvetov.ru/quiz/ask", get);
        sendPost(post);
	}


    private HttpsURLConnection preparePostConnection(String url, HttpsURLConnection get) throws Exception {

        System.out.println("\nGET RESPONSE HEADERS");

        Map<String, List<String>> map = get.getHeaderFields();
        for (Map.Entry<String, List<String>> entry : map.entrySet()) {
            System.out.println("Key : " + entry.getKey() + ", Value : " + entry.getValue());
        }


        System.out.println("POST: "+url);

        URL obj = new URL(url);
        HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

        con.setRequestMethod("POST");

        //set cookies
        Map<String, List<String>> headerFields = get.getHeaderFields();
        List<String> cookiesHeader = headerFields.get(COOKIES_HEADER);

        if (cookiesHeader != null) {
            for (String cookie : cookiesHeader) {
                msCookieManager.getCookieStore().add(null, HttpCookie.parse(cookie).get(0));
            }
        }

        if (msCookieManager.getCookieStore().getCookies().size() > 0) {
            // While joining the Cookies, use ',' or ';' as needed. Most of the servers are using ';'
            con.setRequestProperty("Cookie", join(msCookieManager.getCookieStore().getCookies(), ";"));
        }

        //add reuqest header
        con.setRequestProperty("content-length", "0");
        con.setRequestProperty("User-Agent", USER_AGENT);
        con.setRequestProperty("Accept-Language", "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7");
        //con.setRequestProperty("Access-Control-Allow-Origin", "*");
        //con.setRequestProperty("Access-Control-Allow-Credentials", "true");
        con.setRequestProperty("origin", "https://baza-otvetov.ru");
        con.setRequestProperty("referer", "https://baza-otvetov.ru/quiz");

        System.out.println("\nPOST REQUEST HEADERS");
        Map<String, List<String>> map_post = con.getHeaderFields();
        for (Map.Entry<String, List<String>> entry : map_post.entrySet()) {
            System.out.println("Key : " + entry.getKey() + ", Value : " + entry.getValue());
        }


        return con;
    }


    private HttpsURLConnection sendGet(String url) throws Exception {

        System.out.println("GET: "+url);

        URL obj = new URL(url);
        HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

        // optional default is GET
        con.setRequestMethod("GET");

        //add request header
        con.setRequestProperty("User-Agent", USER_AGENT);

        int responseCode = con.getResponseCode();
        System.out.println("Response Code : " + responseCode);

        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        //print result
        System.out.println(response.toString());

        return con;
	}


    private void sendPost(HttpsURLConnection con) throws Exception {

        // Send post request
        con.setDoOutput(true);

        int responseCode = con.getResponseCode();
        System.out.println("Response Code : " + responseCode);

        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        //print result
        System.out.println("RESPONSE: "+response.toString());

    }


    public static String join(List<HttpCookie> var0, String var1) {
        StringBuffer var2 = new StringBuffer();

        for(Iterator var3 = var0.iterator(); var3.hasNext(); var2.append(var3.next().toString())) {
            if (var2.length() != 0) {
                var2.append(var1);
            }
        }

        return var2.toString();
    }

}

Все равно сервер ничего не возвращает.

Как побороть CORS?

bvn13
()

А Yoba-то подражает

 

Извините за пикабу, но https://pikabu.ru/story/kogda_quotvodyankiquot_byili_molodyimi_5648287

Думаю, тут есть, кому захочется обсудить.

bvn13
()

#RuPostgres Live 6. Максим Богук, DataEgret

 , , ,

Онлайн-митап. Ссылка: https://www.youtube.com/watch?v=kAz9sZdisnE

Начало через 10 минут.

Details
Подпишитесь на канал: https://www.youtube.com/c/RuPostgres — не пропустите трансляцию! (для этого есть «колокольчик») Там же будет чат для общения!

Очень глубокое погружение в очень продвинутый SQL.

В этот раз будет нечто ещё более безумное в плане онлaйна, чем раньше! Гигантский телемост Австралия — Калифорния — Германия — Россия %)

Подробнее о содержании митапа.

Не всегда проблемы производительности базы можно решить изменением настроек или простым созданием индексов. Когда эти простые способы не дают результата, в дело вступают более сложные техники, часто требующие переписывания запросов и тому подобной «дрессировки» оптимизатора.

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

Сегодняшний доклад посвещен нетривиальному использованию индексов для ускорения запросов.

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

1. Использование INDEX ONLY SCAN для ускорения offset запросов
2. Использование индекса по (f1) для ускорения запросов ORDER BY f1, f2 LIMIT N
3. Использование индекса по (f2, f1) для ускорения запросов ORDER BY f1, f2 LIMIT N

В ближайшие месяцы будет продолжение этого доклада, посвящённое другим похожим задачам и проблемам.
bvn13
()

Фотографии прошлого

 , ,

Просто поделюсь ресурсом, возможно, кому-то будет полезен.

http://pastvu.com/

ЗЫ. для любителей оправданий на тему «причем тут линукс»: линукс - это прекрасно, и этот ресурс тоже прекрасен.

bvn13
()

SoftEther VPN - Connected with NAT traversal

 , nat-traversal, , ,

Объясните на пальцах неадмину.

Оно типа через UDP подключиться-таки смогло, может быть нестабильно, но ладно. Почему траффик не идет через ВПН-сервер?

bvn13
()

Правильная отдача svg для использования в качестве картинки в img

 , , ,

Хочу картинки отдавать в svg. Но в беке организовал безличную отдачу файлового контента так:


@GetMapping(value = "/{fileName:.+}", produces = APPLICATION_OCTET_STREAM_VALUE)
    @ExceptionHandler(value = FileNotFoundException.class)
    public @ResponseBody
    HttpEntity<byte[]> getFileById(@PathVariable String fileName, final HttpServletResponse response) throws IOException {

        StoredFile file = this.storageService.getFileByName(fileName);
        if (file == null) {
            response.sendError(404, String.format("File %s not found", fileName));
            return null;
        }
        byte[] content;
        try {
            content = this.storageService.getFileContent(file.getPath());
        } catch (IOException e) {
            e.printStackTrace();
            if (this.userService.isCurrentUserAdmin()) {
                response.sendError(404, String.format("File %s (%s) not found", file.getName(), file.getPath()));
            } else {
                response.sendError(404, String.format("File %s not found", file.getName()));
            }
            return null;
        }

        HttpHeaders header = new HttpHeaders();
        header.setContentType(APPLICATION_OCTET_STREAM);
        header.set("Content-Disposition", "inline; filename=" + file.getName());
        header.setContentLength(file.getSize());

        return new HttpEntity<byte[]>(content, header);
    }

Когда вставляю ссыль на картинку, которую загрузил предварительно, так


<img class="skill-icon" src="/files/123" alt="Postgresql">

то она не показывается в виде картинки от слова совсем.

Если я вставляю содержимое файла svg как html, то все ок.

Как быть? Поможет ли явное указание типа контента при отдаче файла?

bvn13
()

Логгирование Spring двоит выдачу лога

 , logback, ,

Использую

	compile('ch.qos.logback:logback-classic')
	compile('org.slf4j:slf4j-api')
	compile('org.apache.commons:commons-lang3')

логгер настроен так (файл logback.xml)

<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="3 seconds">
	<contextName>VoidForum</contextName>

	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>
				%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{32} - %msg%n
			</pattern>
		</encoder>
	</appender>

	<jmxConfigurator />
	<root level="WARN">
		<appender-ref ref="STDOUT" />
	</root>

	<logger name="ru.bvn13.voidforum" level="ALL">
		<appender-ref ref="STDOUT" />
	</logger>

	<logger name="org.hibernate.SQL" level="WARN">
		<appender-ref ref="STDOUT" />
	</logger>
	<!--<logger name="org.hibernate.type" level="TRACE">-->
	<!--<appender-ref ref="STDOUT" />-->
	<!--</logger>-->
	<logger name="org.springframework.web" level="DEBUG">
		<appender-ref ref="STDOUT" />
	</logger>
	<logger name="ru.bvn13.voidforum.controllers" level="DEBUG">
		<appender-ref ref="STDOUT" />
	</logger>
	<logger name="ru.bvn13.voidforum.admin.controllers" level="DEBUG">
		<appender-ref ref="STDOUT" />
	</logger>
</configuration>

При этом каждая строчка вывода лога задваивается. Например:

2017-12-11 22:42:15.507 [main] DEBUG o.s.w.c.s.StandardServletEnvironment - Adding PropertySource 'servletConfigInitParams' with lowest search precedence
2017-12-11 22:42:15.507 [main] DEBUG o.s.w.c.s.StandardServletEnvironment - Adding PropertySource 'servletConfigInitParams' with lowest search precedence
2017-12-11 22:42:15.511 [main] DEBUG o.s.w.c.s.StandardServletEnvironment - Adding PropertySource 'servletContextInitParams' with lowest search precedence
2017-12-11 22:42:15.511 [main] DEBUG o.s.w.c.s.StandardServletEnvironment - Adding PropertySource 'servletContextInitParams' with lowest search precedence
2017-12-11 22:42:15.512 [main] DEBUG o.s.w.c.s.StandardServletEnvironment - Adding PropertySource 'systemProperties' with lowest search precedence
2017-12-11 22:42:15.512 [main] DEBUG o.s.w.c.s.StandardServletEnvironment - Adding PropertySource 'systemProperties' with lowest search precedence
2017-12-11 22:42:15.512 [main] DEBUG o.s.w.c.s.StandardServletEnvironment - Adding PropertySource 'systemEnvironment' with lowest search precedence
2017-12-11 22:42:15.512 [main] DEBUG o.s.w.c.s.StandardServletEnvironment - Adding PropertySource 'systemEnvironment' with lowest search precedence
2017-12-11 22:42:15.512 [main] DEBUG o.s.w.c.s.StandardServletEnvironment - Initialized StandardServletEnvironment with PropertySources [StubPropertySource {name='servletConfigInitParams'}, StubPropertySource {name='servletContextInitParams'}, MapPropertySource {name='systemProperties'}, SystemEnvironmentPropertySource {name='systemEnvironment'}]
2017-12-11 22:42:15.512 [main] DEBUG o.s.w.c.s.StandardServletEnvironment - Initialized StandardServletEnvironment with PropertySources [StubPropertySource {name='servletConfigInitParams'}, StubPropertySource {name='servletContextInitParams'}, MapPropertySource {name='systemProperties'}, SystemEnvironmentPropertySource {name='systemEnvironment'}]
2017-12-11 22:42:15.593 [main] INFO  ru.bvn13.voidforum.Application - Starting Application on bvn13-book with PID 20504 (C:\dev\my\VoidForum\out\production\classes started by bvn13 in C:\dev\my\VoidForum)
2017-12-11 22:42:15.593 [main] INFO  ru.bvn13.voidforum.Application - Starting Application on bvn13-book with PID 20504 (C:\dev\my\VoidForum\out\production\classes started by bvn13 in C:\dev\my\VoidForum)
2017-12-11 22:42:15.594 [main] DEBUG ru.bvn13.voidforum.Application - Running with Spring Boot v1.5.10.BUILD-SNAPSHOT, Spring v4.3.13.RELEASE
2017-12-11 22:42:15.594 [main] DEBUG ru.bvn13.voidforum.Application - Running with Spring Boot v1.5.10.BUILD-SNAPSHOT, Spring v4.3.13.RELEASE

Где напортачил? Почему так происходит?

bvn13
()

Посоветуйте телевизор

 , ,

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

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

Поэтому прошу совета, какие лучше, какой тип экрана, какая начинка, марка, модель, диагональ экрана, на что обратить внимание? Можно прямо ссылками на какой-нибудь ситилинк.

Из необходимых: вайфай/лан надо, и возможность смотреть онлайн/по сети.

bvn13
()

IntelliJ IDEA и работа с GitHub

 , ,

Как их подружить?

В настройках ИДЕА в разделе GitHub выбираю Token, генерировать, тест - все ок.

Попытка прочитать репозиторий - хер там, Host key verification failed.

Какого черта?

bvn13
()

RSS подписка на новые темы