Tag Archives: Розмітка

Як склеїти всі pdf-файли в один?

Сьогодні дізнався команду яка допоможе коли наприклад дружина прислала тобі 5 сканів в файлах pdf, мережеве з’єднання до принтера не працює, принтер вміє друкувати файли з флешки, але вибираючи кожен файл поокремо в меню принтера можна стерти пальці, і хочеться спростити собі життя. Знайшов на AskUbuntu:

gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=all.pdf *

Плюси (для мене) цієї команди порівняно з іншими варіантами:

  • Виявилася вже встановлена на Ubuntu
  • gs (GhostScript) – це інтерпретатор екзотичної тюрінг-повної мови програмування PostScript, яка є чимось середнім між TeX та Forth. Завжди корисно як не вивчити нову мову то хоча б її штрикнути одним пальцем.
  • Автором цієї утиліти є чувак про якого я колись читав книжку і не одну.

Символи вікіпедії, детальніший аналіз

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

Загалом статті складаються з 3 613 435 448 символів, з яких різних 23 717. Вони розподілені так (намальовано лише початок розподілу, бо решта – неозрброєним оком не видно):

Ось таблиця найвживаніших 256, де спершу йде номер в рейтингу, потім символ, а останнє число – скільки раз він зустрічається. Якщо символ невидимий – то в дужках вказаний його номер в таблиці юнікоду:

1) пробіл (32) 442790853
2) а 160531292
3) о 157877564
4) н 138215454
5) і 117277229
6) р 105263631
7) и 98886082
8) е 88928818
9) т 87767363
10) | 80797095
11) в 78200503
12) с 75999527
13) ] 73604421
14) [ 73599732
15) л 70900301
16) к 69356359
17) новий рядок (10) 57091749
18) e 52089242
19) у 50198598
20) д 48912768
21) = 46361768
22) м 46138865
23) t 41512840
24) п 40914157
25) a 39627848
26) r 36179188
27) n 36087343
28) я 34788627
29) ь 33853333
30) . 32022232
31) s 31881844
32) i 30972299
33) з 30652689
34) o 30492305
35) 1 30006539
36) l 29367163
37) г 28746761
38) 0 27570049
39) й 26579527
40) - 24869609
41) ' 24751079
42) б 23634039
43) 2 21423701
44) , 21261521
45) / 20051917
46) c 19845819
47) p 19831300
48) ц 19183628
49) } 18895464
50) { 18889983
51) ч 18359390
52) d 17813691
53) b 16517162
54) 9 16240786
55) g 15262611
56) х 14936744
57) u 14902347
58) f 14303148
59) ї 13406838
60) h 13050086
61) m 12543340
62) < 12111655
63) : 12102999
64) > 12094377
65) ж 11923903
66) 3 10947193
67) 5 10647152
68) " 10484943
69) 4 10091884
70) w 9560852
71) К 9364738
72) П 9190333
73) 8 9177988
74) ю 9157643
75) ; 9037575
76) 6 8918805
77) С 8870091
78) ) 8867662
79) ( 8851064
80) ш 8821755
81) 7 8188158
82) ф 7340920
83) А 7166375
84) y 7039008
85) & 7006502
86) В 6869441
87) _ 6022842
88) М 5970386
89) є 5956858
90) k 5778567
91) Г 5745696
92) * 5712005
93) — 5519856
94) Л 4852833
95) S 4825612
96) Р 4712055
97) v 4646612
98) Н 4635296
99) Д 4580191
100) A 4422679
101) D 4409130
102) Т 4356396
103) щ 4143981
104) Б 4112548
105) У 4017973
106) R 3910061
107) Ф 3848824
108) I 3805943
109) « 3732952
110) » 3730320
111) C 3706725
112) О 3626277
113) E 3501507
114) P 3206479
115) І 3168901
116) F 3042662
117) З 2886284
118) L 2875664
119) T 2762480
120) % 2668723
121) B 2665154
122) M 2605927
123) N 2471967
124) G 2455406
125) # 2432361
126) x 2377037
127) ! 2307947
128) z 1683501
129) H 1652473
130) V 1627598
131) j 1580981
132) K 1542325
133) Ч 1534632
134) Х 1497880
135) U 1430170
136) Ш 1413847
137) O 1364521
138) Е 1326679
139) W 1071605
140) Ц 970737
141) – 873533
142) J 866094
143) ? 838918
144) Q 767843
145) Я 759389
146) Є 680158
147) X 636113
148) Y 617782
149) Ж 607830
150) ы 548375
151)   511929
152) Ю 503103
153) q 490449
154) + 467382
155) ́ 381075
156) \ 343889
157) 328026
158) Z 313673
159) ґ 293475
160) Й 286295
161) № 279189
162) é 263700
163) И 240639
164) Ґ 138039
165) ° 134968
166) ’ 129122
167) Щ 112586
168) ½ 92609
169) э 89526
170) … 88401
171) ó 87628
172) â 84646
173) ~ 75512
174) ü 67713
175) ^ 66068
176) ł 65770
177) Э 65262
178) ă 63282
179) á 62358
180) ъ 60515
181) ţ 60459
182) Ї 59899
183) • 58273
184) ² 57176
185) − 51293
186) × 51201
187) ё 50264
188) ä 49539
189) “ 47666
190) ö 47657
191) $ 46091
192) † 42959
193) ş 41864
194) è 41182
195) α 39774
196) í 38230
197) „ 34637
198) ο 34016
199) → 28048
200) ا 27473
201) · 26648
202) ‎ 26007
203) ν 24624
204) ń 24312
205) ι 24220
206) ę 24171
207) Ь 24064
208) ± 23585
209) ′ 23492
210) ” 23461
211) τ 23408
212) ș 23387
213) ς 23318
214) ρ 22519
215) š 21622
216) ś 21499
217) à 21334
218) ą 20463
219) ў 19269
220) ​ 18949
221) ε 18309
222) č 18232
223) @ 18014
224) É 17552
225) ç 17282
226) λ 17177
227) ل 16987
228) ³ 15756
229) σ 14667
230) κ 14317
231) ż 13948
232) η 13811
233) μ 12411
234) ر 12083
235) ي 11783
236) ā 11684
237) ñ 11460
238) م 11324
239) ć 11226
240) υ 11130
241) ن 11115
242) ß 10974
243) π 10708
244) ί 10461
245) ë 9850
246) ı 9824
247) ú 9761
248) ž 9598
249) ά 9572
250) ț 9284
251) γ 9152
252) ‘ 9122
253) ա 8975
254) ѣ 8947
255) و 8929
256) қ 8841

