1
Компьютеры и интернет / Re: Что с Replit?
« on: 22 January 2026, 16:59:42 »
https://codesandbox.io/ для примеров побольше, многофайловых.
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
А как получить доступ к серверу? Через домен?
Это как, через fetch()? Я бэкэнд ещё вообще не трогал?
Т.е. я создаю <span>, пишу в него, браузер выполняет appendChild() и отправляет данные на сервер.
А чтобы писать мог только я надо создавать многостраничный сайт? Редактор поста и ленту?
/*
* В задаче есть две подзадачи.
* 1. Формулировка правил транслитерации.
* 2. Применение правил к транслитерации текста.
* Эти задачи достаточно независимы, и мы постараемся избегать tight coupling.
*
* Правило транслитерации может быть простым, когда транслитерируемой литере
* соответствует строка транслита, или специальным, когда литера
* транслитерируется в зависимости от контекста. Мы будем моделировать набор
* правил объектом, в котором однолитерным строкам ставятся в соответствие или
* строки, или функции, преобразующие контекст в строки. Под «контекстом» будем
* понимать тройку (currentIndex, text, currentChar). Такое представление
* правил не очень удобно для диграфов, но работает для данной задачи.
*/
/*
* Сначала напишем "движок", преобразующий набор правил в
* функцию-транслитератор текста.
*/
function createTranslit(rules) {
return text => {
const result = [];
const textLength = text.length;
for (let index = 0; index < textLength; ++index) {
const currentChar = text[index];
const translation = rules[currentChar];
if (typeof translation === 'string') {
// простое правило транслитерации
result.push(translation);
} else if (typeof translation === 'function') {
// специальное правило транслитерации: функция, преобразующая контекс
result.push(translation(index, text, currentChar));
} else {
// если правило не определено для литеры, литера не транслитерируется
result.push(currentChar);
}
}
return result.join('');
}
}
// Правила и транслитератор для украинской письменности
const LOWERCASE_CONSONANTS = 'бвгґджзйклмнпрстфхцчшщ';
const CONSONANTS = new Set(LOWERCASE_CONSONANTS + LOWERCASE_CONSONANTS.toUpperCase());
function isUaConsonant(ch) {
return CONSONANTS.has(ch);
}
// Специальное правило для йотированных букв.
function jotatedTranslation(jotated, softening) {
return (index, text) => {
const prevChar = text[index - 1];
// После согласной - смягчающий вариант, иначе - йотированный
return isUaConsonant(prevChar) ? softening : jotated;
}
}
// Транслитерация мягкого знака: «ьо» преобразуется в смягчающее «о», иначе
// возвращается softSignChar
function softSignTranslation(softSignChar, softeningOChar) {
return (index, text) => {
const nextChar = text[index + 1];
if (nextChar === 'о') return softeningOChar;
return softSignChar;
}
}
// Транслитерация «о»: преобразуется в oChar за исключением позиции после
// мягкого знака. В последнем случае буква является частью диграфа и не
// добавляется к транслитерируемому тексту
function oTranslation(oChar) {
return (index, text) => {
const prevChar = text[index - 1];
return prevChar === 'ь' ? '' : oChar;
}
}
const translitUa = createTranslit({
'я': jotatedTranslation('ja', 'ǎ'),
'Я': 'Ja',
'є': jotatedTranslation('je', 'ě'),
'Є': 'Je',
'ю': jotatedTranslation('ju', 'ǔ'),
'Ю': 'Ju',
'ь': softSignTranslation('í', 'ǒ'),
'Ь': 'Í',
'о': oTranslation('o'),
'О': 'O',
"'": '',
'’': '',
'а':'a',
'б':'b',
'в':'v',
'г':'h',
'ґ':'g',
'д':'d',
'е':'e',
'ж':'ž',
'з':'z',
'и':'y',
'і':'i',
'й':'j',
'к':'k',
'л':'l',
'м':'m',
'н':'n',
'п':'p',
'р':'r',
'с':'s',
'т':'t',
'у':'u',
'ф':'f',
'х':'x',
'ц':'c',
'ч':'č',
'ш':'š',
'щ':'ś',
'А':'A',
'Б':'B',
'В':'V',
'Г':'H',
'Ґ':'G',
'Д':'D',
'Е':'E',
'Ж':'Ž',
'З':'Z',
'И':'Y',
'І':'I',
'Й':'J',
'К':'K',
'Л':'L',
'М':'M',
'Н':'N',
'О':'O',
'П':'P',
'Р':'R',
'С':'S',
'Т':'T',
'У':'U',
'Ф':'F',
'Х':'X',
'Ц':'C',
'Ч':'Č',
'Ш':'Š',
'Щ':'Ś',
});
// translitUa('Сучасні USB на ноутбуках стали більш енергоощадливі, через що бувають казуси, як-от проблема зі зовнішнім CD-приводом у мене. Вирішення дійсно одне: додаткове живлення, якщо конструкція передбачує.')
// "Sučasni USB na noutbukax staly bilíš enerhoośadlyvi, čerez śo buvajutí kazusy, jak-ot problema zi zovnišnim CD-pryvodom u mene. Vyrišennǎ dijsno odne: dodatkove žyvlennǎ, jakśo konstrukcija peredbačuje.
// translitUa("льод м'яч")
// "lǒd mjač"
(и на мой непрофессиональный взгляд довольно классно)Я бы сказал - совсем не классно, по-джуниорски.
Много бизнес-логики засунуто в самую низкоуровневую часть реализации (цепочка else if-ов внутри цикла с какими-то мутабельными переменными); много копипасты. Поэтому трудно понять, что делает алгоритм, и проблематично его поддерживать.Спасибо за информацию и добрый совет.
В Казахстане далековато, мне проще будет это сделать в Кито.
Но это всё в среднесрочной перспективе, вначале надо сделать гражданство Эквадора.
Ещё mãe (ср. с pai без назализации).