- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
/*
* Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/* @test
@bug 4890726
@summary Check the correctness of KOI8_U by comparing to KOI8_R
*/
import java.util.*;
import static java.lang.Character.UnicodeBlock;
public class UkrainianIsNotRussian {
private static String decode(byte[] bytes, String encoding) throws Throwable {
String s = new String(bytes, encoding);
equal(s.length(), 1);
check(Arrays.equals(s.getBytes(encoding), bytes));
return s;
}
private static void realMain(String[] args) throws Throwable {
final byte[] bytes = new byte[1];
int differences = 0;
for (int i = 0; i < 0xff; i++) {
bytes[0] = (byte) i;
final String r = decode(bytes, "KOI8_R");
final String u = decode(bytes, "KOI8_U");
if (! r.equals(u)) {
differences++;
final char rc = r.charAt(0);
final char uc = u.charAt(0);
final UnicodeBlock rcb = UnicodeBlock.of(rc);
final UnicodeBlock ucb = UnicodeBlock.of(uc);
System.out.printf("%02x => %04x %s, %04x %s%n",
i, (int) rc, rcb, (int) uc, ucb);
check(rcb == UnicodeBlock.BOX_DRAWING &&
ucb == UnicodeBlock.CYRILLIC);
}
}
equal(differences, 8);
}
//--------------------- Infrastructure ---------------------------
static volatile int passed = 0, failed = 0;
static void pass() {passed++;}
static void fail() {failed++; Thread.dumpStack();}
static void fail(String msg) {System.out.println(msg); fail();}
static void unexpected(Throwable t) {failed++; t.printStackTrace();}
static void check(boolean cond) {if (cond) pass(); else fail();}
static void equal(Object x, Object y) {
if (x == null ? y == null : x.equals(y)) pass();
else fail(x + " not equal to " + y);}
public static void main(String[] args) throws Throwable {
try {realMain(args);} catch (Throwable t) {unexpected(t);}
System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed);
if (failed > 0) throw new AssertionError("Some tests failed");}
}
gost 21.02.2019 00:38 # 0
j123123 21.02.2019 00:51 # +2
gost 21.02.2019 00:52 # 0
6E3yMHblu_nemyx 21.02.2019 01:26 # +1
А в 2019-м году в «Java» кто-нибудь пользуется восьмибитными кодировками?
guest8 21.02.2019 01:42 # −999
6E3yMHblu_nemyx 21.02.2019 01:45 # 0
guest8 21.02.2019 01:58 # −999
6E3yMHblu_nemyx 21.02.2019 02:26 # 0
Был почтовый сервис http://е-письмо.рф/ –— не взлетел. С таким ящиком нельзя было зарегистрироваться на форумах ни как вася@е-письмо.рф, ни как %D0%B2%D0%B0%D1%81%D1%[email protected]. А всё потому, что кто-то всё делает по старым мануалам.
guest8 21.02.2019 02:28 # −999
6E3yMHblu_nemyx 21.02.2019 02:40 # 0
MOVET DAVE ZLOEBU^.
guest8 21.02.2019 02:43 # −999
6E3yMHblu_nemyx 21.02.2019 02:46 # 0
guest8 21.02.2019 02:48 # −999
guest8 21.02.2019 02:41 # −999
guest8 21.02.2019 02:42 # −999
guest8 21.02.2019 02:44 # −999
guest8 21.02.2019 02:46 # −999
6E3yMHblu_nemyx 21.02.2019 03:20 # 0
guest8 21.02.2019 07:00 # −999
guest8 22.02.2019 15:50 # −999
guest8 22.02.2019 16:54 # −999
bormand 21.02.2019 11:54 # 0
Ага. И надеяться, что во всех сборочных скриптах не забыли это сделать.
Имхо, проще для разработки юзать пути без пробелов. Даже на венде. Зачем себе грабли раскладывать?
guest8 22.02.2019 15:49 # −999
6E3yMHblu_nemyx 22.02.2019 16:18 # 0
guest8 22.02.2019 16:55 # −999
6E3yMHblu_nemyx 21.02.2019 02:43 # 0
guest8 21.02.2019 02:44 # −999
guest8 21.02.2019 02:45 # −999
guest8 21.02.2019 02:46 # −999
6E3yMHblu_nemyx 21.02.2019 02:53 # 0
guest8 21.02.2019 02:57 # −999
6E3yMHblu_nemyx 21.02.2019 03:13 # 0
Похоже, что новую IDE и библиотеку делали разные отделы.
6E3yMHblu_nemyx 21.02.2019 02:49 # 0
Винда смотрела досовскую запись, только если длинное имя отсутствовало или было запорото.
guest8 21.02.2019 02:51 # −999
6E3yMHblu_nemyx 21.02.2019 02:58 # +1
Если бы функция «с A на конце» не умела читать юникодные имена, она не смогла бы обработать запросы к «Program Files» и к «Мои документы». Внутри функциям «с A на конце» приходилось совершать нелепую операцию: расширять входную строку в локальной кодировке до юникода (возможно, это расширение происходило где-то в недрах драйвера файловой системы).
6E3yMHblu_nemyx 21.02.2019 03:09 # 0
guest8 21.02.2019 03:35 # −999
6E3yMHblu_nemyx 21.02.2019 04:00 # 0
*****
Представь себе, что ты по ошибке создал директорию «Цыплёнок» и хочешь переименовать её в «Индюшонок». Вызываешь MoveFileA("Цыплёнок", "Индюшонок");
Что будет дальше? Мои догадки:
1. "Цыплёнок" из 1251 будет преобразована в Unicode.
2. Драйвер будет искать "Цыплёнок" в Unicode.
3. Если не найдёт (например, директория была создана в голом DOS), преобразует в 866 и будет искать "ЦЫПЛЁНОК" (хотя он и в предыдущем пункте будет искать так же, ибо в Винде файлы регистронезависимы).
4. Теперь нужно переименовать. Второй аргумент ("Индюшонок") будет преобразован из 1251 в Unicode.
5. Длинное имя будет заменено на "Индюшонок". Если его не было (директория была создана в голом DOS), оно будет создано.
6. Для совместимости с DOS нужно обновить и короткое имя. "Индюшонок" будет преобразовано в 866, затем в верхний регистр. Если не влезло в 8 символов или есть символы, запрещённые в DOS, имя будет усечено с добавлением тильды и произвольного числа для предупреждения коллизий. В данном случае нужно будет записать "ИНДЮШО~1".
Windows NT, в отличие от 95, уже не всегда генерирует осмысленные короткие имена. Вместо "ИНДЮШО~1" она может сгенерировать "65A8FC~1". Какой багор)))
6E3yMHblu_nemyx 21.02.2019 04:05 # +1
1. Первый аргумент 1251→Unicode.
2. Опционально Unicode→866 (если длинное имя не найдено).
3. Второй аргумент 1251→Unicode.
4. Unicode→866 (для генерации короткого имени).
Функция MoveFileW тратила меньше сил, ибо аргументы уже были в Unicode.
gost 21.02.2019 11:12 # +1
guest8 21.02.2019 04:26 # −999
6E3yMHblu_nemyx 21.02.2019 13:09 # +1
>> А тот получит ObjectAttributes с полем
PUNICODE_STRING ObjectName
На NT понятно. Но самое смешное, что в «Windows 95» была та же семантика, хотя никакого ntoskrnl не было.
6E3yMHblu_nemyx 21.02.2019 13:16 # +1
Неверно. Он сначала поищет Цыплёнок (двубайтовый), а потом ЦЫПЛЁНОК в однобайтовой кодировке.
ЦЫПЛЁН~1 он искать НЕ будет, если мы явно именно так с тильдой не попросим найти.
*****
С этим связан прикол. В реестре путь к «Program Files» в некоторых местах прописан как «C:\Program Files», а в некоторых как «C:\PROGRA~1». В свежеустановленной винде обычно они соответствуют одной и той же директории, поэтому никаких проблем юзер не замечает.
Сценарий диверсии:
1. Временно переименовываем «Program Files» в «Pituh».
2. Создаём «C:\Programms». В 8 символов не уложились, поэтому создастся короткое имя «C:\PROGRA~1» (других директорий, начинающихся на «PROGRA» сейчас в корне нет, поэтому будет единичка).
3. Переименовываем «Pituh» обратно в «Program Files». Поскольку «PROGRA~1» уже занято, будет создано короткое имя «PROGRA~2».
4. Итог: «PROGRA~2» связано с «Program Files», а «PROGRA~1» связано с другой директорией.
Теперь у нас «PROGRA~1» и «Program Files» соответствуют разным директориям.
gost 21.02.2019 16:16 # 0
Какой же адский багор. Уже много лет Microsoft ратуют за использование «SHGetKnownFolderPath()», а сами продолжают хардкодить пути в сраном «8.3», сдохшем задолго до рождения многих современных программистов?
6E3yMHblu_nemyx 21.02.2019 16:50 # 0
«MS Office» и адобовские продукты любят срать в реестр путями в формате «8.3». Ещё инсталяторы зачастую прописывают пути к деинсталяторам в таком же формате.
gost 21.02.2019 18:25 # +1
Ну, всякие %ProgramFiles, %AppData%, %SystemRoot%, %Temp% и им подобные вроде как уже сто лет в винде существуют.
> «MS Office» и адобовские продукты любят срать в реестр путями в формате «8.3». Ещё инсталяторы зачастую прописывают пути к деинсталяторам в таком же формате.
Печально всё это.
gost 21.02.2019 11:51 # +1
И вот оттуда ссылка:
guest8 21.02.2019 16:57 # −999
gost 21.02.2019 18:21 # 0
guest8 22.02.2019 02:48 # −999
6E3yMHblu_nemyx 22.02.2019 19:13 # 0
Допустим, на картах памяти с файловой системой FAT короткие имена нужны, чтобы их видел фотоаппарат или плеер.
На NTFS короткие имена могли быть задействованы в следующих случаях:
1. Досовской программой, запущенной из-под NTVDM. Сейчас неактуально, поскольку в 64-битных виндах нет NTVDM (неофициальный проект NTVDM64 сейчас не рассматриваем).
2. Досовской программой, запущенной через эмулятор (DOSBOX и всякие виртуалки). Однако, в этом случае генератор коротких имён можно встроить в сам эмулятор. Нет никакой нужды поддерживать его системой.
3. DOS'ом через неофициальный драйвер NTFS. Однако, и в этом случае генератор коротких имён можно встроить в драйвер.
И правда, на NTFS генерировать короткие имена сейчас нет смысла. Разве что ради всякого говна, которое любит прописываться в C:\PROGRA~1, но на этот случай можно сделать симлинк (или directory join).
6E3yMHblu_nemyx 21.02.2019 03:02 # 0
j123123 21.02.2019 12:04 # 0
а если выставить "." то работает
bormand 21.02.2019 12:07 # 0
З.Ы. Kerbal Space Program падал на линупсах с аналогичной ошибкой. Так что и на C# на те же самые грабли с локалями наступают...
guest8 22.02.2019 01:58 # −999
6E3yMHblu_nemyx 22.02.2019 02:14 # 0
В западных –— это в США и в Великобритании.
Страны, принявшие нормы ISO, пишут запятую.
guest8 22.02.2019 02:41 # −999
6E3yMHblu_nemyx 22.02.2019 03:55 # 0
У арабов свой сепаратор, но у них и цифры другие (хотя мы свои цифры называем арабскими).
В довоенных академических британских журналах я видел точку, поставленную в середине строки. Вот так, например: 3·14159265. И это не умножение, а именно сепаратор.
В Канаде жопа. В Квебеке и в прочих франкоговорящих провинциях используют запятую, mon tabarnac! А в англоговорящих –— точку.
Подозреваю, что швейцарец Никлаус Вирт использовал в «Паскале» не родную запятую, а точку и английские ключевые слова, чтобы сделать его популярным в США, иначе «Бройлер Паскаля» и «Дельфи» мы бы не увидели. Хотя с другой стороны, язык с циклом в стиле «für i:=0 nach 9» мог бы заинтересовать «SAP»...
guest8 22.02.2019 04:07 # −999
6E3yMHblu_nemyx 22.02.2019 04:37 # 0
Причём есть ещё персидский вариант (начертание пары значков отличается).
guest8 22.02.2019 16:33 # −999
guest8 22.02.2019 02:14 # −999
guest8 22.02.2019 02:42 # −999
Hu3KoypoBHeBblunemyx 21.02.2019 15:56 # +1
Hu3KoypoBHeBblunemyx 21.02.2019 15:58 # 0
1024-- 21.02.2019 18:11 # +1
gost 21.02.2019 16:12 # 0
6E3yMHblu_nemyx 21.02.2019 18:18 # 0
Hu3KoypoBHeBblunemyx 22.02.2019 11:28 # +1
Например в '(LISP) {TCL} и [Red] вообще нет разделителей, всё пишется через пробелы.
В "Red" кстати можно использовать в дробях и "," и ".", а ещё в нём 3 или более числа разделённых точкой —– это кортеж (с запятыми, почему-то, такого нет). Кстати, в {Red} полно разных 'литералов на все случаи жизни:
guest8 22.02.2019 03:38 # −999
Hu3KoypoBHeBblunemyx 22.02.2019 12:11 # +1
Я хотел пиздеть про осемблеры, форты, сишки, но как зарегал файку почему-то всё прошло.
> То-есть сломать железо из витуалки никак нельзя?
Ну не зря же виртуалки придумали. Хотя, может быть и можно, но Крис умир, а борманд молчит,не у кого спросить.
А вообще-то я своим петушиным моском нихуя не понял, что ты нопейсал. Что делает Вирт у Аллки?
bormand 22.02.2019 12:15 # 0
guest8 22.02.2019 15:20 # −999
guest8 21.02.2019 00:38 # −999
gost 21.02.2019 00:43 # 0
guest8 21.02.2019 02:41 # −999
6E3yMHblu_nemyx 21.02.2019 01:21 # +1
https://ideone.com/aTABMJ
Оператор "-" для строк в «Java» не определён, а перегрузки операторов в этом языке нет.
guest8 21.02.2019 01:43 # −999
Hu3KoypoBHeBblunemyx 21.02.2019 11:42 # +3
Я не понял, мой конплукхтер за Путена? То ли дело "DOS". Segmentation fault.
1024-- 21.02.2019 18:18 # 0
А если считать, что это строки, то можно вообще всё в строку записать и радоваться.
system.out.println("Миру - мир!") - и ни минус, ни восклицательный знак не мешают.
Hu3KoypoBHeBblunemyx 21.02.2019 19:47 # 0
Может быть автор вычел Путена из того что лежало в стеке, и сохранил результат по адресу хуйла.
Hu3KoypoBHeBblunemyx 21.02.2019 19:55 # 0
guest8 21.02.2019 20:07 # −999
6E3yMHblu_nemyx 21.02.2019 20:19 # 0
https://ideone.com/Gquu3i
CHayT 21.02.2019 00:58 # +1
Константа Сёмы.
guest8 21.02.2019 01:44 # −999
guest8 21.02.2019 01:55 # −999
6E3yMHblu_nemyx 21.02.2019 02:04 # −1
^udesnyj wolap@k, kotoryj wse e]e movno ^itatx.
Кстати, некоторые украинцы не знают, что у них в раскладке есть «Ґ». Они даже не знают, в каких словах (кроме «ґавно») она употребляется.
guest8 21.02.2019 02:07 # −999
6E3yMHblu_nemyx 21.02.2019 02:12 # 0
Знакомство компьютером с кодировкой «КОИ-7» и клавиатурой с раскладкой «JCUKEN» не прошло бесследно.
guest8 21.02.2019 02:19 # −999
syoma 21.02.2019 23:17 # +1
6E3yMHblu_nemyx 22.02.2019 00:55 # 0
Кириллицу и другие юникодные символы портит хуйлайтер.
6E3yMHblu_nemyx 22.02.2019 01:05 # 0
В таком режиме кириллица вставляется.
6E3yMHblu_nemyx 22.02.2019 01:23 # 0
Запустил его, чтобы он перегенерировал регулярки. Теперь кириллица с хуйлайтером вставляется, латиница нет.
Какой багор )))
Чувствую, что исходники пакета «Pygments» можно целиком публиковать на «Говнокоде».
В общем, запускайте пока ipython без него (с ключом --simple-prompt).
syoma 22.02.2019 05:16 # 0
То же самое если раскладку клавиатуры поменять.
>--simple-prompt)
Это с какой версии?
6E3yMHblu_nemyx 22.02.2019 15:08 # 0
https://ipython.readthedocs.io/en/5.x/config/options/terminal.html
В документации по 6.x уже появилась строчка «CLI option: --simple-prompt»:
https://ipython.readthedocs.io/en/6.x/config/options/terminal.html
В четвёрке не было ни того, ни другого.
guest8 22.02.2019 16:56 # −999
syoma 22.02.2019 05:16 # 0
guest8 22.02.2019 15:48 # −999
6E3yMHblu_nemyx 22.02.2019 16:32 # 0
guest8 22.02.2019 16:57 # −999
bormand 22.02.2019 17:00 # 0
guest8 22.02.2019 17:37 # −999
guest8 22.02.2019 17:03 # −999
6E3yMHblu_nemyx 22.02.2019 17:29 # 0
guest8 22.02.2019 17:37 # −999
Hu3KoypoBHeBblunemyx 22.02.2019 17:43 # 0
cmepmop 22.02.2019 17:53 # 0
Hu3KoypoBHeBblunemyx 22.02.2019 19:28 # 0
guest8 22.02.2019 17:59 # −999
bormand 22.02.2019 17:59 # −1
З.Ы. Кстати, по ощущениям она шустрее предыдущих и её реже фризит.
guest8 22.02.2019 18:43 # −999
bormand 22.02.2019 18:59 # 0
Впизду его. Я не дождусь пока он распарсит файлы.
guest8 22.02.2019 19:09 # −999
bormand 22.02.2019 19:10 # 0
А что в R# есть реально полезного помимо рефакторинга?
bormand 22.02.2019 19:01 # 0
Не, это на хасвелле.
> nvme
Обычный ssd.
guest8 22.02.2019 19:09 # −999
guest8 22.02.2019 18:42 # −999
guest8 22.02.2019 18:43 # −999
guest8 22.02.2019 19:03 # −999
guest8 22.02.2019 19:08 # −999
guest8 22.02.2019 18:00 # −999
guest8 21.02.2019 02:20 # −999
6E3yMHblu_nemyx 21.02.2019 02:33 # 0
pROSTO W "koi-7" SIMWOLOW `{|}~ NE BYLO, PO\TOMU Q IH NE SRAZU WSPOMNIL.
guest8 21.02.2019 02:24 # −999
guest8 21.02.2019 02:46 # −999
1024-- 21.02.2019 18:26 # 0
С искусственными языками по мере накопления опыта понимаешь, где нормально, а где говно, из-за которого программирование превращается в лютый ад.
А в естественных всё время "кококо, это наше наследие" и "кококо, а мне норм, я привык".
Например, питушню с запятыми в русском языке надо жестоко давить гидравлическим прессом.
gost 21.02.2019 18:56 # 0
А что с ней не так? Абсолютное большинство запятых вполне чётко определяют место, в котором при прочтении будет стоять пауза.
1024-- 22.02.2019 20:32 # 0
cmepmop 22.02.2019 20:35 # −1
Но не кажется ли тебе обидным, что он пишет также и с других фаек, коих у него целый гарем?
1024-- 22.02.2019 20:41 # 0
zhigolo 22.02.2019 20:41 # 0
gost 22.02.2019 20:42 # 0
guest8 21.02.2019 23:13 # −999
guest8 22.02.2019 02:44 # −999
6E3yMHblu_nemyx 22.02.2019 02:45 # 0
—– Кококо, это наше наследие!
guest8 22.02.2019 02:54 # −999
6E3yMHblu_nemyx 22.02.2019 02:57 # 0
А вообще в «Java» уже лет 15 как есть генерики.
guest8 22.02.2019 03:00 # −999
6E3yMHblu_nemyx 22.02.2019 03:08 # 0
Ещё препроцессор используется для эмуляции констант, потому что в старой сишке не было слова «const».
Ещё препроцессор используется для эмуляции модульной системы: прототипы функций копируются в h-файлы.
Для чего ещё?
guest8 22.02.2019 03:14 # −999
6E3yMHblu_nemyx 22.02.2019 16:34 # 0
Создаём класс для колонии-поселения без петухов, а от него наследуем класс для чёрной зоны с петухами.
Hu3KoypoBHeBblunemyx 22.02.2019 18:49 # +1
guest8 22.02.2019 18:56 # −999
OCETuHCKuu_nemyx 22.02.2019 19:59 # 0
Hu3KoypoBHeBblunemyx 22.02.2019 20:01 # 0
guest8 22.02.2019 18:56 # −999
1024-- 22.02.2019 20:34 # 0
Ray_Mints 29.03.2019 15:58 # +1
А через "ґ" могу навскидку вспомнить " ґаву", "ґаздиню", "ґедзя", "ґудзик" и "аґрус".
1024-- 21.02.2019 18:23 # 0
Напомнило анекдот про то, как из-за одного слова создали новый язык.
https://vinauto777.livejournal.com/21145.html
guest8 21.02.2019 19:15 # −999
guest8 21.02.2019 19:16 # −999
guest8 21.02.2019 02:26 # −999
6E3yMHblu_nemyx 21.02.2019 02:35 # 0
dA I TO SOWSEM NEMNOGO, DA PO^TI ^TO NI^EGO.
eSLI TY, ^UWAK, INDEEC, TY NAJDE[X SEBE OTTQG.
nASTOQ]EMU INDEJCU ZAWSEGA WEZDE NI[TQK.
guest8 21.02.2019 02:41 # −999
6E3yMHblu_nemyx 21.02.2019 04:17 # 0
guest8 21.02.2019 04:28 # −999
guest8 21.02.2019 02:33 # −999