Ось вони ж, по групах:

Український алфавіт

2) а 160531292
3) о 157877564
4) н 138215454
5) і 117277229
6) р 105263631
7) и 98886082
8) е 88928818
9) т 87767363
11) в 78200503
12) с 75999527
15) л 70900301
16) к 69356359
19) у 50198598
20) д 48912768
22) м 46138865
24) п 40914157
28) я 34788627
29) ь 33853333
33) з 30652689
37) г 28746761
39) й 26579527
42) б 23634039
48) ц 19183628
51) ч 18359390
56) х 14936744
59) ї 13406838
65) ж 11923903
71) К 9364738
72) П 9190333
74) ю 9157643
77) С 8870091
80) ш 8821755
82) ф 7340920
83) А 7166375
86) В 6869441
88) М 5970386
89) є 5956858
91) Г 5745696
94) Л 4852833
96) Р 4712055
98) Н 4635296
99) Д 4580191
102) Т 4356396
103) щ 4143981
104) Б 4112548
105) У 4017973
107) Ф 3848824
112) О 3626277
115) І 3168901
117) З 2886284
133) Ч 1534632
134) Х 1497880
136) Ш 1413847
138) Е 1326679
140) Ц 970737
145) Я 759389
146) Є 680158
149) Ж 607830
152) Ю 503103
159) ґ 293475
160) Й 286295
163) И 240639
164) Ґ 138039
167) Щ 112586
182) Ї 59899
207) Ь 24064

Англійський алфавіт

18) e 52089242
23) t 41512840
25) a 39627848
26) r 36179188
27) n 36087343
31) s 31881844
32) i 30972299
34) o 30492305
36) l 29367163
46) c 19845819
47) p 19831300
52) d 17813691
53) b 16517162
55) g 15262611
57) u 14902347
58) f 14303148
60) h 13050086
61) m 12543340
70) w 9560852
84) y 7039008
90) k 5778567
95) S 4825612
97) v 4646612
100) A 4422679
101) D 4409130
106) R 3910061
108) I 3805943
111) C 3706725
113) E 3501507
114) P 3206479
116) F 3042662
118) L 2875664
119) T 2762480
121) B 2665154
122) M 2605927
123) N 2471967
124) G 2455406
126) x 2377037
128) z 1683501
129) H 1652473
130) V 1627598
131) j 1580981
132) K 1542325
135) U 1430170
137) O 1364521
139) W 1071605
142) J 866094
144) Q 767843
147) X 636113
148) Y 617782
153) q 490449
158) Z 313673

Цифри

35) 1 30006539
38) 0 27570049
43) 2 21423701
54) 9 16240786
66) 3 10947193
67) 5 10647152
69) 4 10091884
73) 8 9177988
76) 6 8918805
81) 7 8188158

Пунктуація

1) пробіл (32) 442790853
17) новий рядок (10) 57091749
10) | 80797095
13) ] 73604421
14) [ 73599732
21) = 46361768
30) . 32022232
40) – 24869609
41) ‘ 24751079
44) , 21261521
45) / 20051917
49) } 18895464
50) { 18889983
62) < 12111655
63) : 12102999
64) > 12094377
68) ” 10484943
75) ; 9037575
78) ) 8867662
79) ( 8851064
85) & 7006502
87) _ 6022842
92) * 5712005
93) — 5519856
109) « 3732952
110) » 3730320
120) % 2668723
125) # 2432361
127) ! 2307947
141) – 873533
143) ? 838918
151) нерозривний пробіл (160) 511929
154) + 467382
155) ́ 381075
156) \ 343889
157) TAB (9) 328026
161) № 279189
165) ° 134968
166) ’ 129122
168) ½ 92609
170) … 88401
173) ~ 75512
175) ^ 66068
183) • 58273
184) ² 57176
185) − 51293
186) × 51201
189) “ 47666
191) $ 46091
192) † 42959
197) „ 34637
199) → 28048
200) ا 27473
201) · 26648
202) символ зліва-направо 26007
208) ± 23585
209) ′ 23492
210) ” 23461
220) пробіл нульової довжини (8203) 18949
223) @ 18014
228) ³ 15756
252) ‘ 9122

Латиниця з наворотами

162) é 263700
171) ó 87628
172) â 84646
174) ü 67713
176) ł 65770
178) ă 63282
179) á 62358
181) ţ 60459
188) ä 49539
190) ö 47657
193) ş 41864
194) è 41182
196) í 38230
204) ń 24312
206) ę 24171
212) ș 23387
215) š 21622
216) ś 21499
217) à 21334
218) ą 20463
222) č 18232
224) É 17552
225) ç 17282
231) ż 13948
236) ā 11684
237) ñ 11460
239) ć 11226
242) ß 10974
245) ë 9850
246) ı 9824
247) ú 9761
248) ž 9598
250) ț 9284

Застарілі кириличні букви

150) ы 548375
169) э 89526
177) Э 65262
180) ъ 60515
187) ё 50264
219) ў 19269
254) ѣ 8947
256) қ 8841

Грецькі букви

195) α 39774
198) ο 34016
203) ν 24624
205) ι 24220
211) τ 23408
213) ς 23318
214) ρ 22519
221) ε 18309
226) λ 17177
229) σ 14667
230) κ 14317
232) η 13811
233) μ 12411
240) υ 11130
243) π 10708
244) ί 10461
249) ά 9572
251) γ 9152

Арабські

227) ل 16987
234) ر 12083
235) ي 11783
238) م 11324
241) ن 11115
255) و 8929

Вірменська

253) ա 8975

Парні символи

Минулого разу мені стало цікаво чому кількість дужок не співпадає. Може варто було б написати правильний алгоритм зі стеком, але я поки напевне спробую знайти статті де просто кількість дужок не співпадає аби подивитись в чому річ.

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

То отримаємо нескінченний потік помилок у всіх статтях:

Швеція Закриваюча дужка ] без відкриваючої до неї біля "eritage Foundation]]]:\n* ВВП&nbsp;— $ 24"
Сумська область До кінця сторінки не закриті наступні дужки [[
Тернопільська область Закриваюча дужка ] без відкриваючої до неї біля "ьні вечори. Дебют]]»]] (Тернопіль), міжн"
Теліга Олена Іванівна Закриваюча дужка ] без відкриваючої до неї біля "нього шкільного віку] / [[Анна Багряна]]"
Західний Буг До кінця сторінки не закриті наступні дужки [
Андрухович Юрій Ігорович Закриваюча дужка ] без відкриваючої до неї біля ". Літ, 29 січня 2013]</ref> були наведен"
Данило Галицький Закриваюча дужка } без відкриваючої до неї біля "а Романівна]] ({Пом}} після [[1241]]), о"
29 Закриваюча дужка } без відкриваючої до неї біля "377a.htm}}{{ref-en}}}</ref>\n\n== Народили"

Переважкно люди в джерелах ставлять зайву закриваючу квадратну, або забувають відкрити квадратну, тому що якось дуже недбало ставляться до оформлення джерел. Але тих помилок так багато що я не знаю як їх всіх виправити. 😦 Може варто написати якийсь лінтер для вікіпедії, який би про ці помилки авторам повідомляв?

Красиво друкуємо xml в термінал

XML то жахіття ще те, але іноді його таки треба читати, нікуди не дінешся. Аби зробити своє життя трішки кращим можна написати таке:

def pprint_xml(text):
    import xml.dom.minidom
    from pygments import highlight
    from pygments.lexers import XmlLexer
    from pygments.formatters import TerminalFormatter
    xml = xml.dom.minidom.parseString(text)
    print highlight(xml.toprettyxml(), XmlLexer(), TerminalFormatter())

Потребує pygments.

Разом з Інтроспектором та іншими утилітами для дебагу це вже тягне на якусь лібу. Напевне наступного тижня заведу собі таку десь на github.


Filed under: Кодерство, Розмітка Tagged: робота, Python

Журнальне програмування, JavaScript

Я вже якось писав що без написання коментарів можна обійтись, якщо використовувати рефакторинг “extract method”. Це не означає що коментарі не варто писати, це означає що їх потрібно писати на іншому рівні абстракції і бажано в мові предметної області. Як цього навчитись – складне питання. Щоправда недавно вичитав в пості Дмитра Сіренка на Google+ ідею про те що коментарі краще робити виводом в якийсь лог.

Ця ідея для мене нова і мені дуже сподобалась. По-перше це допоможе краще думати про що ж все таки писати в коментарі. Про те що відбувається:

Якби програмки мали Твіттер...

Якби програмки мали Твіттер…

А що ще краще – такі коментарі повинні сильно допомогти в розумінні коду JavaScript, тому що в JavaScript код виконується як реакція на якусь подію, тому передбачити що за чим виконуватиметься – важко. А при таких коментарях – відкрили термінал, і читаємо коментарі в хронологічному порядку виконання програми:

dragExcercise plugin started for Object[div.exercise, div.exercise] exercises.js (рядок 8)
heißen Ordnung exercises.js (рядок 22)
content put into element exercises.js (рядок 28)
incorrect variant exercises.js (рядок 35)
heißen mir exercises.js (рядок 22)
content put into element exercises.js (рядок 28)
incorrect variant exercises.js (рядок 35)
leaves some other element exercises.js (рядок 45)
mir mir exercises.js (рядок 22)
element already occupied exercises.js (рядок 24)

Так працює код вправ для інтерактивного підручника німецької.

Коментарі записуються як параметри функції c яка описується наступним чином:

    //var c = function() {}; // for production
    var c = console.log.bind(console); // for debug

З цим є дві проблеми. Перша – навіть якщо не забути про те що треба переставити комент, на продакшні буде зайвий виклик функції. Друга – функція підсвічується в редакторі як функція, а не як коментар. Другу можна виправити відредагувавши файл з описом синтаксису мови. Це просто. Першу проблему хотілось би виправити макросами в стилі С. З директивами IFDEBUG, та двома режимами білду – debug та release.

Проблеми можна проігнорувати, а можна подумати про препроцесор. Який коментарі виду

    //-> message

