Блоґ одного кібера

Історія хвороби контуженого інформаційним вибухом

Знову повертаючись до університету

with 6 comments

В мене таке відчуття ніби я в універі. Місце де я сплю – вузьке і біля стіни. Біля ліжка – захаращений стіл. Мій сусід поїхав кудись на вихідні, а я сиджу, залипаю в комп’ютер і скоро зустрічатиму світанок.🙂

Сиджу, ковбашу код який мав би допомагати мені виправляти помилки форматування статтей вікіпедії:

var improve = function() {
	apply_change(fix_np, 'Заміна неперекладених посилань шаблоном');
	apply_change(fix_ref_names, 'атрибути в лапки');
	apply_change(fix_refs, 'Впорядкування іменованих зносок');
};

var fix_np = function(wikimarkup) {
	// Замінити [[:en:Article]] на {{нп|Article||en|Article}}
	return wikimarkup.replace(
		/\[\[:(\w{2}):(\w+)\]\]/,
		'{{нп|$2||$1|$2}}'
	);
};

var fix_ref_names = function(wikimarkup) {
	// атрибути мають бути в лапках
	return wikimarkup.replace(
		/<ref\s+name\s*=\s*(\w*)\s*>/,
		'<ref name="$1">'
	);
};

var fix_refs = function(wikimarkup) {
	// Виправляє помилку "назва визначена кілька разів з різним вмістом"
	
    var ref_reg = /<ref\s+name\s*=\s*"([^"]+?)"\s*>([^<]+?)<\/ref>/g;
    var ref_re  = /<ref\s+name\s*=\s*"([^"]+?)"\s*>([^<]+?)<\/ref>/;
    var matches = wikimarkup.match(ref_reg);
    var refs = {};
    var groups;
    var ln = '\n--------------------------\n';
    var duplications_count = 0;
    for(var i=0; i < matches.length; i++) {
        groups = ref_re.exec(matches[i]);
        if((refs[groups[1]] === undefined) || (refs[groups[1]] == groups[2]) || confirm(
        	'Замінити зноску ' + ln + refs[groups[1]] + ln
        	+ ' на ' + ln + groups[2] + ln + '?'
        )) {
        	if(refs[groups[1]] == groups[2]) duplications_count++;
        	refs[groups[1]] = groups[2]; // get last content found
        }
    }
    if(duplications_count > 0) {
    	alert('Знайдено повторюваних зносок: ' + duplications_count);
    } else {
    	return wikimarkup;
    }
    var reflist = [];
    for(var ref_name in refs) {
        reflist.push('<ref name="' + ref_name + '">' + refs[ref_name] + '</ref>');
    }
    return wikimarkup.replace(ref_reg, '<ref name="$1" />') +
        '\n<references>\n' + reflist.join('\n') + '\n</references>';
};

var apply_change = function(change, comment) {
	var old_value = document.editform.wpTextbox1.value;
	try {
		document.editform.wpTextbox1.value = change(
			document.editform.wpTextbox1.value
		);
	} catch(err) {
		alert('Помилка в зміні "' + comment + '":\n' + err.message);
	}
	
	if(document.editform.wpTextbox1.value != old_value) { // if changed
		// add comment
		if(!document.editform.wpSummary.value.trim()) {
			document.editform.wpSummary.value += ', ';
		}
		document.editform.wpSummary.value += comment;
	}
};

Я вже писав що потрохи перекваліфіковуюсь з бекенду на фронтенд? (І всякі автоматизації рутини для редакторів вікіпедії зручніше писати на клієнті, тоді їх можна швидко застосовувати при нагоді, не треба додатково логінитись і легше контролювати зміни що вносяться.

А ще щойно подумав що мій букмарклет cite web, при застосуванні на сайті Google Books повинен був би генерувати заповнений шаблон {{книга}}. А на YouTube – шаблон YouTube. Google Books дає заповнений BibTex та інші формати, а їх розуміє https://uk.wikipedia.org/wiki/Zotero, і напевне треба глянути його код.

А щодо того що я запостив – я собі думаю що мені треба було краще вчити в Карнаух автомати, чи який курс вона там вела. Бо я навіть не пам’ятаю лему про накачку, якою я б міг довести що оту розмітку яку я намагаюсь парсити регулярками, і на 50% успішно це роблю, не можна парсити регулярками. Хоча вони й не зовсім регулярні.

Може б то https://class.coursera.org/automata-004/lecture пройти? Там викладає не хто інший як сам Джефрі Ульман – один з авторів книги дракона і книги попелюшки. А ще він безкоштовно виклав свою спільну за Альфредом Ахо книжку Foundations of Computer Science.

Але мені бракує людей з якими б можна було про це спілкуватись. І від цього бракує мотивації. Я от вступ до логіки ніяк не можу закінчити. Хоча автомати від Ульмана напевне цікавіші, бо ще на кубику були цікавими. Може б то організувати навчальну групу у Львові? Формальні мови – це досить загальна тема, і ми могли б об’єднати людей що пишуть на C(++|#)?|Java(Script)?|P(ython|HP|erl)|Ruby|C(L|lojure)|Scala ітп. І ми могли б писати кожен якісь свої класні проекти з блекджеком і граматиками. Хоча, та ну його, той блекджек.🙂

Напевне те що я задовго сидів ночами відбилось на моїй продуктивності в університеті. Тепер головне – аби не відбилось на продуктивності роботи.🙂

Written by bunyk

Березень 13, 2016 at 04:55

Відповідей: 6

Subscribe to comments with RSS.

  1. ахаха. З блекджеком і граматикою.

    свиноматка

    Березень 15, 2016 at 22:24

  2. […] танго, є те ж танго. Але от якоїсь навчальної групи для проходження курсів і спільного написання проектів – […]

  3. цікава ідея – “Формальні мови – це досить загальна тема, і ми могли б об’єднати людей що пишуть на C(++|#)?|Java(Script)?|P(ython|HP|erl)|Ruby|C(L|lojure)|Scala ітп. І ми могли б писати кожен якісь свої класні проекти з блекджеком і граматиками. Хоча, та ну його, той блекджек. :)” правда, я зараз пишу на Salesforce\Apex, тобто, мова, на якій я пишу, не входить у твій реґекс, на жаль, а взагалі було б цікаво

    patlatus

    Березень 23, 2016 at 19:32

    • Та, треба було писати .*🙂 Треба придумати як це краще організувати, бо онлайн – не дуже виходить, та й я і так забагато онлайн сиджу.

      bunyk

      Березень 27, 2016 at 17:23

  4. А що із вступом до логіки? (Я згодний, що там початок нуднуватий, але далі мені стало значно цікавіше).

    dmytrish

    Березень 24, 2016 at 13:56

    • Та пишу що ніяк закінчити не можу. Якраз початок подивився, дойшов до методу резолюцій, там щось відволікло. Треба було поки жив в гуртожитку кубика якийсь такий клуб організовувати.🙂

      bunyk

      Березень 27, 2016 at 17:27


Залишити відповідь

Заповніть поля нижче або авторизуйтесь клікнувши по іконці

Лого WordPress.com

Ви коментуєте, використовуючи свій обліковий запис WordPress.com. Log Out / Змінити )

Twitter picture

Ви коментуєте, використовуючи свій обліковий запис Twitter. Log Out / Змінити )

Facebook photo

Ви коментуєте, використовуючи свій обліковий запис Facebook. Log Out / Змінити )

Google+ photo

Ви коментуєте, використовуючи свій обліковий запис Google+. Log Out / Змінити )

З’єднання з %s

%d блогерам подобається це: