Научите меня переносить треды в Клуб
сабж. а то уже которую ветку трут с подписью «в Клуб». а я не могу.
сабж. а то уже которую ветку трут с подписью «в Клуб». а я не могу.
Есть OpenVPN сервер, к нему цепляется клиент. Пинги ходят туды-сюды.
Хочу на сервере поставить http-proxy так, чтобы он траффик гонял не напрямую с этой машины, а через vpn-тунель прогонял.
Как настроить?
Кейс. Через в nginx настроен proxy_pass на другой порт, который слушает другой веб-сервер (Java, Spring, к примеру). Иногда требуется перегрузить этот веб-сервер. Nginx, соответственно, выдает ошибку, что недоступен сейчас.
Можно ли его «уговорить» отдавать какой-нибудь статический html в таком случае? Можно было бы запилить «объяснительную», почему сервер в дауне, и javasrcipt-ом пытаться перегрузить страницу. Было бы стильно, модно, молодежно.
___
maxcom, почему тег «proxy_pass» некорректный?
Для TelegramBots библы установка прокси реализована как работа с HttpHost объектом.
Разрабы не чешутся отвечать мне на вопрос про socks5-proxy.
Вот мне и подумалось, что можно как-то обернуть socks5-прокси клиента, чтобы он работал как HttpHost объект.
Может, делал уже кто-то? Или у кого-то мысли есть по этому поводу?
Стал замечать, что глаза в последнее время устают от темных тем, поэтому плавно перехожу на светлые.
Немного поиграл со стандартной темой white2, получил такой-себе серый (почти) ЛОР.
Чуть больше скриншотов:
( CSS внутри )
Гугл в этом году на 1 апреля сделал занимательную игру на своих картах.
https://i.imgur.com/joroE22.jpg
Если их открыть, то в левом верхнем углу появится Уолли. Нажав на него - начинается игра.
А Яндекс карты сегодня полдня не работали.
Буквально со дня на день Роскомнадзор может начать процедуру блокировки мессенджера. 20 марта Роскомнадзор уведомил мессенджер неисполнении требования передать ключи шифрования ФСБ и поставил дедлайн 15 дней. Они истекают 4 апреля.
Пока Telegram в очередной раз пытается донести до российских чиновников, почему передача ключей не возможна, наши специалисты подготовили подробный гид о том, как пользоваться мессенджером в режиме блокировки.
Здесь инструкция РосКомСвободы «Как пользоваться Telegram, если его заблокируют».
Кто предупрежден - тот вооружен! Пользуйтесь сами, передавайте информацию другим!
В статье рассказаны следующие варианты работы телеграм-мессенджера (официальные, поддерживаются нативно в телеграм!):
___
А у меня-таки вопрос. Как на линуксе поднять SOCKS5 сервер?
UPD: нашел хороший ман, как ставить Dante SOCKS5 сервер https://wiki.dieg.info/socks
Перемещено jollheef из general
Подробности https://telegram.org/blog/200-million
Господа 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» галки на сервер не отправляются.
Почему?
Держу не нужно YandexBrowser для хождения на их Webmaster. Сегодня открыл, а он меня начал предупреждать, мол, возможно, это не я расширение поставил, а оно само. И не дает включить расширение обратно.
Возможно, поэтому теперь так: YandexBrowser не нужно
Пост не для того, чтобы спросить, как быть: тут понятно - не использовать YandexBrowser «не нужно». Скорее, пост в качестве предупреждения.
Вот тут есть любители всяких там Кисьих языков, ЯРов, которые они пилят от своего ССЗБ-ства.
А когда я учился в школе (да, это были 1990-2000е) мы с одноклассником писали на С--. Был чувак в ФИДО (ЕМНИП), который пилил этот самый С-- как синтаксически С-подобный, но компилируемый в asm-код. Проги получались (только под венду, да) минималистичные, считай чистый байт-код, очень шустрые, и всемогущие, ибо дергай-нехочу эти int-ы (системные прерывания).
А чего б вам, создатели КИ, ЯР и иже с ними, не найти исходники да и не продолжить? годная же тема!
Перемещено tailgunner из development
Коротко об умениях:
Как?
Пример:
aaa bbb ccdddfff gg
Есть подстрока ddd
, мне нужно получить ccdddfff
Перепосщивать хау-ту не буду. По ссылке прямо все четко написано, с примерами.
Не являюсь админом ни телефонии, ни этой морды FreePBX. Как она устроена - тоже не знаю.
Хочется автоматизировать перевод номеров телефонов.
Есть какое-то API? или воспользоваться стандартными http-запросами? я посмотрел, там эта форма отсылает на сервер данные в виде php-массивов... меня это страшит.
Может, сталкивался кто?
Автоматизирую возвраты по кассе.
В доках пишут, что нужно делать авторизацию:
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».
Если передать левый пароль (секрет), то пишет то же самое.
Где собака порылась?
Есть сервис 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?
Извините за пикабу, но https://pikabu.ru/story/kogda_quotvodyankiquot_byili_molodyimi_5648287
Думаю, тут есть, кому захочется обсудить.
Онлайн-митап. Ссылка: 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
В ближайшие месяцы будет продолжение этого доклада, посвящённое другим похожим задачам и проблемам.
← назад | следующие → |