перетворюватиме на

    console.log('message');

в дебаг режимі, і прибиратиме їх з реліз версії коду. Але препроцесори вже є, наприклад той же CoffeScript. Тільки от не знаю чи важко на ньому таке реалізувати… Може варто спробувати зразу осідлати ClojureScript?


Filed under: Кодерство, Павутина, Розмітка Tagged: JavaScript, розробка

Дівчина-салат

Дівчина-салат – це робоча назва прототипу підручника німецької який я на тих вихідних створив, але все не мав нагоди про це написати.

Власне якби я був голлівудським продюсером, я б вже давно на додачу до людини-павука, людини-кажана, жінки-кішки і решти людей-гібридів зняв би “дівчину-салат”. Це історія про дівчинку яка народилась від того що її мама з’їла генетично-модифіковану рослину (а які ви думаєте ще можуть рости на городі у відьми?) з виду Valerianella locusta, також відому як Рапунцель. А вони зняли якусь “Заплутану історію”, яку я не дивився, зате, прочитав оригінал братів Грімм. Казка містить глибоку мораль, суть якої в тому, що коли дітей недостатньо виховали, то навіть якщо їх замкнути в вежі, це не допоможе.

Казочку я читав мовою оригіналу, і це перший текст німецькою який я осилив. Осилив я його активно заглядаючи в словник, і виглядало це ось так:

Рапунцель з нотатками

Рапунцель з нотатками

І під час того я постійно думав, що це взагалі мій улюблений спосіб вчитись, тому що це не нудно і швидко набирається словниковий запас. Але чи вчусь я, поки гортаю сторінки словника? Здається єдине чого я вчусь – швидше відкривати потрібну сторінку і швидше знаходити на ній слово. На запам’ятовування самого слова йде менше часу і це напевне не добре.

Тому я подумав, що класно було б мати книжки, де словник знаходиться прямо на тій сторінці яку я читаю. Як в Gerda malaperis! (коли з’явиться українська стаття, нагадайте замінити посилання, не соромтесь). Gerda malaperis звісно виняткова книжка, бо написана саме з навчальною метою і на жаль аналогічних я більше не знаю.

Ще я подумав що подібним чином можна адаптувати звичайні твори. І саме для цієї мети мають чудово підходити зноски які вміє робити LaTeX. Їх було так багато, що довелось застосувати деякі нестандартні модулі аби спростити нумерацію. А ще довелось застосувати XeTeX, він знає про Unicode-шрифти. Бо в звичайному TeX Live отримати одночасно німецькі умляути й кирилицю дуже важко.

Є ще метод Іллі Франка, але він мені чомусь не дуже йде, напевне тому що там дізнаватись значення слова занадто просто і я ловлю себе на тому що читаю не німецькою а російською, пропускаючи все що не в дужках.

Коментарі щодо мого розуміння німецької граматики (і української), підказки щодо вдосконалення оформлення видання (ось код для XeTeX, рев’ю можна робити як тут, так і прямо на Google Code) та інша критика вітається.


Filed under: Всяке, Конспекти, Розмітка Tagged: deutsch, книжки, освіта

Як встановити пакет LaTeX, та як зробити так щоб зноски починали нумеруватись на кожній сторінці заново?

Спочатку відповім на друге запитання, бо воно простіше. В заголовку документа прописуємо:

\usepackage{perpage}
\MakePerPage[1]{footnote}

Друга команда вказує на те що зноскам варто на кожній сторінці починати нумерацію з 1.

При компіляції документа може вилізти така помилка:

