Crimson.Lab

Лаборатория Кримсона

  • Генерируем нейро-котиков в сентябре

    Генерируем нейро-котиков в сентябре

    Посмотрим как dalle2 эволюционировал за это время.

    cat hacker, computer
    (foggy background, epic realistic, rutkowski, hdr, intricate details, hyperdetailed, cinematic, rim light, muted colors:1.2)
    

    hacker-cat-7 hacker-cat-8 hacker-cat-9

    Предыдущие генерации - Генерируем нейро-котиков


  • Таблица инициалей и финалей в китайском языке с переводом

    Таблица инициалей и финалей в китайском языке с переводом

    Инициаль + Финаль 1-й тон 2-й тон 3-й тон 4-й тон Перевод
    a 啊 (ā) — междометие 啊 (á) — междометие 啊 (ǎ) — междометие 啊 (à) — междометие междометие
    ai 哀 (āi) — скорбь 挨 (ái) — терпеть 矮 (ǎi) — низкий 爱 (ài) — любовь любовь, низкий
    an 安 (ān) — покой 俺 (án) — я (устар.) 岸 (ǎn) — берег 暗 (àn) — тёмный покой, тёмный
    ang 肮 (āng) — грязный 昂 (áng) — возвышаться - 盎 (àng) — изобилие возвышаться
    ao 凹 (āo) — вогнутый 熬 (áo) — терпеть - 傲 (ào) — гордый гордый
    ba 八 (bā) — восемь 拔 (bá) — вытаскивать 把 (bǎ) — держать 爸 (bà) — папа восемь, папа
    bai 白 (bāi) — белый 白 (bái) — белый 百 (bǎi) — сто 败 (bài) — проигрывать белый, сто, проигрывать
    ban 班 (bān) — группа - 板 (bǎn) — доска 半 (bàn) — половина половина
    bang 帮 (bāng) — помогать - 榜 (bǎng) — список 棒 (bàng) — крутой помогать, крутой
    bao 包 (bāo) — сумка - 保 (bǎo) — защищать 报 (bào) — сообщать сумка, защищать, сообщать
    bei 杯 (bēi) — стакан - 北 (běi) — север 被 (bèi) — быть стакан, север, быть чем-то
    ben 奔 (bēn) — бежать - 本 (běn) — основа 笨 (bèn) — глупый бежать, основа, глупый
    beng 崩 (bēng) — разрываться - - 蹦 (bèng) — прыгать разрываться, прыгать
    bi 逼 (bī) — заставлять 鼻 (bí) — нос 比 (bǐ) — сравнивать 必 (bì) — обязательно нос, сравнивать, обязательно
    bian 边 (biān) — сторона - 扁 (biǎn) — плоский 变 (biàn) — изменять сторона, изменять
    biao 标 (biāo) — знак - 表 (biǎo) — таблица - знак, таблица
    bie - 别 (bié) — другой - - другой
    bin 宾 (bīn) — гость - - - гость
    bing 冰 (bīng) — лёд - 饼 (bǐng) — лепёшка 病 (bìng) — болезнь лёд, болезнь
    bo 波 (bō) — волна 博 (bó) — широкий - - волна, широкий
    bu 布 (bù) — ткань 捕 (bǔ) — ловить - 不 (bù) — нет ткань, ловить, нет
    ca 擦 (cā) — тереть - - - тереть
    cai 猜 (cāi) — гадать 才 (cái) — талант 采 (cǎi) — собирать 菜 (cài) — овощи гадать, талант, овощи
    can 参 (cān) — участвовать - 惨 (cǎn) — ужасный - участвовать, ужасный
    cang 仓 (cāng) — склад 藏 (cáng) — прятать - - склад, прятать
    cao 操 (cāo) — упражняться - 草 (cǎo) — трава - упражняться, трава
    ce 册 (cè) — книга - - 测 (cè) — измерять книга, измерять
    cen - - - - нет
    ceng - 层 (céng) — этаж - - этаж
    cha 插 (chā) — вставлять 茶 (chá) — чай 差 (chǎ) — различие 差 (chà) — плохой вставлять, чай, плохой
    chai 拆 (chāi) — разбирать - - - разбирать
    chan 搀 (chān) — помогать 缠 (chán) — запутывать 产 (chǎn) — рожать - помогать, запутывать, рожать
    chang 昌 (chāng) — процветание 长 (cháng) — длинный 场 (chǎng) — место 唱 (chàng) — петь длинный, место, петь
    chao 抄 (chāo) — копировать 朝 (cháo) — утро 吵 (chǎo) — шуметь - копировать, утро, шуметь
    che 车 (chē) — машина - - 撤 (chè) — убирать машина, убирать
    chen - 陈 (chén) — фамилия - 趁 (chèn) — использовать фамилия, использовать
    cheng 撑 (chēng) — поддерживать 成 (chéng) — стать - 称 (chèn) — взвешивать поддерживать, стать, взвешивать
    chi 吃 (chī) — есть 迟 (chí) — поздний 耻 (chǐ) — стыд 赤 (chì) — красный есть, стыд, красный
    chong 冲 (chōng) — рваться 虫 (chóng) — насекомое 宠 (chǒng) — баловать - рваться, насекомое, баловать
    chou 抽 (chōu) — вытаскивать 仇 (chóu) — враг 丑 (chǒu) — некрасивый 臭 (chòu) — вонючий вытаскивать, враг, некрасивый
    chu 出 (chū) — выходить 除 (chú) — удалять 处 (chǔ) — место 触 (chù) — касаться выходить, касаться
    chuan 穿 (chuān) — носить 船 (chuán) — лодка 喘 (chuǎn) — задыхаться 串 (chuàn) — связка носить, лодка, задыхаться
    chuang 窗 (chuāng) — окно 床 (chuáng) — кровать 闯 (chuǎng) — врываться 创 (chuàng) — создавать окно, кровать, создавать
    chun 春 (chūn) — весна 纯 (chún) — чистый 蠢 (chǔn) — глупый - весна, чистый, глупый
    ci 刺 (cī) — колоть 词 (cí) — слово 此 (cǐ) — это 次 (cì) — следующий слово, следующий
    cong 聪 (cōng) — умный 从 (cóng) — следовать - - умный, следовать
    cu 粗 (cū) — грубый - - 促 (cù) — торопить грубый, торопить
    cui 催 (cuī) — торопить - - 脆 (cuì) — хрупкий торопить, хрупкий
    cun 村 (cūn) — деревня 存 (cún) — существовать - - деревня, существовать
    cuo 搓 (cuō) — тереть - - 错 (cuò) — ошибка тереть, ошибка
    da 大 (dà) — большой 答 (dá) — отвечать 打 (dǎ) — ударять 大 (dà) — большой большой, отвечать, ударять
    dai 呆 (dāi) — глупый 待 (dài) — ждать 代 (dài) — замещать 戴 (dài) — носить глупый, ждать, замещать, носить
    dan 单 (dān) — один 胆 (dǎn) — смелость 担 (dàn) — нести 淡 (dàn) — светлый один, смелость, нести, светлый
    dang 当 (dāng) — быть 党 (dǎng) — партия 挡 (dǎng) — преграждать 档 (dàng) — уровень быть, партия, преграждать, уровень
    dao 刀 (dāo) — нож 岛 (dǎo) — остров 倒 (dǎo) — падать 道 (dào) — путь нож, остров, падать, путь
    de 德 (dé) — добродетель 得 (děi) — должен 得 (dé) — получать 的 (de) — притяж. частица добродетель, должен, получать
    dei - 得 (děi) — должен - - должен
    deng 灯 (dēng) — лампа 等 (děng) — ждать 登 (dēng) — взбираться 等 (dèng) — равный лампа, ждать, взбираться, равный
    di 低 (dī) — низкий 敌 (dí) — враг 底 (dǐ) — основа 第 (dì) — первый низкий, враг, основа, первый
    diao 掉 (diào) — падать 钓 (diào) — рыбачить 吊 (diào) — висеть 调 (diào) — тон падать, рыбачить, висеть, тон
    die 跌 (diē) — падать 叠 (dié) — складывать - - падать, складывать
    ding 钉 (dīng) — гвоздь 订 (dìng) — заказывать 顶 (dǐng) — вершина 丁 (dīng) — человек гвоздь, заказывать, вершина, человек
    dong 冬 (dōng) — зима 动 (dòng) — двигаться 洞 (dòng) — пещера 东 (dōng) — восток зима, двигаться, пещера, восток
    du 毒 (dú) — яд 读 (dú) — читать 堵 (dǔ) — блокировать 渡 (dù) — переправляться яд, читать, блокировать, переправляться
    dui 堆 (duī) — куча 队 (duì) — команда 对 (duì) — правильно 兑 (duì) — обменивать куча, команда, правильно, обменивать
    dun 顿 (dùn) — пауза 盾 (dùn) — щит - - пауза, щит
    duo 多 (duō) — много 躲 (duǒ) — прятаться 夺 (duó) — захватывать 堕 (duò) — падать много, прятаться, захватывать, падать
    e 饿 (è) — голод 恶 (è) — зло 鹅 (é) — гусь 鳄 (è) — крокодил голод, зло, гусь, крокодил
    en 恩 (ēn) — благодарность - - - благодарность
    er 耳 (ěr) — ухо 儿 (ér) — ребенок 二 (èr) — два 耳 (ěr) — ухо ухо, ребенок, два
    fa 发 (fā) — отправлять 法 (fǎ) — закон 发 (fā) — развивать 罚 (fá) — штрафовать отправлять, закон, развивать, штрафовать
    fan 饭 (fàn) — еда 反 (fǎn) — против 凡 (fán) — обычный 翻 (fān) — переворачивать еда, против, обычный, переворачивать
    fang 放 (fàng) — отпускать 房 (fáng) — дом 防 (fáng) — защищать 方 (fāng) — квадрат отпускать, дом, защищать, квадрат
    fei 飞 (fēi) — летать 非 (fēi) — отрицание 肥 (féi) — жирный 费 (fèi) — расход летать, отрицание, жирный, расход
    fen 分 (fēn) — разделять 粉 (fěn) — порошок 愤 (fèn) — гнев 纷 (fēn) — смешивать разделять, порошок, гнев, смешивать
    feng 风 (fēng) — ветер 丰 (fēng) — богатый 凤 (fèng) — феникс 逢 (féng) — встречать ветер, богатый, феникс, встречать
    fo 佛 (fó) — Будда - - - Будда
    fou 否 (fǒu) — отрицание - - - отрицание
    fu 夫 (fū) — мужчина 福 (fú) — счастье 服 (fú) — одежда 复 (fù) — возвращаться мужчина, счастье, одежда, возвращаться
    gai 该 (gāi) — должен 改 (gǎi) — изменять 盖 (gài) — крыша 该 (gāi) — должен должен, изменять, крыша
    gan 干 (gān) — сухой 甘 (gān) — сладкий 感 (gǎn) — чувствовать 赶 (gǎn) — торопиться сухой, сладкий, чувствовать, торопиться
    gang 刚 (gāng) — только 港 (gǎng) — гавань - 钢 (gāng) — сталь только, гавань, сталь
    gao 高 (gāo) — высокий 告 (gào) — сообщать 搞 (gǎo) — заниматься 高 (gāo) — высокий высокий, сообщать, заниматься
    ge 哥 (gē) — брат 个 (gè) — единица 各 (gè) — каждый 歌 (gē) — песня брат, единица, каждый, песня
    gei 给 (gěi) — давать - - - давать
    gen 根 (gēn) — корень 跟 (gēn) — следовать - - корень, следовать
    geng 更 (gēng) — ещё 更 (gèng) — больше 耕 (gēng) — пахать - ещё, больше, пахать
    gong 工 (gōng) — работа 公 (gōng) — общественный 功 (gōng) — заслуга 供 (gòng) — предлагать работа, общественный, заслуга, предлагать
    gou 狗 (gǒu) — собака 够 (gòu) — достаточно - - собака, достаточно
    gu 古 (gǔ) — древний 鼓 (gǔ) — барабан 故 (gù) — причина 股 (gǔ) — бедро древний, барабан, причина, бедро
    gua 挂 (guà) — вешать 刮 (guā) — скрести - - вешать, скрести
    guai 怪 (guài) — странный 拐 (guǎi) — поворачивать - - странный, поворачивать
    guan 关 (guān) — закрывать 管 (guǎn) — управлять 观 (guān) — наблюдать 官 (guān) — чиновник закрывать, управлять, наблюдать
    guang 光 (guāng) — свет 广 (guǎng) — широкий - - свет, широкий
    gui 鬼 (guǐ) — призрак 贵 (guì) — дорогой 归 (guī) — возвращаться - призрак, дорогой, возвращаться
    guo 国 (guó) — страна 果 (guǒ) — фрукт 过 (guò) — проходить 锅 (guō) — кастрюля страна, фрукт, проходить, кастрюля
    ha 哈 (hā) — смеяться - - - смеяться
    hai 海 (hǎi) — море 害 (hài) — вред 还 (hái) — ещё - море, вред, ещё
    han 汉 (hàn) — китайский 寒 (hán) — холодный 汗 (hàn) — пот 喊 (hǎn) — кричать китайский, холодный, пот, кричать
    hang 行 (háng) — линия 航 (háng) — плавать - 杭 (háng) — Ханчжоу линия, плавать, Ханчжоу
    hao 好 (hǎo) — хороший 号 (hào) — номер - 耗 (hào) — тратить хороший, номер, тратить
    he 和 (hé) — и 河 (hé) — река 合 (hé) — соединять 喝 (hē) — пить и, река, соединять, пить
    hei 黑 (hēi) — чёрный - - - чёрный
    hen 很 (hěn) — очень 恨 (hèn) — ненавидеть - - очень, ненавидеть
    heng 横 (héng) — горизонтальный 恒 (héng) — постоянный - - горизонтальный, постоянный
    hong 红 (hóng) — красный 洪 (hóng) — наводнение - - красный, наводнение
    hou 后 (hòu) — после 猴 (hóu) — обезьяна 厚 (hòu) — толстый 喉 (hóu) — горло после, обезьяна, толстый, горло
    hu 胡 (hú) — чужеземец 虎 (hǔ) — тигр 互 (hù) — взаимный 户 (hù) — семья чужеземец, тигр, взаимный, семья
    hua 花 (huā) — цветок 画 (huà) — рисовать 划 (huà) — чертить 化 (huà) — изменяться цветок, рисовать, чертить, изменяться
    huai 坏 (huài) — плохой 怀 (huái) — держать - - плохой, держать
    huan 欢 (huān) — радость 环 (huán) — кольцо 换 (huàn) — менять 患 (huàn) — страдать радость, кольцо, менять, страдать
    huang 黄 (huáng) — жёлтый 皇 (huáng) — император 慌 (huāng) — паника 荒 (huāng) — дикий жёлтый, император, паника, дикий
    hui 回 (huí) — возвращаться 灰 (huī) — пепел 会 (huì) — встреча 汇 (huì) — объединять возвращаться, пепел, встреча, объединять
    hun 混 (hùn) — смешивать 魂 (hún) — душа 浑 (hún) — грязный 婚 (hūn) — брак смешивать, душа, грязный, брак
    huo 火 (huǒ) — огонь 货 (huò) — товар 或 (huò) — или 祸 (huò) — беда огонь, товар, или, беда
    ji 机 (jī) — машина 集 (jí) — собирать 几 (jǐ) — сколько 记 (jì) — помнить машина, собирать, сколько, помнить
    jia 家 (jiā) — семья 夹 (jiā) — зажимать 假 (jiǎ) — ложный 嫁 (jià) — выходить замуж семья, зажимать, ложный, выходить замуж
    jian 见 (jiàn) — видеть 间 (jiān) — между 减 (jiǎn) — уменьшать 剑 (jiàn) — меч видеть, между, уменьшать, меч
    jiang 将 (jiāng) — будущий 讲 (jiǎng) — говорить 降 (jiàng) — снижаться 江 (jiāng) — река будущий, говорить, снижаться, река
    jiao 教 (jiāo) — учить 脚 (jiǎo) — нога 角 (jiǎo) — угол 较 (jiào) — сравнивать учить, нога, угол, сравнивать
    jie 接 (jiē) — получать 结 (jié) — узел 解 (jiě) — решать 借 (jiè) — одалживать получать, узел, решать, одалживать
    jin 今 (jīn) — сегодня 紧 (jǐn) — тесный 进 (jìn) — входить 金 (jīn) — золото сегодня, тесный, входить, золото
    jing 京 (jīng) — столица 精 (jīng) — сущность 景 (jǐng) — вид 竞 (jìng) — соревноваться столица, сущность, вид, соревноваться
    jiu 九 (jiǔ) — девять 酒 (jiǔ) — алкоголь 久 (jiǔ) — долго 救 (jiù) — спасать девять, алкоголь, долго, спасать
    ju 局 (jú) — бюро 举 (jǔ) — поднимать 巨 (jù) — огромный 句 (jù) — предложение бюро, поднимать, огромный, предложение
    juan 卷 (juǎn) — свиток 捐 (juān) — жертвовать 卷 (juàn) — экзамен 圈 (juān) — круг свиток, жертвовать, экзамен, круг
    jue 觉 (jué) — чувствовать 决 (jué) — решать 绝 (jué) — прерывать 掘 (jué) — копать чувствовать, решать, прерывать, копать
    jun 军 (jūn) — армия 俊 (jùn) — красивый 均 (jūn) — равный 君 (jūn) — правитель армия, красивый, равный, правитель
    ka 咖 (kā) — кофе 卡 (kǎ) — карта - - кофе, карта
    kai 开 (kāi) — открывать 凯 (kǎi) — триумф - - открывать, триумф
    kan 看 (kàn) — смотреть 砍 (kǎn) — рубить - - смотреть, рубить
    kang 康 (kāng) — здоровье 抗 (kàng) — сопротивляться - - здоровье, сопротивляться
    kao 考 (kǎo) — экзамен 烤 (kǎo) — жарить - - экзамен, жарить
    ke 科 (kē) — наука 可 (kě) — можно 渴 (kě) — жаждать 客 (kè) — гость наука, можно, жаждать, гость
    ken 肯 (kěn) — соглашаться 恳 (kěn) — искренний - - соглашаться, искренний
    keng 坑 (kēng) — яма - - - яма
    kong 空 (kōng) — пустота 控 (kòng) — контролировать - - пустота, контролировать
    kou 口 (kǒu) — рот 扣 (kòu) —扣 - - рот,扣
    ku 哭 (kū) — плакать 苦 (kǔ) — горький 库 (kù) — склад - плакать, горький, склад
    kua 跨 (kuà) — пересекать 夸 (kuā) — хвалить - - пересекать, хвалить
    kuai 快 (kuài) — быстрый 块 (kuài) — кусок - - быстрый, кусок
    kuan 宽 (kuān) — широкий - - - широкий
    kuang 狂 (kuáng) — бешеный 框 (kuàng) — рамка - - бешеный, рамка
    kui 亏 (kuī) — терпеть убытки 奎 (kuí) — звёздное созвездие - - терпеть убытки, звёздное созвездие
    kun 困 (kùn) — сонный 捆 (kǔn) — связывать - - сонный, связывать
    kuo 扩 (kuò) — расширять - - - расширять
    la 拉 (lā) — тянуть 辣 (là) — острый - - тянуть, острый
    lai 来 (lái) — приходить - - - приходить
    lan 蓝 (lán) — синий 烂 (làn) — гнилой - - синий, гнилой
    lang 浪 (làng) — волна - - - волна
    lao 老 (lǎo) — старый 牢 (láo) — тюрьма - - старый, тюрьма
    le 乐 (lè) — радость 乐 (lè) — музыка - - радость, музыка
    lei 雷 (léi) — гром 泪 (lèi) — слеза 累 (lèi) — усталость - гром, слеза, усталость
    leng 冷 (lěng) — холодный - - - холодный
    li 力 (lì) — сила 里 (lǐ) — внутри 离 (lí) — уходить - сила, внутри, уходить
    lian 连 (lián) — соединять 脸 (liǎn) — лицо 联 (lián) — объединять - соединять, лицо, объединять
    liang 亮 (liàng) — светлый 两 (liǎng) — два 良 (liáng) — хороший - светлый, два, хороший
    liao 聊 (liáo) — беседовать 料 (liào) — материал 疗 (liáo) — лечить - беседовать, материал, лечить
    lie 烈 (liè) — жаркий - - - жаркий
    lin 林 (lín) — лес - - - лес
    ling 令 (lìng) — приказ 灵 (líng) — дух 领 (lǐng) — вести - приказ, дух, вести
    liu 六 (liù) — шесть 留 (liú) — оставлять 流 (liú) — течь - шесть, оставлять, течь
    long 龙 (lóng) — дракон - - - дракон
    lou 楼 (lóu) — здание 漏 (lòu) — утекать - - здание, утекать
    lu 路 (lù) — дорога 露 (lù) — показывать 录 (lù) — записывать - дорога, показывать, записывать
    lv 绿 (lǜ) — зелёный 律 (lǜ) — закон - - зелёный, закон
    ma 妈 (mā) — мама 马 (mǎ) — лошадь 骂 (mà) — ругать - мама, лошадь, ругать
    mai 买 (mǎi) — покупать 卖 (mài) — продавать - - покупать, продавать
    man 慢 (màn) — медленный 满 (mǎn) — полный - - медленный, полный
    mang 忙 (máng) — занятой - - - занятой
    mao 猫 (māo) — кошка 毛 (máo) — шерсть - - кошка, шерсть
    me 什么 (shénme) — что - - - что
    mei 没 (méi) — нет 美 (měi) — красивый - - нет, красивый
    men 门 (mén) — дверь 闷 (mēn) — душный - - дверь, душный
    meng 梦 (mèng) — сон 猛 (měng) — свирепый 盟 (méng) — союз - сон, свирепый, союз
    mi 米 (mǐ) — рис 迷 (mí) — теряться 密 (mì) — плотный - рис, теряться, плотный
    mian 面 (miàn) — лицо 棉 (mián) — хлопок - - лицо, хлопок
    miao 秒 (miǎo) — секунда 妙 (miào) — замечательный - - секунда, замечательный
    mie 灭 (miè) — уничтожать - - - уничтожать
    min 民 (mín) — народ - - - народ
    ming 明 (míng) — светлый 名 (míng) — имя 命 (mìng) — судьба - светлый, имя, судьба
    mo 莫 (mò) — не надо 模 (mó) — модель - - не надо, модель
    mou 某 (mǒu) — кто-то - - - кто-то
    mu 母 (mǔ) — мать 木 (mù) — дерево - - мать, дерево
    na 拿 (ná) — брать 哪 (nǎ) — который - - брать, который
    nai 奶 (nǎi) — молоко 耐 (nài) — терпеть - - молоко, терпеть
    nan 男 (nán) — мужчина 难 (nán) — трудный - - мужчина, трудный
    nang 囊 (náng) — мешок - - - мешок
    nao 脑 (nǎo) — мозг 闹 (nào) — шуметь - - мозг, шуметь
    ne 呢 (ne) — частица - - - частица
    nei 内 (nèi) — внутри - - - внутри
    neng 能 (néng) — мочь - - - мочь
    ni 你 (nǐ) — ты 尼 (ní) — монахиня - - ты, монахиня
    nian 年 (nián) — год 念 (niàn) — помнить - - год, помнить
    niang 娘 (niáng) — мать - - - мать
    niao 鸟 (niǎo) — птица - - - птица
    nie 捏 (niē) — щипать - - - щипать
    nin 您 (nín) — вы - - - вы
    ning 宁 (níng) — мир 凝 (níng) — замораживаться - - мир, замораживаться
    niu 牛 (niú) — корова - - - корова
    nong 弄 (nòng) — делать 浓 (nóng) — густой - - делать, густой
    nu 怒 (nù) — гнев 努 (nǔ) — стараться - - гнев, стараться
    nv 女 (nǚ) — женщина - - - женщина
    nuo 挪 (nuó) — перемещать - - - перемещать
    o 哦 (ò) — о! - - - о!
    ou 偶 (ǒu) — случайно 欧 (ōu) — Европа - - случайно, Европа
    pa 怕 (pà) — бояться 啪 (pā) — звук хлопка - - бояться, звук хлопка
    pai 拍 (pāi) — ударять 排 (pái) — упорядочивать - - ударять, упорядочивать
    pan 盘 (pán) — тарелка 判 (pàn) — судить - - тарелка, судить
    pang 旁 (páng) — рядом 胖 (pàng) — толстый - - рядом, толстый
    pao 跑 (pǎo) — бегать 泡 (pào) — пузырь 炮 (pào) — пушка - бегать, пузырь, пушка
    pei 配 (pèi) — соответствовать 赔 (péi) — компенсировать 培 (péi) — выращивать - соответствовать, компенсировать, выращивать
    pen 喷 (pēn) — брызгать - - - брызгать
    peng 朋 (péng) — друг 碰 (pèng) — сталкиваться 蓬 (péng) — пышный - друг, сталкиваться, пышный
    pi 皮 (pí) — кожа 啤 (pí) — пиво 疲 (pí) — усталый 批 (pī) — критиковать кожа, пиво, усталый, критиковать
    pian 片 (piàn) — кусок 偏 (piān) — склоняться 骗 (piàn) — обманывать - кусок, склоняться, обманывать
    piao 票 (piào) — билет 漂 (piāo) — плавать 漂 (piǎo) — бледный - билет, плавать, бледный
    pie 撇 (piě) — отбрасывать - - - отбрасывать
    pin 品 (pǐn) — продукт 拼 (pīn) — складывать - - продукт, складывать
    ping 平 (píng) — ровный 评 (píng) — оценивать 凭 (píng) — опираться - ровный, оценивать, опираться
    po 破 (pò) — разрушать 泼 (pō) — выплескивать 婆 (pó) — старуха - разрушать, выплескивать, старуха
    pou - - - 剖 (pōu) — вскрывать вскрывать
    pu 普 (pǔ) — общий 铺 (pù) — постель 葡 (pú) — виноград - общий, постель, виноград
    qi 七 (qī) — семь 其 (qí) — его 起 (qǐ) — вставать 气 (qì) — воздух семь, его, вставать, воздух
    qia 恰 (qià) — как раз - 掐 (qiā) — сжимать - как раз, сжимать
    qian 千 (qiān) — тысяча 前 (qián) — перед 钱 (qián) — деньги 欠 (qiàn) — задолжать тысяча, перед, деньги, задолжать
    qiang 枪 (qiāng) — пистолет 墙 (qiáng) — стена 强 (qiáng) — сильный - пистолет, стена, сильный
    qiao 桥 (qiáo) — мост 巧 (qiǎo) — хитрый - 敲 (qiāo) — стучать мост, хитрый, стучать
    qie 切 (qiē) — резать 且 (qiě) — и - - резать, и
    qin 亲 (qīn) — родитель 勤 (qín) — усердный 琴 (qín) — музыкальный инструмент - родитель, усердный, музыкальный инструмент
    qing 青 (qīng) — синий 情 (qíng) — чувство 清 (qīng) — чистый 请 (qǐng) — просить синий, чувство, чистый, просить
    qiong 穷 (qióng) — бедный - - - бедный
    qiu 秋 (qiū) — осень 求 (qiú) — просить 球 (qiú) — мяч - осень, просить, мяч
    qu 去 (qù) — уходить 曲 (qǔ) — музыка 区 (qū) — район - уходить, музыка, район
    quan 全 (quán) — полный 拳 (quán) — кулак - - полный, кулак
    que 缺 (quē) — не хватать 却 (què) — однако - - не хватать, однако
    qun 群 (qún) — группа - - - группа
    ran 然 (rán) — так - - - так
    rang 让 (ràng) — позволять 嚷 (rǎng) — кричать - - позволять, кричать
    rao 绕 (rào) — окружать 扰 (rǎo) — тревожить - - окружать, тревожить
    re 热 (rè) — горячий - - - горячий
    ren 人 (rén) — человек 任 (rèn) — назначать 忍 (rěn) — терпеть - человек, назначать, терпеть
    reng 扔 (rēng) — бросать - - - бросать
    ri 日 (rì) — солнце - - - солнце
    rong 容 (róng) — позволять 荣 (róng) — слава 融 (róng) — плавиться - позволять, слава, плавиться
    rou 肉 (ròu) — мясо 柔 (róu) — мягкий - - мясо, мягкий
    ru 如 (rú) — как 入 (rù) — входить - - как, входить
    rui 瑞 (ruì) — благоприятный знак 锐 (ruì) — острый - - благоприятный знак, острый
    run 润 (rùn) — увлажнять - - - увлажнять
    ruo 弱 (ruò) — слабый 若 (ruò) — если - - слабый, если
    sa 撒 (sā) — рассеивать - 洒 (sǎ) — поливать - рассеивать, поливать
    sai 赛 (sài) — состязание - - - состязание
    san 三 (sān) — три 伞 (sǎn) — зонт - 散 (sàn) — рассеивать три, зонт, рассеивать
    sang 丧 (sāng) — траур 嗓 (sǎng) — горло - - траур, горло
    sao 扫 (sǎo) — подметать 嫂 (sǎo) — невестка - - подметать, невестка
    se 色 (sè) — цвет - - - цвет
    sen 森 (sēn) — лес - - - лес
    seng 僧 (sēng) — монах - - - монах
    sha 沙 (shā) — песок 傻 (shǎ) — глупый 杀 (shā) — убивать - песок, глупый, убивать
    shai 晒 (shài) — сушить 筛 (shāi) — просеивать - - сушить, просеивать
    shan 山 (shān) — гора 闪 (shǎn) — сверкать 善 (shàn) — добрый - гора, сверкать, добрый
    shang 上 (shàng) — наверх 商 (shāng) — бизнес 伤 (shāng) — рана - наверх, бизнес, рана
    shao 少 (shǎo) — мало 烧 (shāo) — гореть 稍 (shāo) — слегка - мало, гореть, слегка
    she 社 (shè) — общество 设 (shè) — устанавливать 舍 (shě) — отказываться 射 (shè) — стрелять общество, устанавливать, отказываться, стрелять
    shen 身 (shēn) — тело 深 (shēn) — глубокий 神 (shén) — бог - тело, глубокий, бог
    sheng 生 (shēng) — рождаться 声 (shēng) — звук 省 (shěng) — экономить 胜 (shèng) — победа рождаться, звук, экономить, победа
    shi 是 (shì) — быть 十 (shí) — десять 使 (shǐ) — использовать 事 (shì) — дело быть, десять, использовать, дело
    shou 手 (shǒu) — рука 受 (shòu) — получать 瘦 (shòu) — худой - рука, получать, худой
    shu 书 (shū) — книга 输 (shū) — проигрывать 树 (shù) — дерево 属 (shǔ) — принадлежать книга, проигрывать, дерево, принадлежать
    shua 刷 (shuā) — чистить - - - чистить
    shuai 帅 (shuài) — красивый 摔 (shuāi) — падать - - красивый, падать
    shuan 拴 (shuān) — привязывать - - - привязывать
    shuang 双 (shuāng) — пара 霜 (shuāng) — иней - - пара, иней
    shui 水 (shuǐ) — вода 睡 (shuì) — спать - - вода, спать
    shun 顺 (shùn) — следовать - - - следовать
    shuo 说 (shuō) — говорить - - - говорить
    si 四 (sì) — четыре 死 (sǐ) — смерть 思 (sī) — думать - четыре, смерть, думать
    song 送 (sòng) — отправлять 松 (sōng) — рыхлый - - отправлять, рыхлый
    sou 搜 (sōu) — искать - - - искать
    su 速 (sù) — быстрый 素 (sù) — простой 苏 (sū) — пробуждаться - быстрый, простой, пробуждаться
    suan 算 (suàn) — считать 酸 (suān) — кислый - - считать, кислый
    sui 岁 (suì) — год 随 (suí) — следовать 碎 (suì) — ломаться - год, следовать, ломаться
    sun 孙 (sūn) — внук 损 (sǔn) — наносить ущерб - - внук, наносить ущерб
    suo 所 (suǒ) — место 锁 (suǒ) — замок 缩 (suō) — сокращать - место, замок, сокращать
    ta 他 (tā) — он 塔 (tǎ) — башня 踏 (tà) — наступать - он, башня, наступать
    tai 太 (tài) — слишком 台 (tái) — платформа 抬 (tái) — поднимать 态 (tài) — состояние слишком, платформа, поднимать, состояние
    tan 谈 (tán) — беседовать 坦 (tǎn) — откровенный 探 (tàn) — исследовать - беседовать, откровенный, исследовать
    tang 汤 (tāng) — суп 糖 (táng) — сахар 躺 (tǎng) — лежать 趟 (tàng) — путешествие суп, сахар, лежать, путешествие
    tao 逃 (táo) — убегать 桃 (táo) — персик 套 (tào) — комплект - убегать, персик, комплект
    te 特 (tè) — особенный - - - особенный
    teng 疼 (téng) — боль - - - боль
    ti 体 (tǐ) — тело 提 (tí) — поднимать 替 (tì) — заменять - тело, поднимать, заменять
    tian 天 (tiān) — небо 田 (tián) — поле 填 (tián) — заполнять - небо, поле, заполнять
    tiao 条 (tiáo) — полоска 跳 (tiào) — прыгать 调 (tiáo) — регулировать - полоска, прыгать, регулировать
    tie 铁 (tiě) — железо - 贴 (tiē) — приклеивать - железо, приклеивать
    ting 听 (tīng) — слушать 庭 (tíng) — двор 停 (tíng) — останавливать - слушать, двор, останавливать
    tong 通 (tōng) — проходить 同 (tóng) — одинаковый 痛 (tòng) — боль - проходить, одинаковый, боль
    tou 头 (tóu) — голова 投 (tóu) — бросать 偷 (tōu) — красть - голова, бросать, красть
    tu 图 (tú) — картина 土 (tǔ) — земля 兔 (tù) — заяц - картина, земля, заяц
    tuan 团 (tuán) — группа - - - группа
    tui 推 (tuī) — толкать 退 (tuì) — отступать 腿 (tuǐ) — нога - толкать, отступать, нога
    tun 吞 (tūn) — глотать 囤 (tún) — накапливать - - глотать, накапливать
    tuo 拖 (tuō) — тянуть 脱 (tuō) — снимать 托 (tuō) — поддерживать - тянуть, снимать, поддерживать
    wa 瓦 (wǎ) — черепица 挖 (wā) — копать 哇 (wā) — междометие - черепица, копать, междометие
    wai 外 (wài) — внешний 歪 (wāi) — кривой - - внешний, кривой
    wan 完 (wán) — закончить 玩 (wán) — играть 晚 (wǎn) — поздний 万 (wàn) — десять тысяч закончить, играть, поздний, десять тысяч
    wang 王 (wáng) — король 网 (wǎng) — сеть 忘 (wàng) — забывать - король, сеть, забывать
    wei 位 (wèi) — позиция 为 (wèi) — для 未 (wèi) — ещё не 危 (wēi) — опасный позиция, для, ещё не, опасный
    wen 问 (wèn) — спрашивать 温 (wēn) — тёплый 文 (wén) — культура - спрашивать, тёплый, культура
    weng 翁 (wēng) — старик - - - старик
    wo 我 (wǒ) — я 握 (wò) — держать 窝 (wō) — гнездо - я, держать, гнездо
    wu 无 (wú) — нет 五 (wǔ) — пять 误 (wù) — ошибка 舞 (wǔ) — танец нет, пять, ошибка, танец
    xi 西 (xī) — запад 喜 (xǐ) — радость 吸 (xī) — вдыхать 系 (xì) — связь запад, радость, вдыхать, связь
    xia 下 (xià) — вниз 夏 (xià) — лето 吓 (xià) — пугать 霞 (xiá) — закат вниз, лето, пугать, закат
    xian 先 (xiān) — первый 显 (xiǎn) — проявлять 险 (xiǎn) — опасный 现 (xiàn) — настоящий первый, проявлять, опасный, настоящий
    xiang 想 (xiǎng) — думать 相 (xiāng) — взаимный 乡 (xiāng) — деревня 像 (xiàng) — похожий думать, взаимный, деревня, похожий
    xiao 小 (xiǎo) — маленький 笑 (xiào) — смеяться 消 (xiāo) — исчезать 校 (xiào) — школа маленький, смеяться, исчезать, школа
    xie 写 (xiě) — писать 谢 (xiè) — благодарить 鞋 (xié) — обувь 血 (xiě) — кровь писать, благодарить, обувь, кровь
    xin 新 (xīn) — новый 心 (xīn) — сердце 信 (xìn) — доверие - новый, сердце, доверие
    xing 星 (xīng) — звезда 兴 (xìng) — интерес 形 (xíng) — форма 行 (xíng) — идти звезда, интерес, форма, идти
    xiong 熊 (xióng) — медведь 兄 (xiōng) — брат 凶 (xiōng) — жестокий - медведь, брат, жестокий
    xiu 修 (xiū) — чинить 休 (xiū) — отдыхать 秀 (xiù) — прекрасный - чинить, отдыхать, прекрасный
    xu 许 (xǔ) — разрешать 虚 (xū) — пустой 需 (xū) — нуждаться 序 (xù) — порядок разрешать, пустой, нуждаться, порядок
    xuan 选 (xuǎn) — выбирать 宣 (xuān) — объявлять 旋 (xuán) — вращаться - выбирать, объявлять, вращаться
    xue 雪 (xuě) — снег 学 (xué) — учить 血 (xiě) — кровь - снег, учить, кровь
    xun 迅 (xùn) — быстрый 训 (xùn) — обучение 巡 (xún) — патрулировать 寻 (xún) — искать быстрый, обучение, патрулировать, искать
    ya 压 (yā) — давить 呀 (yā) — о! 哑 (yǎ) — немой - давить, о!, немой
    yan 烟 (yān) — дым 眼 (yǎn) — глаз 言 (yán) — говорить 研 (yán) — исследовать дым, глаз, говорить, исследовать
    yang 阳 (yáng) — солнце 羊 (yáng) — овца 养 (yǎng) — растить 样 (yàng) — вид солнце, овца, растить, вид
    yao 要 (yào) — хотеть 药 (yào) — лекарство 腰 (yāo) — поясница 咬 (yǎo) — кусать хотеть, лекарство, поясница, кусать
    ye 叶 (yè) — лист 夜 (yè) — ночь 也 (yě) — тоже - лист, ночь, тоже
    yi 一 (yī) — один 以 (yǐ) — с помощью 已 (yǐ) — уже 意 (yì) — мысль один, с помощью, уже, мысль
    yin 阴 (yīn) — тёмный 银 (yín) — серебро 引 (yǐn) — вести 音 (yīn) — звук тёмный, серебро, вести, звук
    ying 应 (yīng) — отвечать 英 (yīng) — героический 影 (yǐng) — тень 硬 (yìng) — твёрдый отвечать, героический, тень, твёрдый
    yo 哟 (yō) — ой! - - - ой!
    yong 用 (yòng) — использовать 永 (yǒng) — вечный 勇 (yǒng) — храбрый - использовать, вечный, храбрый
    you 有 (yǒu) — иметь 友 (yǒu) — друг 右 (yòu) — право 游 (yóu) — плавать иметь, друг, право, плавать
    yu 雨 (yǔ) — дождь 余 (yú) — лишний 语 (yǔ) — язык 育 (yù) — растить дождь, лишний, язык, растить
    yuan 元 (yuán) — юань 圆 (yuán) — круглый 原 (yuán) — источник 愿 (yuàn) — желание юань, круглый, источник, желание
    yue 月 (yuè) — луна 约 (yuē) — назначать 越 (yuè) — пересекать 阅 (yuè) — читать луна, назначать, пересекать, читать
    yun 云 (yún) — облако 运 (yùn) — перевозить 韵 (yùn) — рифма - облако, перевозить, рифма
    za 杂 (zá) — смешанный - 砸 (zá) — разбивать - смешанный, разбивать
    zai 在 (zài) — находиться 再 (zài) — снова - - находиться, снова
    zan 赞 (zàn) — хвалить - - - хвалить
    zang 脏 (zāng) — грязный 葬 (zàng) — хоронить - - грязный, хоронить
    zao 早 (zǎo) — ранний 糟 (zāo) — ужасный 造 (zào) — строить - ранний, ужасный, строить
    ze 则 (zé) — правило 责 (zé) — ответственность - - правило, ответственность
    zei 贼 (zéi) — вор - - - вор
    zen 怎 (zěn) — как - - - как
    zeng 增 (zēng) — увеличивать 赠 (zèng) — дарить - - увеличивать, дарить
    zha 扎 (zhā) — колоть 闸 (zhá) — шлюз 炸 (zhà) — взрывать - колоть, шлюз, взрывать
    zhai 摘 (zhāi) — срывать 宅 (zhái) — жилище - - срывать, жилище
    zhan 站 (zhàn) — стоять 展 (zhǎn) — разворачивать 占 (zhàn) — занимать 战 (zhàn) — сражаться стоять, разворачивать, занимать, сражаться
    zhang 长 (zhǎng) — расти 张 (zhāng) — открывать 章 (zhāng) — глава - расти, открывать, глава
    zhao 找 (zhǎo) — искать 照 (zhào) — светить 召 (zhào) — созывать - искать, светить, созывать
    zhe 这 (zhè) — этот 折 (zhé) — складывать 哲 (zhé) — мудрость - этот, складывать, мудрость
    zhen 真 (zhēn) — правда 震 (zhèn) — трясти 镇 (zhèn) — посёлок - правда, трясти, посёлок
    zheng 正 (zhèng) — правильный 证 (zhèng) — доказывать 整 (zhěng) — целый - правильный, доказывать, целый
    zhi 知 (zhī) — знать 直 (zhí) — прямой 指 (zhǐ) — указывать 制 (zhì) — производить знать, прямой, указывать, производить
    zhong 中 (zhōng) — центр 种 (zhǒng) — семя 重 (zhòng) — тяжёлый - центр, семя, тяжёлый
    zhou 周 (zhōu) — неделя 州 (zhōu) — область 粥 (zhōu) — каша - неделя, область, каша
    zhu 住 (zhù) — жить 猪 (zhū) — свинья 竹 (zhú) — бамбук - жить, свинья, бамбук
    zhua 抓 (zhuā) — хватать - - - хватать
    zhuai 拽 (zhuāi) — тянуть - - - тянуть
    zhuan 转 (zhuǎn) — вращаться 赚 (zhuàn) — зарабатывать - - вращаться, зарабатывать
    zhuang 装 (zhuāng) — наряжаться 庄 (zhuāng) — деревня 撞 (zhuàng) — сталкиваться - наряжаться, деревня, сталкиваться
    zhui 追 (zhuī) — преследовать 坠 (zhuì) — падать - - преследовать, падать
    zhun 准 (zhǔn) — стандарт - - - стандарт
    zhuo 捉 (zhuō) — хватать 桌 (zhuō) — стол 卓 (zhuó) — выдающийся - хватать, стол, выдающийся
    zi 字 (zì) — иероглиф 子 (zǐ) — ребёнок 自 (zì) — сам - иероглиф, ребёнок, сам
    zong 总 (zǒng) — главный 纵 (zòng) — отпускать 宗 (zōng) — клан - главный, отпускать, клан
    zou 走 (zǒu) — идти - - - идти
    zu 组 (zǔ) — группа 足 (zú) — стопа 租 (zū) — арендовать - группа, стопа, арендовать
    zuan 钻 (zuān) — сверлить - - - сверлить
    zui 最 (zuì) — самый 嘴 (zuǐ) — рот 罪 (zuì) — преступление - самый, рот, преступление
    zun 尊 (zūn) — уважать - - - уважать
    zuo 做 (zuò) — делать 坐 (zuò) — сидеть 左 (zuǒ) — левый - делать, сидеть, левый

  • Важность правильного произношения в китайском языке

    Важность правильного произношения в китайском языке

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

    1. Важность правильного произношения

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

    • (mā) — мама (1-й тон),
    • (má) — конопля (2-й тон),
    • (mǎ) — лошадь (3-й тон),
    • (mà) — ругать (4-й тон).

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

    2. Произношение и региональные диалекты

    Хотя стандартным вариантом произношения в современном Китае является путунхуа (стандартный китайский или мандаринский), существует огромное разнообразие региональных диалектов, каждый из которых имеет свою уникальную систему произношения и акцентную структуру. Например:

    • В северных регионах Китая (включая Пекин) произношение часто характеризуется «р-ротацией» — добавлением звука «-р» к окончаниям слов.
    • В южных регионах, таких как Гуандун или Фуцзянь, произношение отличается сильным акцентом и интонациями, характерными для кантонского и других местных языков.

    Местные диалекты часто используют другие звуки и тоны, поэтому произношение одного и того же слова может значительно отличаться от путунхуа. В то же время, знание местных диалектов и умение адаптировать произношение к разным регионам является важным культурным навыком в Китае.

    3. Эстетика звучания

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

    • Пекинская опера (京剧, Jīngjù), где артисты исполняют сложные арии и речитативы, используя специфическую манеру произношения для передачи эмоций и сюжетных линий.
    • Каллиграфия (书法, shūfǎ) и поэзия, где акцент ставится на гармонии звуков и смыслов, которые должны резонировать с ритмом стиха.

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

    4. Учёба и образовательная культура

    Образование всегда играло ключевую роль в китайской культуре, и правильное произношение считается частью образованности человека. В традиционном китайском обществе конфуцианские учения подчёркивали важность риторики и красноречия. Грамотное, чёткое и выразительное произношение считалось важным навыком для учёных и государственных чиновников.

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

    5. Традиции уважительного общения

    В китайской культуре уважение к собеседнику проявляется в том, как человек говорит. Это касается не только выбора слов, но и правильного произношения. Произносить слова правильно — значит уделять внимание своей речи, что воспринимается как знак уважения и заботы о собеседнике. Неправильное или небрежное произношение может быть воспринято как невнимательность или даже неуважение.

    6. Мистический аспект произношения

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

    7. Трудности для иностранцев и обучение

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

    Заключение:

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


  • Основные факты о связи между тонами в китайском языке

    Основные факты о связи между тонами в китайском языке

    1. Происхождение тонов:

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

    2. Четыре тона и их историческое развитие:

    В современном путунхуа (мандаринский диалект) четыре тона — это результат изменений, связанных с утратой конечных согласных и различными звуками на конце слова. Например:

    • 1-й тон (высокий и ровный) часто произошёл от слогов, у которых в древнекитайском была гладкая финаль (без глухих конечных согласных, как -p, -t, -k).
    • 2-й тон (восходящий) связан с изменениями в произношении некоторых финалей и начальных согласных. Исторически он произошёл из слогов с конечными носовыми согласными, как -m, -n, -ng.
    • 3-й тон (низкий, падающий и поднимающийся) связан с древними слогами, которые заканчивались на глухие конечные согласные, такие как -k, -p, -t. Эти звуки исчезли, но изменили интонацию слога, что привело к возникновению нисходящих тонов.
    • 4-й тон (падающий) также произошёл из слогов, которые заканчивались на звонкие согласные, или из-за глухих конечных согласных, которые влияли на интонацию слова.

    3. Связь между тонами:

    Тоны могут быть связаны этимологически на уровне определённых слогов, где переход от одного тона к другому может быть вызван изменением финальной части слова (заключительного звука). Например, некоторые слоги, которые исторически имели конечные согласные, могли развить разные тоны в зависимости от того, каким был этот звук. В результате, современное слово с разными тонами может происходить от одной и той же древней формы.

    4. Тоновая система в древнекитайском:

    В древнекитайском языке не было тонов в том виде, как мы их знаем в современном китайском языке. Однако позднее, в период среднекитайского языка, тоны начали формироваться на основе изменений в финалях и начальных согласных. Это значит, что многие односложные слова, которые сейчас имеют разные тона, могли иметь одну и ту же основу в древнем языке.

    Примеры:

    • () (папа) и () (вытаскивать) — оба слова произошли от одного и того же корня в древнекитайском, но различие в тонах возникло из-за изменений в конечных согласных, которые повлияли на интонацию.

    • () (бить) и () (большой) — их связь можно проследить через тоновые изменения. Оба слова когда-то могли произноситься с одинаковыми конечными согласными, которые позже изменили тон.

    Заключение:

    Да, между тонами существует этимологическая связь, особенно если рассматривать их с точки зрения исторической фонологии. Различия в тонах часто возникали из-за изменений в финалях и начальных согласных в древнекитайском языке. Тоны в современном китайском — это результат длительного эволюционного процесса, когда конечные звуки исчезали или менялись, что влияло на интонацию и приводило к появлению различных тонов.


  • Подключаем сенсорную I2C 4*4 клавиатуру к esphome

    Как подключить сенсорную i2c 4*4 клавиатуру к esphome

    Основной компонент - Erriez TTP229

    Важно! По умолчанию ttp229_lsf пытается подключится по адресу 0x57, но у нас оказался 0x65

    [I][i2c.arduino:096]: Results from i2c bus scan:
    [I][i2c.arduino:102]: Found i2c device at address 0x65
    [C][ttp229_lsf:019]: ttp229: 
    [C][ttp229_lsf:020]:     Address: 0x57 
    [E][ttp229_lsf:023]: Communication with TTP229 failed! 
    [E][component:082]:     Component ttp229_lsf is marked FAILED
    

    Устанавливаем принудительно адрес 0x65

    i2c:
      - scan: true
    ttp229_lsf:
      - address: 0x65
    
    binary_sensor:
      - platform: ttp229_lsf
        name: Button_0
        channel: 0
    

    Номера каналов на клавиатуре

    Col1 Col2 Col3 Col4
    7 3 15 11
    6 2 14 10
    5 1 13 9
    4 0 12 8

    Купить можно на Aliexpress Matrix keyboard module V3.0 ~250 руб.

    Matrix keyboard module V3.0


  • Правильно покупаем картинки с shutterstock

    Правильно покупаем картинки с shutterstock / Adobe Stock (Fotolia) / DepositPhotos / iStockphoto

    1. Пишем на почту [email protected] или в ВК sis_supp с пометкой регистрация
    2. Заходим с полученными реквизитами на simpleimage.services Минималистичный интерфейс Фото, векторы, видео, аудио, всё по очень демократичным ценам.

  • Подвержен ли Bitrixenv CVE-2024-6387?

    Подвержен ли Bitrixenv CVE-2024-6387 ?

    1. Выясняем какая версия ssh установлена
      [root@bitrix ~]# ssh -V
      OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017
      
    2. На данный момент времени актуальный bitrixenv работает на centos7.9, а там максимальная версия OpenSSH = OpenSSH_7.4p1, как говорится, пронесло.

    Если у вас другая ОС - сверяемся с версиями OpenSSH

    • OpenSSH ниже 4.4p1 уязвим, если не был установлен патч против CVE-2006-5051 или если не был установлен патч против CVE-2008-4109, который оказался некорректным исправлением для CVE-2006-5051;

    • OpenSSH от 4.4p1 до 8.5p1 не уязвимы потому что “#ifdef DO_LOG_SAFE_IN_SIGHAND”, добавленный в функцию sigdie() патчем для CVE-2006-5051, превратил эту небезопасную функцию в безопасный вызов _exit(1));

    • OpenSSH от 8.5p1 до 9.8p1 снова уязвимы (потому что “#ifdef DO_LOG_SAFE_IN_SIGHAND” был случайно удален из функции sigdie()).

    p.s. В любом случае лишний повод обновиться.

    p.p.s. PoC можно найти тут


  • Регистриуем аккаунт на Amazon AWS

    Регистриуем аккаунт на Amazon AWS и создаём бесплатный vps на 1 год

    1. Первым делом находим сервис для приёма смс - @Sms_activ_2bot, (можно пополнить баланс через СБП), вводим название сервиса amazon, регион USA (~8 рублей за приём смс)
    2. Потом находим предоплаченную виртуальную карту на 2$ (можно на plati.market) или @WantToPayBot
    3. Регистриуемся на aws.amazon.com
    4. Ждём некоторое время пока завершится модерация
    5. Теперь создаём инстанс EC2 с образом Ubuntu в регионе us-east с обязательной пометкой Free Tier
    6. Открываем в Security group входящие порты для инстанса
      • Inbound rules->Edit inbound rules->Add rule
      • Type: All traffic
      • Source: 0.0.0.0/0
    7. Внимание! После перезагрузки инстанса будет присвоен новый IP адрес!
      1. Получаем бесплатный поддомен на freedns.afraid.org
      2. Устанавливаем dyndns-client клиент sudo apt install ddclient
      3. Вводим после установки, в консольном ui ddclient, логин/api ключ от freedns.afraid.org и домен который там получили.
      4. Проверяем настройки ddclient sudo nano /etc/ddclient.conf
      5. Перезагружаем инстанс, убеждаем что новый ip привязался к поддомену.

    p.s. Лимит трафика на месяц - 100 Gb, если больше - будут списания с привязанной карты.


  • Быстро сериализуем объект в json строку в IDEA

    Быстро сериализуем объект в json строку в IDEA

    Добавляем шаблон для быстрой генерации json из idea->toString без null значений Заходим в раздел toString() Generation Settings

    Alt+Ins->toString()->Settings->Templates toString() Generation Settings

    public java.lang.String toString() {
    StringJoiner s = new java.util.StringJoiner(",", "{", "}");
    #foreach ($member in $members)##
        #if(!$member.modifierStatic)##
    if ($member.name!=null) {##
    s.add("\"$member.name\":\""+##
            #if ($member.primitiveArray || $member.objectArray)##
    java.util.Arrays.toString($member.name)##
            #elseif ($member.string)##
                $member.accessor ##
            #else
                $member.accessor ##
            #end##
    +"\"");
    }
        #end
    #end
    return s.toString();
    }
    

  • Приручаем 6-в-1 кольцо Jakcom r5 smart ring

    Приручаем 6-в-1 кольцо Jakcom r5 smart ring

    Купить можно на aliexpress или на ozon, цены +- одинаковые (~2100 рублей)

    Читаем инструкцию, смотрим где располагаются метки

    • по бокам 2 метки t5577 (ID) 125 kHz
    • I и III это mifare1 (IC) 13.56 MHz
    • II и IV это ntag216 (nfc) 13.56 MHz

    Находим 2 пароля для ID меток

    1. 5469616e
    2. 51243648

    Выкидываем инструкцию, берём proxmark3/flipperzero и начинаем эксперименты! У Флиппера актуальная на текущий момент прошивка unleashed-070e

    Заходим в раздел 125kHz->Saved->Write and set pass, вводим один из паролей (5469616e или 51243648), пробуем записать метку.

    Для сброса пароля заходим в раздел 125kHz->Extra Actions->Clear T5577 Password

    НО! Если сбросить пароль на 2х метках сразу, то они будут синхронно перезаписываться, что слегка меня смутило, лучше оставить на одной из меток пароль.

    Теперь идём в proxmark3 изучать ID метки

    play

    Пробуем на боковых метках lf search

    [=] Note: False Positives ARE possible
    [=]
    [=] Checking for known tags...
    [=]
    [!] Specify one authentication mode
    [-] No known 125/134 kHz tags found!
    [=] Couldn't identify a chipset
    

    Уточняем метку lf t5 detect

    [!] Could not detect modulation automatically. Try setting it manually with 'lf t55xx config'
    

    Добавляем известный пароль из инструкции lf t5 detect -p 51243648

    [=]  Chip type......... T55x7
    [=]  Modulation........ ASK
    [=]  Bit rate.......... 5 - RF/64
    [=]  Inverted.......... No
    [=]  Offset............ 33
    [=]  Seq. terminator... Yes
    [=]  Block0............ 000880E0 (auto detect)
    [=]  Downlink mode..... default/fixed bit length
    [=]  Password set...... Yes
    [=]  Password.......... 51243648
    

    Дальше я попробовал сделать wipe… и всё пропало. Ни ответа, ни привета. Флиппер тоже молчит. Пробую выполнить запись напрямую (через тестовый режим)

    lf t55 write -b 0 -d 000880E0 -t
    lf t55 write -b 0 -d 000880E0 --r0 -t
    lf t55 write -b 0 -d 000880E0 --r1 -t
    lf t55 write -b 0 -d 000880E0 --r2 -t
    lf t55 write -b 0 -d 000880E0 --r3 -t
    

    Потом записываем любой id

    lf em 410x clone --id 0102030405
    

    И… тишина. Метка не читается.

    Пробую через флиппер Clear T5577 Password и метка оживает!

    Сразу пробую записать через флиппер ключи - всё записалось.

    Теперь очередь IC меток

    Флиппер прекрасно прочитал I и III метки, но не смог записать туда данные - data management is only possible with initial card Как magic эта метка не определяется, uid просто так не перебить. Значит будем записывать через proxmark3.

    Пробуем на метке I и III hf search

    [|] Searching for ISO14443-A tag...
    [+]  UID: AA BB CC DD
    [+] ATQA: 00 04
    [+]  SAK: 08 [2]
    [+] Possible types:
    [+]    MIFARE Classic 1K
    [=] proprietary non iso14443-4 card found, RATS not supported
    [+] Magic capabilities... Gen 2 / CUID
    [+] Magic capabilities... Gen 4 GDM / USCUID ( Magic Auth )
    [+] Prng detection....... weak
    [+] Valid ISO 14443-A tag found
    

    Дальше получаем дампы ключей hf mf autopwn, записываем новую метку hf mf restore –uid 11223344

    Проверяем на флиппере - Всё читается.

    NFC метки

    Это ntag216, можно записать визитку

    Габариты кольца

    Кольцо просто огромное (Размер L, самый большой) play


  • Альтернативный клиент для просмотра Reddit

    Альтернативный клиент для просмотра Reddit

    Летом 2023 года Reddit запретил ценовой политикой все альтернативные клиенты. Но использование api индивидуально для каждого клиента - бесплатно! На данный момент актуальный способ - Генератор apk Infinity for Reddit

    Следуем инструкции по созданию приложения

    1. Создаём API приложение на reddit и получаем api_token
      name: {ВашеИмяНаРеддит}s-app (Заменить {ВашеИмяНаРеддит} на ваше имя пользователя)
      Тип: Installed app
      redirect uri: http://127.0.0.1
      
    2. Заполняем на первом шаге генератора поля api_token и your_reddit_username и нажимаем кружок

    play

    1. Дожидаемся когда 1й шаг завершит работу, жмём такой же кружок на 2м шаге. Минут 10 ждём.
    2. Теперь приложение готово, можно скачать - запускаем кружок на 3м шаге и ждём некоторое время.
    3. Устанавливаем получившийся apk, авторизуемся под своим логином. Проверяем что всё работает.
    4. Обязательно запускаем 4й шаг для удаления созданной виртуальной машины от гугла (где происходила сборка приложения)

    p.s Если вы установите оригинальный Infinity, он будет просить подписку для просмотра контента.


  • Создаём активность на серверах Oracle free tier

    Создаём активность на серверах Oracle free tier

    Надо как то защитить сервер на Oracle, что бы инстанс не отключали из за новой политики Oracle Reclamation of Idle Compute Instances

    Idle Always Free compute instances may be reclaimed by Oracle. Oracle will deem virtual machine and bare metal compute instances as idle if, during a 7-day period, the following are true:
    
        CPU utilization for the 95th percentile is less than 20%
        Network utilization is less than 20%
        Memory utilization is less than 20% (applies to A1 shapes only)
    

    Хотят нагрузку на cpu - делаем: cpu.js

    import Cpu from "./cpu.js";
    new Cpu(20);
    

    htop


  • Генерируем нейро-котиков

    Генерируем нейро-котиков

    Нашёл интересный промт для midjourney, но он прекрасно переваривается dalle

    cat hacker, computer
    (foggy background, epic realistic, rutkowski, hdr, intricate details, hyperdetailed, cinematic, rim light, muted colors:1.2)
    

    hacker-cat hacker-cat-2 hacker-cat-3 hacker-cat-4 hacker-cat-5 hacker-cat-6

    Следующие генерации - Генерируем нейро-котиков в сентябре


  • Публикуем библиотеку на java в maven-central

    Публикуем библиотеку на java в maven-central

    1. Регистрируемся на issues.sonatype.org
    2. Создаём тикет
      • Поле Issue Type = New Project
      • Summary = Краткое название проекта
      • Group Id = info.x-crm (Это ваш артефакт = имя домена наоборот)
      • Project URL = Ссылка на сайт проекта
      • SCM url = Ссылка на репозиторий
      • Already Synced to Central = No
    3. Ждём пока робот скажет что делать. Можно сразу создать TXT запись для домена с номером тикета OSSRH-XXYYZZ
    4. Скачиваем gpg4win и создаём там приватный ключ, публикуем.
    5. Экспортируем ключ в формате ascii-armored (*.asc)
    6. Создаём файл c:\Users\user.gradle\gradle.properties важный момент
    sonatypeUsername=Логин от issues.sonatype.org
    sonatypePassword=Пароль от issues.sonatype.org
    signingKeyId=Последние 8 цифр идентификатора ключа (short формат)
    signingPassword=Пароль от закрытого ключа
    signingKey=-----BEGIN PGP PRIVATE KEY BLOCK-----\n\nСодержимое ключа в одну строку, где все символы новой строки явно обозначены\n-----END PGP PRIVATE KEY BLOCK-----\n
    
    1. Основные секции файла build.gradle для java приложения. Если в версию добавить слово SNAPSHOT - будет публикация в тестовом maven репозитории.
    plugins {
        id 'java'
        id 'maven-publish'
        id 'signing'
    }
    
    group = 'info.x-crm'
    version = '0.0.1'
    
    java {
        withJavadocJar()
        withSourcesJar()
    }
    publishing {
        publications {
            mavenJava(MavenPublication) {
                artifactId = 'код-этой-библиотеки'
                from components.java
    
                versionMapping {
                    usage('java-api') {
                        fromResolutionOf('runtimeClasspath')
                    }
                    usage('java-runtime') {
                        fromResolutionResult()
                    }
                }
    
                pom {
                    name = 'Название проекта'
                    description = 'Описание проекта'
                    url = 'https://x-crm.info/'
                    licenses {
                        license {
                            name.set("The Apache License, Version 2.0")
                            url.set("http://www.apache.org/licenses/LICENSE-2.0.txt")
                        }
                    }
                    scm {
                        connection = 'scm:git:https://github.com/william-aqn/blog.git'
                        developerConnection = 'scm:git:https://github.com/william-aqn/blog.git'
                        url = 'https://github.com/william-aqn/blog'
                    }
                }
            }
        }
        repositories {
            maven {
                def releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
                def snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/"
                url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
                credentials {
                    username = findProperty("sonatypeUsername").toString()
                    password = findProperty("sonatypePassword").toString()
                }
            }
        }
    }
    
    signing {
        def signingKeyId = findProperty("signingKeyId").toString()
        def signingKey = findProperty("signingKey").toString()
        def signingPassword = findProperty("signingPassword").toString()
        useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword)
        sign publishing.publications.mavenJava
    }
    
    1. Если что то пошло не так - тут расшифрованы коды ошибок
    2. Отправляем на релиз публикацию (Нажать close, подождать немного, release)

    Автопубликация библиотеки из репозитория при коммитах

    1. Для Github есть экшен, заполняем секреты sonatypeUsername / sonatypePassword / signingKeyId / signingKey / signingPassword
    2. Для Bitbucket создаём base64 строку из содержимого файла gradle.properties и сохраняем в секрет репозитория
    3. Создаём файл с пайплайном bitbucket-pipelines.yml
    image: gradle:8.0
    
    pipelines:
      default:
        - parallel:
          - step:
              name: Publish
              caches:
                - gradle
              script:
                - echo "$SECRET_BASE64_CONFIG" | base64 -d > ~/.gradle/gradle.properties
                - gradle publish
    

    Рекомендации для библиотеки


  • Как сделать standalone версию java библиотеки

    Как сделать standalone версию java библиотеки и получить независимый jar файл

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

    Делаем таск в build.gradle для java standalone приложения.

    plugins {
        id 'java'
    }
    
    group = 'info.x-crm'
    version = '0.0.1'
    
    tasks.register('standaloneJar', Jar) {
        archiveFileName = "lib-standalone-${version}.jar"
        duplicatesStrategy = DuplicatesStrategy.EXCLUDE
        from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
        with jar
    }
    

  • Быстро переводим текст в буфере обмена

    Быстро переводим текст в буфере обмена

    Когда нужно перевести очень много мелких фраз на разные языки в уникальных местах файлов - очень муторно переключаться между переводчиком. Пусть само всё переводится в буфере!

    Сделал GUI для переводчика и прикрутил на выбор google-free, deepl и openapi с моделью text-davinci-003

    Пока оптимальный промпт для перевода текста это

    Please translate the user message from #from# to #to#. Make the translation sound as natural as possible.
    

    screen

    Скачать можно тут node-clipboard-translate


  • Меняем регион у ASUS роутера

    Меняем регион у ASUS роутера

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

    Создаём файл /jffs/scripts/init-start в котором будет меняться регион на US, можно постаить #a - разблокируется вообще всё, но говорят не очень стабильно это.

    nvram set location_code=US
    nvram commit
    service restart_wireless
    

    Далее добавляем этот файл в автозапуск скриптов роутера

    nvram set jffs2_exec=/jffs/scripts/init-start
    nvram set jffs2_scripts=1
    nvram commit
    reboot
    

    После перезагрузки проверяем мощность

    wl txpwr_target_max
    > Maximum Tx Power Target (chanspec:0x1908):      24.00  24.00  24.00  24.00
    

    И регион

    nvram get location_code
    > US
    

    Пример заводского конфига

    Различные изыскания можно почитать тут И отличная статья по измерению мощности на всех каналах

    Или пишите в ЛС @CrashXRU, у него есть приватный способ сделать всё правильно, но делает только сам.

    Так же наставление как делать правильный костыль:

    пишем в nvram 
    CCODE + REV
    каналы и ширину если они отличаются от евро
    перезапускаем радио модуль
    далее проверяем через WL если СС+REV те то проверяем канал, если тот то пропускаем
    Если нет, то выключаем модуль ставим нужные параметры и включаем уже модуль и не службу модулей
    
    тогда все будет работать до перезагрузки
    
    но менять настройки радиомодулей НЕЛЬЗЯ
    поменяли что то не важное, перезагрузили роутер
    
    трогать прошивку нельзя, пытаться записать нельзя все потому что прошивка плоская, те она упакована и только ro сделать ее RW нельзя ну никак, вообще никак, это особеность таких прошивок
    

  • Запущен бот в Telegram

    Запущен бот в Telegram

    @xcrminfo_bot

    Оживил старый функционал по сбору ключей для nod32, теперь уже на nodejs с использованием headless браузера chrome

    Основные команды

    • /who - Информация о id чата и id пользователя
    • /nod - Ключи для nod32 (если найдутся, запрос в гугле - ключи для nod32 и смотрим выдачу)

    Технические подробности можно прочитать в посте - Парсим сайт спрятанный через Cloudflare


  • Парсим сайт спрятанный через Cloudflare

    Парсим сайт спрятанный через Cloudflare

    Нашёл способ обходить проверку cloudflare, но хром жрёт как не в себя оперативку. Отключаем скрипты слежения и всю медиа что есть на страницах. Авторизуемся где нибудь и парсим контент. Ещё плагины можно найти в репозитории puppeteer-extra - например обход рекапчи.

    Не забываем установить chrome

    wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
    sudo apt install ./google-chrome-stable_current_amd64.deb
    
    import puppeteer from 'puppeteer-extra'
    import StealthPlugin from 'puppeteer-extra-plugin-stealth'
    import AdblockerPlugin from 'puppeteer-extra-plugin-adblocker'
    import ResBlockPlugin from 'puppeteer-extra-plugin-block-resources'
    
    class Nod {
        constructor() {
            puppeteer.use(StealthPlugin())
            puppeteer.use(AdblockerPlugin({ blockTrackers: true }))
            puppeteer.use(ResBlockPlugin({ blockedTypes: new Set(['image', 'stylesheet', 'media', 'font']) }))
        }
    
        parse() {
            let keys = [];
            const browser = await puppeteer.launch({
                executablePath: "/usr/bin/google-chrome-stable",
                args: ["--enable-features=NetworkService", "--no-sandbox"],
                ignoreHTTPSErrors: true,
                headless: "new"
            });
            // const browser = await puppeteer.launch({ headless: false })
    
            try {
                const page = await browser.newPage()
                // Открываем страницу
                await page.goto('https://', { timeout: 60000 });
                
                // Авторизуемся где нибудь
                await page.$eval('input[name=vb_login_username]', (el, login) => { el.value = login }, 'Логин какой нибудь');
                await page.$eval('input[name=vb_login_password]', (el, pwd) => { el.value = pwd }, 'Пароль какой нибудь');
                await page.click('input.button[type=submit]');
                await page.waitForNavigation({ waitUntil: 'load' });
    
                // Находим посты
                let messages = await page.$x("//*[contains(@id,'post_message_')]");
                for (let message of messages) {
                    let text = await message.evaluate(element => element.innerHTML);
                    // Находим ключи в постах
                    let k = text.match(/([A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4})/gm);
                    if (k) {
                        keys.push(...k);
                    }
                }
            } catch (e) {
                console.log(e);
            } finally {
                await browser.close();
            }
            return keys;
        } 
    export default Nod;
    

    Это небольшой пример кода моего бота


  • Пробрасываем сессию пользователя в Google Tag Manager

    Пробрасываем сессию пользователя в Google Tag Manager через Measurement Protocol

    1. За основу берём эту статью
    2. Собираем данные с фронта в base64 строку, что бы cloudflare не блокировал этот набор данных.
    function getCookieByPrefix(prefix) {
        let cookies = document.cookie.split(';');
        let searchKey = '';
        for (let i = 0; i < cookies.length; i++) {
          let cookie = cookies[i].trim();
          if (cookie.startsWith(prefix)) {
            let keyValue = cookie.split('=');
            let value = keyValue[0];
            if(value){
                searchKey = value;
            }
          }
        }
        return searchKey;
    }
    
    function getSessionData(id) {
    	let regex = new RegExp(id + "=GS\\d\\.\\d\\.(.+?)(?:;|$)");
    	const match = document.cookie.match(regex);
    	const parts = match?.[1].split(".");
    
    	if (!parts) {
    		window.setTimeout(() => getSessionData(id), 200);
    		return;
    	}
    
    	return parts.shift();
    }
    
    let trueSession_id = ''
    let dataG4 = '';
    let encoded = '';
    try {
        if(!trueSession_id){
            let searchKeyBycookie = getCookieByPrefix('_ga_');
            trueSession_id = getSessionData(searchKeyBycookie) || '';
        }
        dataG4 = {
            "cid": gaGlobal?.vid,
            "sid": trueSession_id,
            'ul':  navigator.language || navigator.userLanguage,
            'sr':  screen.width + 'x' + screen.height,
            'uaa': google_tag_data?.uach?.architecture,
            'uab': parseInt(google_tag_data?.uach?.bitness),
            'uafvl': google_tag_data?.uach?.fullVersionList.map(({ brand, version }) => `${brand};${version}`).join('| '),
            'uap': google_tag_data?.uach?.platform,
            'uapv': google_tag_data?.uach?.platformVersion,
            'cu': window.cur_currency || 'USD',
            'dl': document.location.href,
            'dr': document.referrer || '',
            'dt': document.title,
            'en': 'purchase',
        };
        encoded = Base64.encode(JSON.stringify(dataG4))
        
    } catch(e){
        console.warn(e);
    }
    
    
    1. На бэке сохраняем эти данные в доп.поле к заказу
    2. Для отправки используем библиотеку php-ga4
    3. В итоге должен получиться вот такой набор данных, который отправляется на endpoint https://www.google-analytics.com/mp/collect?measurement_id=G-0*********&api_secret=*********************
      • session_id должен быть числом (т.е. без кавычек в json)
    {
      "non_personalized_ads": false,
      "client_id": "601471748.1686739658",
      "user_properties": {
        "uafvl": {
          "value": "Not.A/Brand;8.0.0.0| Chromium;114.0.5735.60| Google Chrome;114.0.5735.60"
        },
        "uap": {
          "value": "Android"
        },
        "uapv": {
          "value": "8.1.0"
        }
      },
      "events": [
        {
          "name": "purchase",
          "params": {
            "language": "pt-BR",
            "page_location": "https://site.com/",
            "page_referrer": "android-app://org.telegram.messenger/",
            "page_title": "Заголовок страницы",
            "screen_resolution": "360x640",
            "session_id": 1686739658,
            "engagement_time_msec": "1000",
            "currency": "USD",
            "transaction_id": 12399321,
            "value": 45.54,
            "affiliation": "User",
            "coupon": "",
            "shipping": 0,
            "tax": 0,
            "items": [
              {
                "item_id": "123456",
                "item_name": "Название товара",
                "currency": "USD",
                "item_category": "Категория товара",
                "price": 45.54,
                "quantity": 1
              }
            ]
          }
        }
      ]
    }
    

  • Как запустить Diablo 4 в России

    Как запустить Diablo 4 в России

    1. Оригинальный мануал
    2. Купить через подарок где нибудь
    3. Скачать BNetInstaller.exe
    4. Запустить и ввести данные ниже
      TACT Product: fenris
      Agent UID: fenris
      Installation Directory: путь куда нужно установить игру (например, C:\Games\Diablo IV Beta)
      Game/Asset Language: язык игры (ruRU для русской версии или enUS для английской)
      Repair Install (Y/N): N
      

      3.1. Если хотим сами скачать бэту

      TACT Product: fenrisb
      Agent UID: fenris_beta
      

      Или воспользоваться бинарниками из beta_binary.rar, пароль c7148a33d7dea696012adac714b6d4f0

    5. Создаём ярлык с ключём “Diablo IV.exe” -launch
    6. Закидываем из бэты Diablo IV.exe и .build.info в релиз игры, предварительно сохранив оргинальные.
    7. Запускаем через ярлык бэту и авторизуемся
    8. Меняем бинарники обратно
    9. Запускаем через ярлык релиз.

    Ещё есть unlocker.rar, разблокирует запуск через оригинальный battle.net клиент, пароль d84fbe00a685f25c3e3f52db43d63b06 Можно поймать бан за анлокер.


  • Bitrix.DevOps

    Полный цикл CI/CD в bitrix env

    Основная идея Bitrix.DevOps

    • Рабочие копии сайта актуализируются через Action в гите любым разработчиком (~10 минут)
    • У каждого разработчика собственная рабочая копия основного сайта связанная с git на собственной ветке.
    • Все изменения перез релизом отправляются на staging сайт для автоматического тестирования и последующего создания PullRequest в master ветку с уведомлением в телеграмм.
    • Любое изменение файлов на основном сервере, который связан с master веткой отправляется в новую ветку, что бы не потерять изменения внесённые менеджером.
    • Любое изменение файлов на тестовых серверах - откатываются до состояния репозитория

    Это предже всего инструмент, изучите код перед тем как его применить!


  • Великий Китайский Файрвол

    Великий Китайский Файрвол

    За основу брал мануал https://habr.com/ru/articles/735536/

    Панель на сервере https://github.com/alireza0/x-ui

    • Устанаваливаем
      bash <(curl -Ls https://raw.githubusercontent.com/alireza0/x-ui/master/install.sh)
      
    • Если хотим через докер
      docker run -itd \
        -p 127.0.0.1:8181:54321 -p 443:443 -p 80:80 \
        -e XRAY_VMESS_AEAD_FORCED=false \
        -v $PWD/db/:/etc/x-ui/ \
        -v $PWD/cert/:/root/cert/ \
        --name x-ui --restart=unless-stopped \
        alireza7/x-ui:latest
      

    Основные моменты

    • Стандартный логин/пароль - admin/admin меняем на свои
    • В X-UI поле Subscription по умолчанию не отображается, нужно сначала активировать функционал подписок в настройках панели.
    • По умолчанию заблокирован Торрент трафик, разрешаем в настройках.
    • Делаем в настройках панели доступ только через 127.0.0.1

    Настройка Shadowsocks-2022

    Создаем подключение:

    • Remark - Любое название
    • Протокол - Shadowsocks
    • Listening IP - Оставляем пустым
    • Порт - Панель выберет рандомный

    Настраиваем пользователя, других можно добавить позже:

    • Email - Любой текст
    • Subscription - Тот же самый текст.

    Дальше снова идут настройки протокола:

    • Шифрование - выбираем что-нибудь что начинается с 2022
    • Пароль - (ключ) панель сгенерирует автоматически с правильной длиной для выбранного метода шифрования.

    Нажимаем “Создать” и на этом настройка для Shadowsocks закончена, им уже можно пользоваться.

    Настройка VLESS с XTLS-Reality

    Создаем подключение:

    • Remark - Любое название
    • Протокол - vless
    • Listening IP - Оставляем пустым
    • Порт - Обязательно 443

    Далее переходим к настройкам клиента:

    • Email - Любой другой текст
    • Subscription - Текст который указали при настройке в Subscription Shadowsocks-2022
    • Flow - Выбираем “xtls-rprx-vision”. Поле Flow появится только после того, как чуть ниже поставите галочку на пункте Reality.

    Дальше у нас идут настройки транспорта:

    • Reality - Активно
    • XTLS - Отключено
    • uTLS - по умолчанию firefox (главное чтобы не android, могут быть проблемы с клиентами)
    • Домен - Это не домен, а адрес для подключения к вашему серверу. Можно оставить пустым, тогда панель автоматически подставит IP-адрес или домен, по которому вы обращаетесь в панели на сервере.
    • ShortIds - Случайное hex число
    • Public Key, Private Key - Нажимаем Get new keys, и панель сама заполнит эти поля
    • Dest и Server names - это самое интересное, это домен, под который вы будете маскироваться. По умолчанию панель предлагает маскировку под yahoo.com и www.yahoo.com с переадресацией на yahoo.com:443, но лучше выбрать какой-нибудь другой домен

    Клиенты

    • Windows https://github.com/MatsuriDayo/nekoray/releases
      • Ядро выбираем sing-box
      • Тип подключения - VPN Mode
      • Настройка профиля Настройка nekobox
    • Android https://github.com/MatsuriDayo/NekoBoxForAndroid/releases
      • https://4pda.to/forum/index.php?showtopic=1065786
    • IOS https://apps.apple.com/us/app/shadowrocket/id932747118

  • Настраиваем zerotier в lxc контейнере proxmox

    For LXC to work : Enabling tun by default when starting a CT image to get zerotier working :

    on proxmox host Edit this file “/etc/pve/lxc/ctxxx.conf” with these 2 lines which enabled me to get zerotier working on the container, and connect to my zerotier network. After adding the lines, I simply rebooted the ct.

    lxc.cgroup.devices.allow: c 10:200 rwm lxc.mount.entry: /dev/net dev/net none bind,create=dir


  • Подключаем детектор углекислого газа Даджет к Home Assistant

    Подключаем детектор углекислого газа Даджет к Home Assistant (ZyAura ZGm053U CO2 & Temperature Monitor) через ESPHome

    https://esphome.io/components/sensor/zyaura.html

    В наличии был esp01 который идеально подходит к пинам на плате

    И программатор pl2303, которому нужны специальные драйвера, иначе не запустится

    Подключаем для прошивки по схеме pl2303 esp01

    • 3.3V -> VDD+CH_EN
    • TXD -> RXD
    • RXD -> TXD
    • GND -> GND+GPIO_00 Пины

    В Home Assistant создаём прошивку и заливаем на esp через Chrome браузер yaml

    Дальше отключаем GPIO_00 от GND, подключаем к co2 выводам esp01 (пока питание берём от pl2303) В логе появляются данные Источник питания

    Теперь надо отпаять гребёнку от esp01 и поместить esp01 непосредственно на пины co2 Питание 3.3V надо где то взять… Источник питания

    TODO:

    • Найти питание

  • Дорабатываю плагин для The Lord of the Rings Online

    Дорабатываю плагин для The Lord of the Rings Online

    Переработал идею плагина Item Treasury и вот что получилось:

    • Быстрый поиск оригинального названия предмета для аукциона
    • Открытие окна быстрого поиска командой /ru или нажатием правой кнопкой мыши на иконку плагина
    • Регистронезависимый поиск предметов на Русском языке
    • Отображение названий предметов ru/en/ru+en
    • Перевод интерфейса
    • Скрипт для автоматического обновления БД (update.cmd) Изменения для новой версии оригинального плагина можно сделать самостоятельно, в репозитории написано что и где менять. Или update.cmd сделает это сам.

    Можно скачать на translate.lotros.ru или из репозитория

    How to use How to use


  • Double VPN или шифруемся грамотно

    Дабл впн или шифруемся грамотно (никаких докеров и certbotoв)

    Точка входа Cloudflare, точка выхода - ваша vps

    За основу брал мануал https://bernd32.blogspot.com/2022/03/shadowsocksv2ray-tls.html

    1. Покупаем любой домен, или используем свой (если уже есть)
    2. Регистрируемся в Cloudflare и привязываем туда созданный домен
      • Ждём несколько часов, пока DNS-записи обновятся.
      • Зайдём в Firewall Cloudflare и изменим security level на essentially off
    3. Разворачиваем на нашей VPS-ке shadowsocks
      • Все команды выполняются под рутом. sudo su - наше всё
    4. В зависимости от провайдера vps и установленной машины - открываем порты 80 и 443
      • Если у вас Oracle или Amazon - порты открыть дополнительно надо в панели управления самого хостера.
    5. Устанавливаем nginx apt install nginx (если ubuntu)
      • Удаляем дефолтный конфиг: rm /etc/nginx/sites-available/default && sudo rm /etc/nginx/sites-enabled/default
    6. Cоздаем root-директорию, в которой будут находиться файлы нашего сайта sudo mkdir /var/www/<домен>
      • Создаем там файл index.html nano /var/www/<домен>/index.html и записываем туда что угодно, например
       <!DOCTYPE html>
       <html lang="en">
       <head>
       <meta charset="UTF-8">
       <meta http-equiv="X-UA-Compatible" content="IE=edge">
       <meta name="viewport" content="width=device-width, initial-scale=1.0">
       <title>Hello world</title>
       </head>
       <body>
       <h1>Hello world</h1>
       </body>
       </html>
      
    7. Забираем SSL сертификат и приватный ключ у Cloudflare для нашего домена (SSL/TLS->Origin Server) и сохраняем в /nginx/ssl/<домен>/public.key и /nginx/ssl/<домен>/private.key
      • Внимание! Он валидный ТОЛЬКО с Cloudflare. Нужен что бы nginx хорошо себя вёл.
      • Генерируем на нашем сервере openssl dhparam -out /etc/nginx/ssl/dhparam.pem 4096
    8. В настройках своего домена на Cloudflare, в разделе SSL/TLS ставим Full(strict).

    9. Создаем конфиг для нашего сайта: nano /etc/nginx/sites-available/<домен>

      • Вставляем (и не забываем вставить свой домен вместо <домен>):
       server {
           server_name <домен>;
      
           root /var/www/<домен>;
           index index.html;
      
           location / {
                   try_files $uri $uri/ =404;
           }
      
           location /bdsm {
               proxy_redirect off;
               proxy_http_version 1.1;
               proxy_pass http://localhost:8008;
               proxy_set_header Host $http_host;
               proxy_set_header Upgrade $http_upgrade;
               proxy_set_header Connection "upgrade";
           }
      
           listen [::]:443 ssl ipv6only=on;
           listen 443 ssl; 
           ssl_certificate /nginx/ssl/<домен>/public.key;
           ssl_certificate_key /nginx/ssl/<домен>/private.key;
           ssl_session_cache shared:le_nginx_SSL:10m;
           ssl_session_timeout 1440m;
           ssl_session_tickets off;
      
           ssl_protocols TLSv1.2 TLSv1.3;
           ssl_prefer_server_ciphers off;
           ssl_dhparam /etc/nginx/ssl/dhparam.pem;
      
           ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
       }
      
       server {
           if ($host = <домен>) {
               return 301 https://$host$request_uri;
           } 
      
           listen 80;
           listen [::]:80;
      
           server_name <домен>;
           return 404;
       }
      
      
    10. Включаем сайт: ln -s /etc/nginx/sites-available/<домен> /etc/nginx/sites-enabled/

      • Рестартим nginx: systemctl restart nginx

      • Вставляем в адресную строку браузера наш домен и проверяем, что всё работает

    11. Устанавливаем shadowsocks (Если у вас x64): Если у вас arm64 см пункт 13

      • Создаем папку под бинарники сс: mkdir /etc/ss-go

      • Качаем бинарник сс с гитхаба: wget https://github.com/shadowsocks/go-shadowsocks2/releases/download/v0.1.5/shadowsocks2-linux.gz

      • Распакуем архив сс-го: gzip -d shadowsocks2-linux.gz

      • Переносим и переименуем бинарник: mv shadowsocks2-linux /etc/ss-go/ss-go

      • Делаем бинарник исполняемым: chmod +x /etc/ss-go/ss-go

      • Повышаем права сс и позволяем ему занимать привилегированные порты: setcap "cap_net_bind_service=+eip" /etc/ss-go/ss-go

    12. Устанавливаем v2ray плагин:

      • Cкачиваем плагин (вместо v1.3.1/v2ray-plugin-linux-amd64-v1.3.1.tar.gz может быть что-то другое, последняя версия лежит тут https://github.com/shadowsocks/v2ray-plugin/releases/latest) wget https://github.com/shadowsocks/v2ray-plugin/releases/download/v1.3.1/v2ray-plugin-linux-amd64-v1.3.1.tar.gz

      • Разархивируем сам плагин, тут опять же может быть другой файл в зависимости от скачиваемой версии: tar -xf v2ray-plugin-linux-amd64-v1.3.1.tar.gz

      • Переносим и переименуем плагин: mv v2ray-plugin_linux_amd64 /etc/ss-go/v2ray-plugin

      • Даем возможность v2ray-плагину занимать привилегированные порты: setcap "cap_net_bind_service=+eip" /etc/ss-go/v2ray-plugin

      • Вставляем следующее (вместо <пароль> нужно придумать пароль): `nano /etc/systemd/system/ss-v2ray.service`

      [Unit]
      Description=Go-shadowsocks2 with V2RAY-websocket obfuscation
      After=network.target
          
      [Service]
      Type=simple
      User=nobody
      Group=nogroup
      LimitNOFILE=51200
      ExecStart=/etc/ss-go/ss-go -s localhost:8008 -password <пароль> -cipher AEAD_CHACHA20_POLY1305 -plugin /etc/ss-go/v2ray-plugin -plugin-opts "server;loglevel=none;path=/bdsm"
      
      [Install]
      WantedBy=multi-user.target
      
      • Сохраняем ctrl + o, закрываем ctrl + x

      • Включаем сервис: systemctl enable ss-v2ray.service

    13. Устанавливаем shadowsocks (Если у вас arm64):
      • Качаем rust версию wget https://github.com/shadowsocks/shadowsocks-rust/releases/download/v1.14.3/shadowsocks-v1.14.3.aarch64-unknown-linux-gnu.tar.xz
      • Берём оттуда ssserver mv ssserver /etc/ss-go/ss-go

      • Делаем бинарник исполняемым: chmod +x /etc/ss-go/ss-go

      • Повышаем права сс и позволяем ему занимать привилегированные порты: setcap "cap_net_bind_service=+eip" /etc/ss-go/ss-go

      • Делаем конфиг nano /etc/ss-go/shadowsocks-rust.json
      {
      "server": "127.0.0.1",
      "server_port": 8008,
      "password": "пароль",
      "timeout": 120,
      "method": "chacha20-ietf-poly1305",
      "no_delay": true,
      "fast_open": true,
      "reuse_port": true,
      "workers": 1,
      "ipv6_first": false,
      "nameserver": "1.1.1.1",
      "mode": "tcp_and_udp",
      "plugin": "/etc/ss-go/v2ray-plugin",
      "plugin_opts": "server;loglevel=none;path=/bdsm"
      }
      
      • Меняем в nano /etc/systemd/system/ss-v2ray.service

    ExecStart=/etc/ss-go/ss-go -c /etc/ss-go/shadowsocks-rust.json

    Настраиваем клиент под windows

    server addr - <домен>
    server port - 443
    password - <пароль>
    encryption - chacha20-ietf-poly1305
    plugin program - v2ray-plugin_windows_amd64.exe
    plugin options - tls;host=<домен>;path=/bdsm
    proxy port - локальный порт куда будем направлять браузер (по дефолту 1080, можно не трогать)
    

    Клиент под android

    1. Устанавливаем https://play.google.com/store/apps/details?id=com.github.shadowsocks
    2. +v2ray https://play.google.com/store/apps/details?id=com.github.shadowsocks.plugin.v2ray

  • Подписываем ЭЦП word/excel/pdf документ

    Подписываем ЭЦП word/excel/pdf документ через криптопровайдера Vipnet CSP без установки КриптоПРО и без физического токена. За 1 день.

    Disclaimer: Нельзя просто так взять и подписать документ, техподдержка говорит дичь (т.е. ничего полезного)

    1. Делаем виртуальную машину на основе ОРИГИНАЛЬНОЙ (не репака) Windows 10 (версия 1607, сборка 14393) https://nnmclub.to/forum/viewtopic.php?t=1042256 magnet:?xt=urn:btih:33897D649002A253918465C0B07009F99D961C15

    2. Устанавливаем Microsoft Office максимальную версию 2013 https://nnmclub.to/forum/viewtopic.php?t=1551670 magnet:?xt=urn:btih:93dd4132850b9280a20758616a6a3e41e81251c6 Иначе получите ошибку
      Аалгоритм шифрования необходимый для выполнения этой операции не установлен на этом компьютере
      

      Тех.поддержка говорит нужен КриптоПро Office Signature 2.0, который в свою очередь требует КриптоПРО CSP, который стоит денег, который конфликтует с бесплатной Vipnet CSP. Итого - нафиг.

    3. Делаем снапшот виртуалки. Это важно!

    4. Устанавливаем ViPNet CSP Win 4.4.2.2388 от 30.07.2021 с отключенной галкой TLS (иначе чёрный экран получите после перезагрузки) https://infotecs.ru/product/vipnet-csp.html

    5. Перезагружаем виртуалку. Если что то пошло не так - откатываемся, и отключаем забытую галку TLS при установке ViPNet CSP.

    6. Покупаем ЭЦП для физ лиц, например тут всего за 900 рублей на 15 месяцев, при покупке обязательно выбираем VipnetCSP https://astral.ru/tarify/astral-et/astral-et-fl/23803/

    7. В течении одного дня проходим различные бюрократические процедуры,

    8. Делаем бэкап криптоконтейнера. А лучше в несколько разных мест.

    9. Делаем снапшот виртуалки, что бы откатываться для сброса Adobe и КриптоПро PDF.

    10. Устанавливаем Adobe DC Pro исключительно версию x86 https://nnmclub.to/forum/viewtopic.php?t=1557398 magnet:?xt=urn:btih:7FC889FDBB22EB6D2A3823F1385F85A4BE075156

    10.1. Adobe Reader DC исключительно версию x86 Выбираем windows 10, Russian, Reader DC 2019.008.20071 Russian for Windows Снимаем галки с McAfee Жмём скачать https://get.adobe.com/ru/reader/otherversions/

    1. Устанавливаем плагин КриптоПро PDF для подписывания pdf, который работает ограниченное время. https://www.cryptopro.ru/products/other/pdf/downloads

    2. В настройках Adobe DC заходим Редактирование->Установки->Подписи->Создание и оформление->Метод подписания по умолчанию = “КриптоПро PDF” + Формат подписания по умолчанию = “Эквивалент CaDES” Иначе получим вот такую ошибку:
      Не удалось закончить создание этой подписи.  
      Ошибка превышения размера.  
      Неподдерживаемый алгоритм открытых ключей
      
    3. Подписываем документы, наслаждаемся. Откатываемся через 90 дней на снапшот, и ставим снова КриптоПро PDF.