! LaTeX Error: File `perpage.sty' not found

Це означає що вам бракує встановленого пакета bigfoot.

Потрібно завантажити архів, розпакувати його, та запустити команду latex bigfoot.ins. Вона розпакує з файлу bigfoot.dtx інші файли.

Далі нам потрібен лише perpage.sty. Його треба скопіювати кудись, а щоб дізнатись куди, для TeX Live потрібно виконати таку команду:

bunyk@xubuntyk:~/bigfoot$ texhash
texhash: /usr/local/share/texmf: directory not writable. Skipping...
texhash: /var/lib/texmf: directory not writable. Skipping...
texhash: /var/lib/texmf: directory not writable. Skipping...
texhash: /var/lib/texmf: directory not writable. Skipping...
texhash: Done.

Я вибрав /usr/local/share/texmf і створив там шлях tex/latex/bigfoot. Куди й кинув файл perpage.sty (повний шлях /usr/local/share/texmf/tex/latex/bigfoot/perpage.sty).

Далі потрібно запустити:

bunyk@xubuntyk:~/bigfoot$ sudo texhash

Це все, документ скомпілювався і я досяг чого хотів, а якщо хочете, можете читати більше про встановлення пакетів.


Filed under: Кодерство, Розмітка Tagged: LaTeX

Відкрити браузер і передати йому html

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

Але це заморочливо. Тепер я вмію мокати smtplib і листи почнуть покриватись тестами. І тоді вже почнеться повне TDD і всім буде добре, бо розробники зможуть виправляти помилки ще до того як відправити їх тестерам.

Тільки от біда, що є речі які автоматичними тестами не покриваються. Наприклад треба переконатись що текст не вилазить за межі кнопочки шаблон якої зверстали наші круті стиляги-верстальщики.

Рішення яке використовую я – під час розробки показати html що генерується у браузері. Як у webtest може об’єкт responce.

Перед тим як щось робити самому я звичайно погуглив, і знайшов спосіб, який щоправда трохи застарілий. Потрібно хоча б заголовок Content-Type передавати, тому що його не задають в мета-тегу, а в заголовках формату MIME.

Власне ось сам код – веб-сервер в одній функції що відповідає на один запит:

import webbrowser
from wsgiref.simple_server import make_server
def show_in_browser(html):
        html = html.encode('utf-8')
        def wsgiapp(environ, start_response):
        headers = [('Content-type', 'text/html; charset=utf-8'),
                   ('Content-Length', str(len(html)))]
        start_response('200 OK', headers)
        return [html]

    # нульовий порт означає "знайди вільний сам"
    server = make_server('127.0.0.1', 0, wsgiapp)
    webbrowser.open('http://127.0.0.1:%s' % server.server_port)
    server.handle_request() # один запит

Мене на рев’ю запитали чому ж я не запишу html в тимчасовий файл? Видно я вже занадто веб-девелопер, бо раніше не знав як таке зробити. Зараз знаю як створити тимчасовий файл, але щось локальні файли відкриваються неадекватно. В текстовому редакторі.


Filed under: Кодерство, Розмітка Tagged: HTML, розробка, Python

Додзьо для регулярного ніндзя

Щойно вивчив чим відрізняється negative lookbehing від negative lookahead.

Шукав всі пітонівські файли які не є скомпільованими мако файлами що містять певний шаблон. В моєму випадку – всі місця в проекті, в яких рендериться вміст листів. Написав:

    :Ack -G "(?!\.mako)\.py$" "email/[_/\w\d]+\.mako"

Не знайшов. Бачите в чому помилка? Тут я використав lookahead, а треба було lookbehind. Lookbehind пишеться так:

    :Ack -G "(?<!\.mako)\.py$" "email/[_/\w\d]+\.mako"

Хто б подумав, що треба писати так. Але тепер я вже знаю :) . Ах, для тих хто не зрозумів що відбувається, ack – це типу grep.

І от в мене виникла ідея – взяти якось на вихідних і написати інтерактивний підручник регулярних виразів. Такий собі html-файлик, всередині якого в JSON записано набір уроків в такому форматі:

[
    {
        'Назва': "...",
        'Текст уроку': "...",
        'Вправи': [
            {
                'Умова': "...",
                'Корпус тексту': "...",
                'Тип вправи': 1, # пошук/заміна
                'Підрядки що потрібно отримати з домогою виразу': ["...", ...],  # якщо пошук
                'Текст що потрібно отримати в результаті': "...", # якщо заміна
                'Бали': XP, 
            },
            ...
        ]
    },
    ...
]

І тебе пускають до наступного коли ти набрав необхідну кількість балів на попередньому.

Тепер розшукую regexp – гуру, jQuery – гуру, гуру верстки, і технічних письменників (чи просто літературних редакторів) які б це все допомогли реалізувати.


Filed under: Кодерство, Павутина, Розмітка Tagged: JavaScript, розробка, цілі