https://wiki.4intra.net/api.php?action=feedcontributions&user=VitaliyFilippov&feedformat=atom
Wiki4Intranet - User contributions [en]
2024-03-28T12:54:12Z
User contributions
MediaWiki 1.26.4
https://wiki.4intra.net/index.php?title=Bugzilla4Intranet/C&diff=8045
Bugzilla4Intranet/C
2023-11-04T07:54:24Z
<p>VitaliyFilippov: Undo revision 7967 by SEO TROLLING (talk)</p>
<hr />
<div><tt><span title="Доработки, специфичные для практик CustIS" class="bz_custis_specific" style="background-color: #800; color: white">&nbsp;C&nbsp;</span>&nbsp;</tt></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Bugzilla4Intranet/S&diff=8044
Bugzilla4Intranet/S
2023-11-04T07:53:18Z
<p>VitaliyFilippov: VitaliyFilippov moved page Bugzilla4Intranet/ to Bugzilla4Intranet/S without leaving a redirect</p>
<hr />
<div><tt><span title="Доработки поиска, отчётов и групповых операций" class="bz_search_feature" style="background-color: red; color: white">&nbsp;S&nbsp;</span>&nbsp;</tt></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Template:!&diff=8043
Template:!
2023-11-04T07:51:33Z
<p>VitaliyFilippov: Reverted edits by SEO TROLLING (talk) to last revision by StasFomin</p>
<hr />
<div><span style="color:blue; font-size:150%">{{{1}}}</span></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=SeminarAssembler&diff=8041
SeminarAssembler
2023-11-04T07:50:33Z
<p>VitaliyFilippov: VitaliyFilippov moved page Двери окна Майкоп купить to SeminarAssembler over a redirect without leaving a redirect</p>
<hr />
<div><slideshow title="SeminarAssembler" style="4intra" scaled="true" font="Calibri, Segoe Print, cursive" footer="" headingmark=".-." /><br />
<br />
SeminarAssembler™ — это инструмент для эффективного монтажа семинаров, докладов и прочего образовательного видео, <br />
когда важно сшивать несколько разных источников — несколько камер, скринкасты, слайды, и делать это очень быстро и много.<br />
(примеры видео см. в http://lib.custis.ru/it-talks).<br />
<br />
;Введение:<br />
{{vimeoembed|48092918|800|500}}<br />
<br />
Далее см<br />
[[:Category:Курс «Видео на конвеере»]]<br />
[[Category:Курс «Видео на конвеере»]]<br />
<br />
<br />
== SeminarAssembler: WTF? .-. ==<br />
<br />
[[File:SeminarAssembler — заставка.svg|right|thumb|400px]]<br />
<br />
Фреймворк быстрого видеомонтажа<br />
* семинаров.<br />
* докладов<br />
* лекций<br />
* конференций<br />
* вебинаров<br />
<br />
Когда:<br />
* несколько потоков:<br />
** камеры<br />
** скринкасты<br />
** слайды<br />
* надо много и быстро<br />
<br />
----<br />
+ Автоматическая конверсия медиаформатов, с правкой размеров/скорости.<br />
<br />
=== Этимология: Seminar .-. ===<br />
<br />
* {{!|Длинное}}<br />
* {{!|Образовательное}}<br />
* Информационно плотное<br />
* {{!|Активный зритель}}<br />
* не → {{@|Развлекалово}}, {{@|Свадьбы}}, …<br />
<br />
----<br />
[http://www.youtube.com/watch?v=vV-GL6KMH5M «Видео на конвеере»/SWP-2012]<br />
<br />
=== Образовательное видео? ===<br />
Что такое правильное обучающее IT-видео, как его смотреть, и немного — как готовить, см<br />
мой доклад на Software People-2012:<br />
{{youtubeembed|vV-GL6KMH5M|854|480}}<br />
<br />
=== Этимология: Assembler .-. ===<br />
;«Сборка»:<br />
** Множества гетерогенных медиапотоков:<br />
*** Камер<br />
*** Скринкастов<br />
*** Слайдов<br />
*** Переговоров (скайп, IM…).<br />
** [[Screen2Log]]-cкринкастов из блоков<br />
<br />
;Ассемблер:<br />
* «Двухтермовый, строчный» DSL для программирования сцен:<br />
<pre><br />
WIDTH 1280<br />
HEIGHT 720<br />
TRANSITION RandomTrans<br />
TITLE «Введение в технологию Enterprise Forms»<br />
00:01:09 S<br />
00:08:16<br />
00:09:09 S<br />
00:17:21<br />
</pre><br />
<br />
<br />
=== Оно надо? .-. ===<br />
<br />
{{SideBar40|{{@|Перегруженность}}, {{@|Мелкая мышиная моторика}}, {{@|Неавтоматизируемость}}, {{@|Ремесло}}, {{@|Немасштабируемость}}… }}<br />
[[File:Пример видеоредактора 01.jpg|256px]]<br />
[[File:Пример видеоредактора 02.jpg|256px]]<br />
[[File:Пример видеоредактора 03.jpg|256px]]<br />
[[File:Пример видеоредактора 04.jpg|256px]]<br />
[[File:Пример видеоредактора 05.png|256px]]<br />
[[File:Пример видеоредактора 06.jpg|256px]]<br />
<br />
=== Кому? .-. ===<br />
[[File:Статистика объема снятого и смонтированного видео в CUSTIS.svg|right|640px]]<br />
<br />
* Программистам<br />
* Тестировщикам<br />
* {{!|Advanced Users}}<br />
<br />
Требующим эффективность!<br />
<br />
Понимающим, что такое:<br />
* Файл<br />
* Код<br />
* Проект<br />
* Сборка<br />
<br />
== Основная идея .-. ==<br />
[[File:Идея SeminarAssembler.svg|center|800px]]<br />
<br />
=== Матрешка .-. ===<br />
<br />
[[File:Matroska._Выбор_видеопотока.png|512px]]<br />
[[File:Просмотр_Matroska_с_UTD._Пример_с_флипчартом.png|480px]]<br />
[[File:Просмотр_Matroska_с_UTD._Пример_с_Баранцевым,_01.png|480px]]<br />
<br />
== Принципы .-. ==<br />
<br />
[[File:wysiwym.svg|right|256px]]<br />
<br />
* Agile-видеомонтаж <br />
** Быстрая draft-версия ({{!|матрешка}}!)<br />
** Инкрементальные улучшения<br />
<br />
* WYSIWYM — What You See Is What You Mean<br />
** Максимальная компактность и гибкость:<br />
*** Краткий код + дизайн-шаблоны<br />
*** Целостность<br />
*** Коллаборативный видеомонтаж<br />
<br />
{{SideBar40|If the product is used as a tool, its interface should be as unintelligent as possible. Stupid is predictable; predictable is learnable; learnable is usable. [http://unqualified-reservations.blogspot.ru/2009/07/wolfram-alpha-and-hubristic-user.html ©]}}<br />
<br />
<br />
* Сборка<br />
** Автоматизируемая<br />
** Инкрементальное обновление<br />
** Переносимость проекта ({{@|абсолютные пути в видеоредакторах}})<br />
** Прозрачность<br />
** Масштабируемая<br />
*** Сборка/по сети <br />
**** вся [ночная]-мощь компьютеров компании.<br />
<br />
* Free & open-source.<br />
<br />
== НеВелосипед .-. ==<br />
{{SideBar40|User Experience:<br />
* {{!|Reuse}} имеющийся<br />
* Приобретается {{!|полезный}}<br />
* свой UI {{!|минимален}}}}<br />
<br />
Использует:<br />
* <tt>ffmpeg</tt><br />
* <tt>Virtual Dub</tt><br />
* <tt>inkscape</tt><br />
* <tt>AVISynth</tt><br />
* <tt>SOX</tt><br />
* <tt>Sonic Visualizer</tt><br />
* <tt>mkvtools</tt><br />
<br />
Опционально:<br />
* VLC<br />
<br />
=== AVISynth .-. ===<br />
<br />
<pre style="font-size:75%"><br />
-------------------------------------------------------------------------------<br />
Language files blank comment code scale 3rd gen. equiv<br />
-------------------------------------------------------------------------------<br />
C++ 293 7375 8416 13858 x 1.51 = 20925.58<br />
C/C++ Header 493 12178 14871 13358 x 1.00 = 13358.00<br />
C 41 1650 2113 6955 x 0.77 = 5355.35<br />
Bourne Shell 7 276 844 4350 x 3.81 = 16573.50<br />
m4 14 95 52 1558 x 1.00 = 1558.00<br />
make 5 250 506 1314 x 2.50 = 3285.00<br />
Assembly 4 115 178 524 x 0.25 = 131.00<br />
HTML 5 1 5 439 x 1.90 = 834.10<br />
CSS 2 8 0 258 x 1.00 = 258.00<br />
Teamcenter def 2 2 0 8 x 1.00 = 8.00<br />
-------------------------------------------------------------------------------<br />
SUM: 866 21950 26985 42622 x 1.46 = 62286.53<br />
-------------------------------------------------------------------------------<br />
</pre><br />
<br />
=== FFMPEG .-. ===<br />
<br />
{{SideBar|Фабрис Беллар!}}<br />
<pre style="font-size:75%"><br />
--------------------------------------------------------------------------------<br />
Language files blank comment code scale 3rd gen. equiv<br />
--------------------------------------------------------------------------------<br />
C 1302 66172 57266 427936 x 0.77 = 329510.72<br />
C/C++ Header 534 9431 29244 98369 x 1.00 = 98369.00<br />
Assembly 94 3830 4119 38673 x 0.25 = 9668.25<br />
D 1002 0 0 13844 x 1.70 = 23534.80<br />
Bourne Shell 30 692 375 4920 x 3.81 = 18745.20<br />
make 31 233 27 2175 x 2.50 = 5437.50<br />
CSS 1 201 57 839 x 1.00 = 839.00<br />
C++ 3 132 122 782 x 1.51 = 1180.82<br />
Perl 1 59 61 310 x 4.00 = 1240.00<br />
XSD 1 21 4 147 x 1.90 = 279.30<br />
Bourne Again Shell 1 11 3 44 x 3.81 = 167.64<br />
HTML 2 5 0 19 x 1.90 = 36.10<br />
--------------------------------------------------------------------------------<br />
SUM: 3002 80787 91278 588058 x 0.83 = 489008.33<br />
--------------------------------------------------------------------------------<br />
</pre><br />
<br />
=== Inkscape .-. ===<br />
[[File:Inkscape Logo.svg|right|256px]]<br />
<br />
<pre><br />
--------------------------------------------------------------------------------<br />
Language files blank comment code scale 3rd gen. equiv<br />
--------------------------------------------------------------------------------<br />
C++ 827 60449 61764 303558 x 1.51 = 458372.58<br />
C/C++ Header 1097 32918 58698 87517 x 1.00 = 87517.00<br />
HTML 9 7522 8 39778 x 1.90 = 75578.20<br />
Python 225 5901 5593 29601 x 4.20 = 124324.20<br />
C 45 5866 5935 26246 x 0.77 = 20209.42<br />
Java 494 4040 12449 11088 x 1.36 = 15079.68<br />
XML 24 1728 1252 6494 x 1.90 = 12338.60<br />
XSLT 14 580 1096 6352 x 1.90 = 12068.80<br />
Javascript 5 548 635 2598 x 1.48 = 3845.04<br />
Perl 14 460 353 1889 x 4.00 = 7556.00<br />
make 39 193 91 1586 x 2.50 = 3965.00<br />
Bourne Shell 22 272 379 1439 x 3.81 = 5482.59<br />
m4 6 152 117 1080 x 1.00 = 1080.00<br />
CSS 2 32 32 216 x 1.00 = 216.00<br />
DOS Batch 3 36 5 182 x 0.63 = 114.66<br />
Ruby 1 26 32 149 x 4.20 = 625.80<br />
Teamcenter def 3 1 0 91 x 1.00 = 91.00<br />
Expect 1 18 0 56 x 2.00 = 112.00<br />
Bourne Again Shell 1 12 3 48 x 3.81 = 182.88<br />
DTD 1 5 1 27 x 1.90 = 51.30<br />
--------------------------------------------------------------------------------<br />
SUM: 2833 120759 148443 519995 x 1.59 = 828810.75<br />
--------------------------------------------------------------------------------<br />
</pre><br />
<br />
=== VLC .-. ===<br />
<br />
<pre><br />
-------------------------------------------------------------------------------<br />
Language files blank comment code scale 3rd gen. equiv<br />
-------------------------------------------------------------------------------<br />
C 763 58578 56901 302733 x 0.77 = 233104.41<br />
C/C++ Header 662 14905 32261 66771 x 1.00 = 66771.00<br />
C++ 254 12867 11783 64379 x 1.51 = 97212.29<br />
Bourne Shell 35 12176 5895 49867 x 3.81 = 189993.27<br />
Objective C 46 4575 2896 25531 x 2.96 = 75571.76<br />
m4 40 1596 774 15645 x 1.00 = 15645.00<br />
Javascript 8 310 777 9469 x 1.48 = 14014.12<br />
make 153 917 1278 7653 x 2.50 = 19132.50<br />
Lua 52 785 433 5160 x 4.00 = 20640.00<br />
XML 12 67 148 1541 x 1.90 = 2927.90<br />
HTML 17 31 154 1425 x 1.90 = 2707.50<br />
CSS 4 87 181 994 x 1.00 = 994.00<br />
Assembly 9 140 48 958 x 0.25 = 239.50<br />
MUMPS 2 115 0 565 x 4.21 = 2378.65<br />
DTD 1 5 6 327 x 1.90 = 621.30<br />
Visual Basic 2 75 121 272 x 2.76 = 750.72<br />
Python 1 55 66 213 x 4.20 = 894.60<br />
MATLAB 1 29 0 124 x 4.00 = 496.00<br />
Perl 2 16 26 112 x 4.00 = 448.00<br />
vim script 1 4 33 83 x 3.00 = 249.00<br />
sed 2 0 0 16 x 4.00 = 64.00<br />
-------------------------------------------------------------------------------<br />
SUM: 2067 107333 113781 553838 x 1.34 = 744855.52<br />
-------------------------------------------------------------------------------<br />
</pre><br />
<br />
<br />
=== SeminarAssembler .-. ===<br />
<br />
<pre style="font-size:75%"><br />
-------------------------------------------------------------------------------<br />
Language files blank comment code scale 3rd gen. equiv<br />
-------------------------------------------------------------------------------<br />
Python 27 518 569 1882 x 4.20 = 7904.40<br />
HTML 1 55 78 238 x 1.90 = 452.20<br />
Lua 1 6 5 33 x 4.00 = 132.00<br />
DOS Batch 1 0 0 1 x 0.63 = 0.63<br />
-------------------------------------------------------------------------------<br />
SUM: 30 579 652 2154 x 3.94 = 8489.23<br />
-------------------------------------------------------------------------------<br />
</pre><br />
<br />
* Интеграция<br />
** Местами хаки<br />
* Отлов багов (2 ffmpeg-а)<br />
* Поиск надежного и безопасного пути<br />
<br />
== Машина Сборки.-. ==<br />
<br />
=== Алгебра операций .-. ===<br />
<br />
<graph><br />
digraph G{<br />
node[fontname="Consolas" fontsize=8 shape=note];<br />
edge[fontname="Calibry" fontsize=8 fontcolor=blue dir=back]<br />
rankdir=LR;<br />
<br />
"cam.avi.mp3" [style=filled fillcolor=lightgrey]<br />
"cam.avi" [style=filled fillcolor=yellow]<br />
"cam.avi.mp3" -> "cam.avi" [label="parent" style=solid color=darkblue ]<br />
}<br />
</graph><br />
<br />
=== Параметры преобразования .-. ===<br />
<br />
<graph><br />
digraph G{<br />
node[fontname="Consolas" fontsize=8 shape=note];<br />
edge[fontname="Calibry" fontsize=8 fontcolor=blue dir=back]<br />
rankdir=TB;<br />
<br />
"1105-scaling-scrum-distributed-team-wolfson.avs.avi$speed=130,width=800,height=480,size=200m.avi" [style=filled fillcolor=lightgrey]<br />
"1105-scaling-scrum-distributed-team-wolfson.avs.avi" [style=filled fillcolor=lightgrey]<br />
"1105-scaling-scrum-distributed-team-wolfson.avs.avi$speed=130,width=800,height=480,size=200m.avi" -> "1105-scaling-scrum-distributed-team-wolfson.avs.avi" [label="parent" style=solid color=darkblue ]<br />
"1105-scaling-scrum-distributed-team-wolfson.avs.avi" [style=filled fillcolor=lightgrey]<br />
"1105-scaling-scrum-distributed-team-wolfson.avs.avi" -> "1105-scaling-scrum-distributed-team-wolfson.avs" [label="parent" style=solid color=darkblue ]<br />
}<br />
</graph><br />
<br />
<br />
=== Типы файлов .-. ===<br />
<br />
{{SideBar40|<br />
;Видео: AVI, MP4, …<br />
;Аудио: WAV, MP3, …<br />
<br />
;AVIISYNTH-скрипты: AVS<br />
;Матрешки: MKV, …<br />
;Описание матрешки: UNCUT (YAML)<br />
<br />
;Python-скрипты: PY<br />
;Верстка:SVG<br />
;Сценарии: SCENARIO<br />
<br />
;Задания: .sajobs<br />
}}<br />
<br />
<graph><br />
digraph G{<br />
<br />
edge [color="blue" style=solid]<br />
node [shape=box3d style=filled fillcolor=yellow fontname="Calibri"]<br />
<br />
"Видео" -> "Аудио"<br />
"AVS" [fontsize=32 fontcolor=blue]<br />
"AVS" -> "Видео"<br />
"AVS" -> "Аудио"<br />
<br />
"PY" -> "AVS"<br />
"SVG" -> "AVS"<br />
<br />
"UNCUT" -> "MKV"<br />
<br />
"SCENARIO" -> "AVS"<br />
<br />
<br />
edge [color="green" style=dotted ]<br />
<br />
"UNCUT" -> "Видео"<br />
"UNCUT" -> "Аудио"<br />
<br />
"AVS" -> "AVS"<br />
"SVG" -> "AVS"<br />
<br />
"SCENARIO" -> "AVS"<br />
"SCENARIO" -> "SVG"<br />
<br />
"AVS" -> "Видео"<br />
"AVS" -> "Аудио"<br />
<br />
"SAJOBS" -> "Видео"<br />
"SAJOBS" -> "Аудио"<br />
}<br />
</graph><br />
<br />
=== Зависимости .-. ===<br />
<br />
<graph><br />
digraph G{<br />
node[fontname="Consolas" fontsize=8 shape=note];<br />
edge[fontname="Calibry" fontsize=8 fontcolor=blue dir=back]<br />
rankdir=TB;<br />
<br />
"audio.avs" -> "audio.wav" [label="includes" style=dashed color=lightblue ]<br />
"start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"start_time.py.avs" -> "start_time.py" [label="parent" style=solid color=darkblue ]<br />
"start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"audio.avs" -> "start_time.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"../../lib/lib.avs" -> "../../lib/cachemode.avs" [label="includes" style=dashed color=lightblue ]<br />
"common.avs" -> "../../lib/lib.avs" [label="includes" style=dashed color=lightblue ]<br />
"audio.avs$ss=1200,len=300.wav" [style=filled fillcolor=lightgrey]<br />
"audio.avs$ss=1200,len=300.wav" -> "audio.avs" [label="parent" style=solid color=darkblue ]<br />
"audio.avs" -> "common.avs" [label="includes" style=dashed color=lightblue ]<br />
"../../lib/lib.avs" -> "../../lib/debugmode.avs" [label="includes" style=dashed color=lightblue ]<br />
}<br />
</graph><br />
<br />
=== Сборка «Матрешки» .-. ===<br />
<graph><br />
digraph G{<br />
node[fontname="Consolas" fontsize=8 shape=note];<br />
edge[fontname="Calibry" fontsize=8 fontcolor=blue dir=back]<br />
rankdir=TB;<br />
<br />
"../sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/cam1/video.avs" -> "../sources/cam1/source.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"2012-08-08-test.uncut.mkv" [style=filled fillcolor=lightgrey]<br />
"2012-08-08-test.uncut.mkv" -> "2012-08-08-test.uncut" [label="parent" style=solid color=darkblue ]<br />
"../sources/screen1/video.avs$vbitrate=800.avi" [style=filled fillcolor=lightgrey]<br />
"../sources/screen1/video.avs$vbitrate=800.avi" -> "../sources/screen1/video.avs" [label="parent" style=solid color=darkblue ]<br />
"../sources/cam1/video.avs$vbitrate=700.avi" [style=filled fillcolor=lightgrey]<br />
"../sources/cam1/video.avs$vbitrate=700.avi" -> "../sources/cam1/video.avs" [label="parent" style=solid color=darkblue ]<br />
"../sources/cam1/video.avs" -> "../sources/cam1/videofilters.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/cam1/sa-sample-camera.avi" [style=filled fillcolor=yellow]<br />
"../sources/cam1/source.py.avs" -> "../sources/cam1/sa-sample-camera.avi" [label="includes" style=dashed color=lightblue ]<br />
"../sources/screen1/common.avs" -> "../lib/lib.avs" [label="includes" style=dashed color=lightblue ]<br />
"../lib/lib.avs" -> "../lib/debugmode.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/screen1/start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/screen1/start_time.py.avs" -> "../sources/screen1/start_time.py" [label="parent" style=solid color=darkblue ]<br />
"../sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/screen1/source.py.avs" -> "../sources/screen1/common.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/cam1/start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/cam1/start_time.py.avs" -> "../sources/cam1/start_time.py" [label="parent" style=solid color=darkblue ]<br />
"../sources/cam1/video.avs" -> "../sources/cam1/common.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/cam1/start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/cam1/video.avs" -> "../sources/cam1/start_time.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/screen1/video.avs" -> "../sources/screen1/source.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/cam1/source.py.avs" -> "../sources/cam1/source.py" [label="parent" style=solid color=darkblue ]<br />
"../lib/lib.avs" -> "../lib/cachemode.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/cam1/sa-sample-camera.avi.meta" [style=filled fillcolor=lightgrey]<br />
"../sources/cam1/sa-sample-camera.avi" [style=filled fillcolor=yellow]<br />
"../sources/cam1/sa-sample-camera.avi.meta" -> "../sources/cam1/sa-sample-camera.avi" [label="parent" style=solid color=darkblue ]<br />
"../sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/cam1/source.py.avs" -> "../sources/cam1/common.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/screen1/start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/screen1/video.avs" -> "../sources/screen1/start_time.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/screen1/video.avs" -> "../sources/screen1/common.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/cam1/common.avs" -> "../lib/lib.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/cam1/sa-sample-camera.avi.meta" [style=filled fillcolor=lightgrey]<br />
"../sources/cam1/source.py" -> "../sources/cam1/sa-sample-camera.avi.meta" [label="includes" style=dashed color=lightblue ]<br />
"../sources/screen1/video.avs$vbitrate=800.avi" [style=filled fillcolor=lightgrey]<br />
"2012-08-08-test.uncut" -> "../sources/screen1/video.avs$vbitrate=800.avi" [label="includes" style=dashed color=lightblue ]<br />
"../sources/screen1/sa-sample-screencast.avi.meta" [style=filled fillcolor=lightgrey]<br />
"../sources/screen1/sa-sample-screencast.avi" [style=filled fillcolor=yellow]<br />
"../sources/screen1/sa-sample-screencast.avi.meta" -> "../sources/screen1/sa-sample-screencast.avi" [label="parent" style=solid color=darkblue ]<br />
"../sources/screen1/sa-sample-screencast.avi.meta" [style=filled fillcolor=lightgrey]<br />
"../sources/screen1/source.py" -> "../sources/screen1/sa-sample-screencast.avi.meta" [label="includes" style=dashed color=lightblue ]<br />
"../sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/screen1/source.py.avs" -> "../sources/screen1/source.py" [label="parent" style=solid color=darkblue ]<br />
"../sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/screen1/sa-sample-screencast.avi" [style=filled fillcolor=yellow]<br />
"../sources/screen1/source.py.avs" -> "../sources/screen1/sa-sample-screencast.avi" [label="includes" style=dashed color=lightblue ]<br />
"../sources/cam1/video.avs$vbitrate=700.avi" [style=filled fillcolor=lightgrey]<br />
"2012-08-08-test.uncut" -> "../sources/cam1/video.avs$vbitrate=700.avi" [label="includes" style=dashed color=lightblue ]<br />
}<br />
</graph><br />
<br />
<br />
=== Сборка видео с версткой .-. ===<br />
<br />
<graph><br />
<br />
digraph G{<br />
node[fontname="Consolas" fontsize=8 shape=note];<br />
edge[fontname="Calibry" fontsize=8 fontcolor=blue dir=back]<br />
rankdir=TB;<br />
<br />
"scenes/default.scenario.avs" [style=filled fillcolor=lightgrey]<br />
"scenes/default.scenario.avs" -> "sources/cam1/video.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/cam1/source.py.avs" -> "sources/cam1/source.py" [label="parent" style=solid color=darkblue ]<br />
"sources/cam1/video.avs" -> "sources/cam1/common.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/screen1/common.avs" -> "lib/lib.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/cam1/audio.avs" -> "sources/cam1/start_time.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"scenes/common.avs" -> "lib/lib.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/screen1/screen.x264.avi.meta" [style=filled fillcolor=lightgrey]<br />
"sources/screen1/source.py" -> "sources/screen1/screen.x264.avi.meta" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/cam1/start_time.py.avs" -> "sources/cam1/start_time.py" [label="parent" style=solid color=darkblue ]<br />
"2010-09-22-oss-golden-mean-fomin.avs.avi" [style=filled fillcolor=lightgrey]<br />
"2010-09-22-oss-golden-mean-fomin.avs.avi" -> "2010-09-22-oss-golden-mean-fomin.avs" [label="parent" style=solid color=darkblue ]<br />
"sources/cam1/video.avs" -> "sources/cam1/videofilters.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/cam.avi.meta" [style=filled fillcolor=lightgrey]<br />
"sources/cam1/cam.avi" [style=filled fillcolor=yellow]<br />
"sources/cam1/cam.avi.meta" -> "sources/cam1/cam.avi" [label="parent" style=solid color=darkblue ]<br />
"sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/screen1/screen.x264.avi" [style=filled fillcolor=yellow]<br />
"sources/screen1/source.py.avs" -> "sources/screen1/screen.x264.avi" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/cam1/video.avs" -> "sources/cam1/source.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/cam1/video.avs" -> "sources/cam1/start_time.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/screen1/video.avs" -> "sources/screen1/common.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/cam1/cam.avi" [style=filled fillcolor=yellow]<br />
"sources/cam1/source.py.avs" -> "sources/cam1/cam.avi" [label="includes" style=dashed color=lightblue ]<br />
"lib/lib.avs" -> "lib/debugmode.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/common.avs" -> "lib/lib.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/screen1/start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/screen1/video.avs" -> "sources/screen1/start_time.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/screen1/start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/screen1/start_time.py.avs" -> "sources/screen1/start_time.py" [label="parent" style=solid color=darkblue ]<br />
"sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/screen1/video.avs" -> "sources/screen1/source.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"scenes/default.scenario.avs" [style=filled fillcolor=lightgrey]<br />
"scenes/default.scenario.avs" -> "scenes/default.scenario" [label="parent" style=solid color=darkblue ]<br />
"sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/screen1/source.py.avs" -> "sources/screen1/source.py" [label="parent" style=solid color=darkblue ]<br />
"sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/cam1/audio.avs" -> "sources/cam1/source.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/audio.avs" -> "sources/cam1/common.avs" [label="includes" style=dashed color=lightblue ]<br />
"scenes/default.scenario.avs" [style=filled fillcolor=lightgrey]<br />
"2010-09-22-oss-golden-mean-fomin.avs" -> "scenes/default.scenario.avs" [label="includes" style=dashed color=lightblue ]<br />
"scenes/default.scenario.avs" [style=filled fillcolor=lightgrey]<br />
"scenes/default.scenario.avs" -> "scenes/common.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/cam.avi.meta" [style=filled fillcolor=lightgrey]<br />
"sources/cam1/source.py" -> "sources/cam1/cam.avi.meta" [label="includes" style=dashed color=lightblue ]<br />
"sources/screen1/screen.x264.avi.meta" [style=filled fillcolor=lightgrey]<br />
"sources/screen1/screen.x264.avi" [style=filled fillcolor=yellow]<br />
"sources/screen1/screen.x264.avi.meta" -> "sources/screen1/screen.x264.avi" [label="parent" style=solid color=darkblue ]<br />
"lib/lib.avs" -> "lib/cachemode.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/screen1/source.py.avs" -> "sources/screen1/common.avs" [label="includes" style=dashed color=lightblue ]<br />
"scenes/default.scenario.avs" [style=filled fillcolor=lightgrey]<br />
"scenes/default.scenario.avs" -> "sources/cam1/audio.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/cam1/source.py.avs" -> "sources/cam1/common.avs" [label="includes" style=dashed color=lightblue ]<br />
"scenes/default.scenario.avs" [style=filled fillcolor=lightgrey]<br />
"scenes/default.scenario.avs" -> "sources/screen1/video.avs" [label="includes" style=dashed color=lightblue ]<br />
}<br />
</graph><br />
<br />
== Интерфейс .-. ==<br />
<br />
=== Текстово-файловый .-. ===<br />
<br />
[[File:FAR 4 SA.png|center]]<br />
<br />
<br />
=== Command line .-. ===<br />
{{SideBar40|Like <tt>svn</tt>/<tt>hg</tt>/<tt>git</tt>…}}<br />
<br />
{{:SeminarAssembler/Command-line/Схема}}<br />
<br />
=== WYSIWYM .-. ===<br />
<br />
[[File:wysiwym.svg]]<br />
<br />
<br />
=== Синхронизация .-. ===<br />
<br />
[[File:SA синхронизация по звуку.png|center]]<br />
<br />
== Инсталляция .-. ==<br />
;Необходимо:<br />
* [http://avisynth.org/ AVISynth, 32bit], >= 2.6.0<br />
* Скачать [[/Builds|SA.EXE]], положить в любой каталог, включенный в PATH.<br />
<br />
;Очень желательно, практически обязательно, если не уверены в обратном (для видеоверстки):<br />
* Кодек [http://sourceforge.net/projects/x264vfw/files/x264vfw/ x264vfw] 32-бит (даже, если Win764bit)<br />
** Другие кодеки по источникам ([[MiniDV2AVI|Cedocida]] для DV и т.п.).<br />
* [http://inkscape.org Inkscape]<br />
* [[VLC]]<br />
<br />
<br />
<br />
;Рекомендую:<br />
** [[ConferenceRecorder]] или просто [[Screen2Log]] для скринкастов.<br />
<br />
== Исходники .-.==<br />
* http://abf.io/belonesox/seminar-assembler/<br />
<br />
== Обратная связь ==<br />
Багрепорты можно слать на [https://bugs.launchpad.net/seminar-assembler/+filebug ланчпад], или по [mailto:stas-fomin@yandex.ru email].<br />
Вопросы, замечания, предложения → туда же.</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Talk:SeminarAssembler&diff=8042
Talk:SeminarAssembler
2023-11-04T07:50:33Z
<p>VitaliyFilippov: VitaliyFilippov moved page Talk:Двери окна Майкоп купить to Talk:SeminarAssembler over a redirect without leaving a redirect</p>
<hr />
<div>#REDIRECT [[Talk:SeminarAssembler.OLD]]</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=SeminarAssembler&diff=8040
SeminarAssembler
2023-11-04T07:50:21Z
<p>VitaliyFilippov: Reverted edits by SEO TROLLING (talk) to last revision by StasFomin</p>
<hr />
<div><slideshow title="SeminarAssembler" style="4intra" scaled="true" font="Calibri, Segoe Print, cursive" footer="" headingmark=".-." /><br />
<br />
SeminarAssembler™ — это инструмент для эффективного монтажа семинаров, докладов и прочего образовательного видео, <br />
когда важно сшивать несколько разных источников — несколько камер, скринкасты, слайды, и делать это очень быстро и много.<br />
(примеры видео см. в http://lib.custis.ru/it-talks).<br />
<br />
;Введение:<br />
{{vimeoembed|48092918|800|500}}<br />
<br />
Далее см<br />
[[:Category:Курс «Видео на конвеере»]]<br />
[[Category:Курс «Видео на конвеере»]]<br />
<br />
<br />
== SeminarAssembler: WTF? .-. ==<br />
<br />
[[File:SeminarAssembler — заставка.svg|right|thumb|400px]]<br />
<br />
Фреймворк быстрого видеомонтажа<br />
* семинаров.<br />
* докладов<br />
* лекций<br />
* конференций<br />
* вебинаров<br />
<br />
Когда:<br />
* несколько потоков:<br />
** камеры<br />
** скринкасты<br />
** слайды<br />
* надо много и быстро<br />
<br />
----<br />
+ Автоматическая конверсия медиаформатов, с правкой размеров/скорости.<br />
<br />
=== Этимология: Seminar .-. ===<br />
<br />
* {{!|Длинное}}<br />
* {{!|Образовательное}}<br />
* Информационно плотное<br />
* {{!|Активный зритель}}<br />
* не → {{@|Развлекалово}}, {{@|Свадьбы}}, …<br />
<br />
----<br />
[http://www.youtube.com/watch?v=vV-GL6KMH5M «Видео на конвеере»/SWP-2012]<br />
<br />
=== Образовательное видео? ===<br />
Что такое правильное обучающее IT-видео, как его смотреть, и немного — как готовить, см<br />
мой доклад на Software People-2012:<br />
{{youtubeembed|vV-GL6KMH5M|854|480}}<br />
<br />
=== Этимология: Assembler .-. ===<br />
;«Сборка»:<br />
** Множества гетерогенных медиапотоков:<br />
*** Камер<br />
*** Скринкастов<br />
*** Слайдов<br />
*** Переговоров (скайп, IM…).<br />
** [[Screen2Log]]-cкринкастов из блоков<br />
<br />
;Ассемблер:<br />
* «Двухтермовый, строчный» DSL для программирования сцен:<br />
<pre><br />
WIDTH 1280<br />
HEIGHT 720<br />
TRANSITION RandomTrans<br />
TITLE «Введение в технологию Enterprise Forms»<br />
00:01:09 S<br />
00:08:16<br />
00:09:09 S<br />
00:17:21<br />
</pre><br />
<br />
<br />
=== Оно надо? .-. ===<br />
<br />
{{SideBar40|{{@|Перегруженность}}, {{@|Мелкая мышиная моторика}}, {{@|Неавтоматизируемость}}, {{@|Ремесло}}, {{@|Немасштабируемость}}… }}<br />
[[File:Пример видеоредактора 01.jpg|256px]]<br />
[[File:Пример видеоредактора 02.jpg|256px]]<br />
[[File:Пример видеоредактора 03.jpg|256px]]<br />
[[File:Пример видеоредактора 04.jpg|256px]]<br />
[[File:Пример видеоредактора 05.png|256px]]<br />
[[File:Пример видеоредактора 06.jpg|256px]]<br />
<br />
=== Кому? .-. ===<br />
[[File:Статистика объема снятого и смонтированного видео в CUSTIS.svg|right|640px]]<br />
<br />
* Программистам<br />
* Тестировщикам<br />
* {{!|Advanced Users}}<br />
<br />
Требующим эффективность!<br />
<br />
Понимающим, что такое:<br />
* Файл<br />
* Код<br />
* Проект<br />
* Сборка<br />
<br />
== Основная идея .-. ==<br />
[[File:Идея SeminarAssembler.svg|center|800px]]<br />
<br />
=== Матрешка .-. ===<br />
<br />
[[File:Matroska._Выбор_видеопотока.png|512px]]<br />
[[File:Просмотр_Matroska_с_UTD._Пример_с_флипчартом.png|480px]]<br />
[[File:Просмотр_Matroska_с_UTD._Пример_с_Баранцевым,_01.png|480px]]<br />
<br />
== Принципы .-. ==<br />
<br />
[[File:wysiwym.svg|right|256px]]<br />
<br />
* Agile-видеомонтаж <br />
** Быстрая draft-версия ({{!|матрешка}}!)<br />
** Инкрементальные улучшения<br />
<br />
* WYSIWYM — What You See Is What You Mean<br />
** Максимальная компактность и гибкость:<br />
*** Краткий код + дизайн-шаблоны<br />
*** Целостность<br />
*** Коллаборативный видеомонтаж<br />
<br />
{{SideBar40|If the product is used as a tool, its interface should be as unintelligent as possible. Stupid is predictable; predictable is learnable; learnable is usable. [http://unqualified-reservations.blogspot.ru/2009/07/wolfram-alpha-and-hubristic-user.html ©]}}<br />
<br />
<br />
* Сборка<br />
** Автоматизируемая<br />
** Инкрементальное обновление<br />
** Переносимость проекта ({{@|абсолютные пути в видеоредакторах}})<br />
** Прозрачность<br />
** Масштабируемая<br />
*** Сборка/по сети <br />
**** вся [ночная]-мощь компьютеров компании.<br />
<br />
* Free & open-source.<br />
<br />
== НеВелосипед .-. ==<br />
{{SideBar40|User Experience:<br />
* {{!|Reuse}} имеющийся<br />
* Приобретается {{!|полезный}}<br />
* свой UI {{!|минимален}}}}<br />
<br />
Использует:<br />
* <tt>ffmpeg</tt><br />
* <tt>Virtual Dub</tt><br />
* <tt>inkscape</tt><br />
* <tt>AVISynth</tt><br />
* <tt>SOX</tt><br />
* <tt>Sonic Visualizer</tt><br />
* <tt>mkvtools</tt><br />
<br />
Опционально:<br />
* VLC<br />
<br />
=== AVISynth .-. ===<br />
<br />
<pre style="font-size:75%"><br />
-------------------------------------------------------------------------------<br />
Language files blank comment code scale 3rd gen. equiv<br />
-------------------------------------------------------------------------------<br />
C++ 293 7375 8416 13858 x 1.51 = 20925.58<br />
C/C++ Header 493 12178 14871 13358 x 1.00 = 13358.00<br />
C 41 1650 2113 6955 x 0.77 = 5355.35<br />
Bourne Shell 7 276 844 4350 x 3.81 = 16573.50<br />
m4 14 95 52 1558 x 1.00 = 1558.00<br />
make 5 250 506 1314 x 2.50 = 3285.00<br />
Assembly 4 115 178 524 x 0.25 = 131.00<br />
HTML 5 1 5 439 x 1.90 = 834.10<br />
CSS 2 8 0 258 x 1.00 = 258.00<br />
Teamcenter def 2 2 0 8 x 1.00 = 8.00<br />
-------------------------------------------------------------------------------<br />
SUM: 866 21950 26985 42622 x 1.46 = 62286.53<br />
-------------------------------------------------------------------------------<br />
</pre><br />
<br />
=== FFMPEG .-. ===<br />
<br />
{{SideBar|Фабрис Беллар!}}<br />
<pre style="font-size:75%"><br />
--------------------------------------------------------------------------------<br />
Language files blank comment code scale 3rd gen. equiv<br />
--------------------------------------------------------------------------------<br />
C 1302 66172 57266 427936 x 0.77 = 329510.72<br />
C/C++ Header 534 9431 29244 98369 x 1.00 = 98369.00<br />
Assembly 94 3830 4119 38673 x 0.25 = 9668.25<br />
D 1002 0 0 13844 x 1.70 = 23534.80<br />
Bourne Shell 30 692 375 4920 x 3.81 = 18745.20<br />
make 31 233 27 2175 x 2.50 = 5437.50<br />
CSS 1 201 57 839 x 1.00 = 839.00<br />
C++ 3 132 122 782 x 1.51 = 1180.82<br />
Perl 1 59 61 310 x 4.00 = 1240.00<br />
XSD 1 21 4 147 x 1.90 = 279.30<br />
Bourne Again Shell 1 11 3 44 x 3.81 = 167.64<br />
HTML 2 5 0 19 x 1.90 = 36.10<br />
--------------------------------------------------------------------------------<br />
SUM: 3002 80787 91278 588058 x 0.83 = 489008.33<br />
--------------------------------------------------------------------------------<br />
</pre><br />
<br />
=== Inkscape .-. ===<br />
[[File:Inkscape Logo.svg|right|256px]]<br />
<br />
<pre><br />
--------------------------------------------------------------------------------<br />
Language files blank comment code scale 3rd gen. equiv<br />
--------------------------------------------------------------------------------<br />
C++ 827 60449 61764 303558 x 1.51 = 458372.58<br />
C/C++ Header 1097 32918 58698 87517 x 1.00 = 87517.00<br />
HTML 9 7522 8 39778 x 1.90 = 75578.20<br />
Python 225 5901 5593 29601 x 4.20 = 124324.20<br />
C 45 5866 5935 26246 x 0.77 = 20209.42<br />
Java 494 4040 12449 11088 x 1.36 = 15079.68<br />
XML 24 1728 1252 6494 x 1.90 = 12338.60<br />
XSLT 14 580 1096 6352 x 1.90 = 12068.80<br />
Javascript 5 548 635 2598 x 1.48 = 3845.04<br />
Perl 14 460 353 1889 x 4.00 = 7556.00<br />
make 39 193 91 1586 x 2.50 = 3965.00<br />
Bourne Shell 22 272 379 1439 x 3.81 = 5482.59<br />
m4 6 152 117 1080 x 1.00 = 1080.00<br />
CSS 2 32 32 216 x 1.00 = 216.00<br />
DOS Batch 3 36 5 182 x 0.63 = 114.66<br />
Ruby 1 26 32 149 x 4.20 = 625.80<br />
Teamcenter def 3 1 0 91 x 1.00 = 91.00<br />
Expect 1 18 0 56 x 2.00 = 112.00<br />
Bourne Again Shell 1 12 3 48 x 3.81 = 182.88<br />
DTD 1 5 1 27 x 1.90 = 51.30<br />
--------------------------------------------------------------------------------<br />
SUM: 2833 120759 148443 519995 x 1.59 = 828810.75<br />
--------------------------------------------------------------------------------<br />
</pre><br />
<br />
=== VLC .-. ===<br />
<br />
<pre><br />
-------------------------------------------------------------------------------<br />
Language files blank comment code scale 3rd gen. equiv<br />
-------------------------------------------------------------------------------<br />
C 763 58578 56901 302733 x 0.77 = 233104.41<br />
C/C++ Header 662 14905 32261 66771 x 1.00 = 66771.00<br />
C++ 254 12867 11783 64379 x 1.51 = 97212.29<br />
Bourne Shell 35 12176 5895 49867 x 3.81 = 189993.27<br />
Objective C 46 4575 2896 25531 x 2.96 = 75571.76<br />
m4 40 1596 774 15645 x 1.00 = 15645.00<br />
Javascript 8 310 777 9469 x 1.48 = 14014.12<br />
make 153 917 1278 7653 x 2.50 = 19132.50<br />
Lua 52 785 433 5160 x 4.00 = 20640.00<br />
XML 12 67 148 1541 x 1.90 = 2927.90<br />
HTML 17 31 154 1425 x 1.90 = 2707.50<br />
CSS 4 87 181 994 x 1.00 = 994.00<br />
Assembly 9 140 48 958 x 0.25 = 239.50<br />
MUMPS 2 115 0 565 x 4.21 = 2378.65<br />
DTD 1 5 6 327 x 1.90 = 621.30<br />
Visual Basic 2 75 121 272 x 2.76 = 750.72<br />
Python 1 55 66 213 x 4.20 = 894.60<br />
MATLAB 1 29 0 124 x 4.00 = 496.00<br />
Perl 2 16 26 112 x 4.00 = 448.00<br />
vim script 1 4 33 83 x 3.00 = 249.00<br />
sed 2 0 0 16 x 4.00 = 64.00<br />
-------------------------------------------------------------------------------<br />
SUM: 2067 107333 113781 553838 x 1.34 = 744855.52<br />
-------------------------------------------------------------------------------<br />
</pre><br />
<br />
<br />
=== SeminarAssembler .-. ===<br />
<br />
<pre style="font-size:75%"><br />
-------------------------------------------------------------------------------<br />
Language files blank comment code scale 3rd gen. equiv<br />
-------------------------------------------------------------------------------<br />
Python 27 518 569 1882 x 4.20 = 7904.40<br />
HTML 1 55 78 238 x 1.90 = 452.20<br />
Lua 1 6 5 33 x 4.00 = 132.00<br />
DOS Batch 1 0 0 1 x 0.63 = 0.63<br />
-------------------------------------------------------------------------------<br />
SUM: 30 579 652 2154 x 3.94 = 8489.23<br />
-------------------------------------------------------------------------------<br />
</pre><br />
<br />
* Интеграция<br />
** Местами хаки<br />
* Отлов багов (2 ffmpeg-а)<br />
* Поиск надежного и безопасного пути<br />
<br />
== Машина Сборки.-. ==<br />
<br />
=== Алгебра операций .-. ===<br />
<br />
<graph><br />
digraph G{<br />
node[fontname="Consolas" fontsize=8 shape=note];<br />
edge[fontname="Calibry" fontsize=8 fontcolor=blue dir=back]<br />
rankdir=LR;<br />
<br />
"cam.avi.mp3" [style=filled fillcolor=lightgrey]<br />
"cam.avi" [style=filled fillcolor=yellow]<br />
"cam.avi.mp3" -> "cam.avi" [label="parent" style=solid color=darkblue ]<br />
}<br />
</graph><br />
<br />
=== Параметры преобразования .-. ===<br />
<br />
<graph><br />
digraph G{<br />
node[fontname="Consolas" fontsize=8 shape=note];<br />
edge[fontname="Calibry" fontsize=8 fontcolor=blue dir=back]<br />
rankdir=TB;<br />
<br />
"1105-scaling-scrum-distributed-team-wolfson.avs.avi$speed=130,width=800,height=480,size=200m.avi" [style=filled fillcolor=lightgrey]<br />
"1105-scaling-scrum-distributed-team-wolfson.avs.avi" [style=filled fillcolor=lightgrey]<br />
"1105-scaling-scrum-distributed-team-wolfson.avs.avi$speed=130,width=800,height=480,size=200m.avi" -> "1105-scaling-scrum-distributed-team-wolfson.avs.avi" [label="parent" style=solid color=darkblue ]<br />
"1105-scaling-scrum-distributed-team-wolfson.avs.avi" [style=filled fillcolor=lightgrey]<br />
"1105-scaling-scrum-distributed-team-wolfson.avs.avi" -> "1105-scaling-scrum-distributed-team-wolfson.avs" [label="parent" style=solid color=darkblue ]<br />
}<br />
</graph><br />
<br />
<br />
=== Типы файлов .-. ===<br />
<br />
{{SideBar40|<br />
;Видео: AVI, MP4, …<br />
;Аудио: WAV, MP3, …<br />
<br />
;AVIISYNTH-скрипты: AVS<br />
;Матрешки: MKV, …<br />
;Описание матрешки: UNCUT (YAML)<br />
<br />
;Python-скрипты: PY<br />
;Верстка:SVG<br />
;Сценарии: SCENARIO<br />
<br />
;Задания: .sajobs<br />
}}<br />
<br />
<graph><br />
digraph G{<br />
<br />
edge [color="blue" style=solid]<br />
node [shape=box3d style=filled fillcolor=yellow fontname="Calibri"]<br />
<br />
"Видео" -> "Аудио"<br />
"AVS" [fontsize=32 fontcolor=blue]<br />
"AVS" -> "Видео"<br />
"AVS" -> "Аудио"<br />
<br />
"PY" -> "AVS"<br />
"SVG" -> "AVS"<br />
<br />
"UNCUT" -> "MKV"<br />
<br />
"SCENARIO" -> "AVS"<br />
<br />
<br />
edge [color="green" style=dotted ]<br />
<br />
"UNCUT" -> "Видео"<br />
"UNCUT" -> "Аудио"<br />
<br />
"AVS" -> "AVS"<br />
"SVG" -> "AVS"<br />
<br />
"SCENARIO" -> "AVS"<br />
"SCENARIO" -> "SVG"<br />
<br />
"AVS" -> "Видео"<br />
"AVS" -> "Аудио"<br />
<br />
"SAJOBS" -> "Видео"<br />
"SAJOBS" -> "Аудио"<br />
}<br />
</graph><br />
<br />
=== Зависимости .-. ===<br />
<br />
<graph><br />
digraph G{<br />
node[fontname="Consolas" fontsize=8 shape=note];<br />
edge[fontname="Calibry" fontsize=8 fontcolor=blue dir=back]<br />
rankdir=TB;<br />
<br />
"audio.avs" -> "audio.wav" [label="includes" style=dashed color=lightblue ]<br />
"start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"start_time.py.avs" -> "start_time.py" [label="parent" style=solid color=darkblue ]<br />
"start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"audio.avs" -> "start_time.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"../../lib/lib.avs" -> "../../lib/cachemode.avs" [label="includes" style=dashed color=lightblue ]<br />
"common.avs" -> "../../lib/lib.avs" [label="includes" style=dashed color=lightblue ]<br />
"audio.avs$ss=1200,len=300.wav" [style=filled fillcolor=lightgrey]<br />
"audio.avs$ss=1200,len=300.wav" -> "audio.avs" [label="parent" style=solid color=darkblue ]<br />
"audio.avs" -> "common.avs" [label="includes" style=dashed color=lightblue ]<br />
"../../lib/lib.avs" -> "../../lib/debugmode.avs" [label="includes" style=dashed color=lightblue ]<br />
}<br />
</graph><br />
<br />
=== Сборка «Матрешки» .-. ===<br />
<graph><br />
digraph G{<br />
node[fontname="Consolas" fontsize=8 shape=note];<br />
edge[fontname="Calibry" fontsize=8 fontcolor=blue dir=back]<br />
rankdir=TB;<br />
<br />
"../sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/cam1/video.avs" -> "../sources/cam1/source.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"2012-08-08-test.uncut.mkv" [style=filled fillcolor=lightgrey]<br />
"2012-08-08-test.uncut.mkv" -> "2012-08-08-test.uncut" [label="parent" style=solid color=darkblue ]<br />
"../sources/screen1/video.avs$vbitrate=800.avi" [style=filled fillcolor=lightgrey]<br />
"../sources/screen1/video.avs$vbitrate=800.avi" -> "../sources/screen1/video.avs" [label="parent" style=solid color=darkblue ]<br />
"../sources/cam1/video.avs$vbitrate=700.avi" [style=filled fillcolor=lightgrey]<br />
"../sources/cam1/video.avs$vbitrate=700.avi" -> "../sources/cam1/video.avs" [label="parent" style=solid color=darkblue ]<br />
"../sources/cam1/video.avs" -> "../sources/cam1/videofilters.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/cam1/sa-sample-camera.avi" [style=filled fillcolor=yellow]<br />
"../sources/cam1/source.py.avs" -> "../sources/cam1/sa-sample-camera.avi" [label="includes" style=dashed color=lightblue ]<br />
"../sources/screen1/common.avs" -> "../lib/lib.avs" [label="includes" style=dashed color=lightblue ]<br />
"../lib/lib.avs" -> "../lib/debugmode.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/screen1/start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/screen1/start_time.py.avs" -> "../sources/screen1/start_time.py" [label="parent" style=solid color=darkblue ]<br />
"../sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/screen1/source.py.avs" -> "../sources/screen1/common.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/cam1/start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/cam1/start_time.py.avs" -> "../sources/cam1/start_time.py" [label="parent" style=solid color=darkblue ]<br />
"../sources/cam1/video.avs" -> "../sources/cam1/common.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/cam1/start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/cam1/video.avs" -> "../sources/cam1/start_time.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/screen1/video.avs" -> "../sources/screen1/source.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/cam1/source.py.avs" -> "../sources/cam1/source.py" [label="parent" style=solid color=darkblue ]<br />
"../lib/lib.avs" -> "../lib/cachemode.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/cam1/sa-sample-camera.avi.meta" [style=filled fillcolor=lightgrey]<br />
"../sources/cam1/sa-sample-camera.avi" [style=filled fillcolor=yellow]<br />
"../sources/cam1/sa-sample-camera.avi.meta" -> "../sources/cam1/sa-sample-camera.avi" [label="parent" style=solid color=darkblue ]<br />
"../sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/cam1/source.py.avs" -> "../sources/cam1/common.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/screen1/start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/screen1/video.avs" -> "../sources/screen1/start_time.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/screen1/video.avs" -> "../sources/screen1/common.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/cam1/common.avs" -> "../lib/lib.avs" [label="includes" style=dashed color=lightblue ]<br />
"../sources/cam1/sa-sample-camera.avi.meta" [style=filled fillcolor=lightgrey]<br />
"../sources/cam1/source.py" -> "../sources/cam1/sa-sample-camera.avi.meta" [label="includes" style=dashed color=lightblue ]<br />
"../sources/screen1/video.avs$vbitrate=800.avi" [style=filled fillcolor=lightgrey]<br />
"2012-08-08-test.uncut" -> "../sources/screen1/video.avs$vbitrate=800.avi" [label="includes" style=dashed color=lightblue ]<br />
"../sources/screen1/sa-sample-screencast.avi.meta" [style=filled fillcolor=lightgrey]<br />
"../sources/screen1/sa-sample-screencast.avi" [style=filled fillcolor=yellow]<br />
"../sources/screen1/sa-sample-screencast.avi.meta" -> "../sources/screen1/sa-sample-screencast.avi" [label="parent" style=solid color=darkblue ]<br />
"../sources/screen1/sa-sample-screencast.avi.meta" [style=filled fillcolor=lightgrey]<br />
"../sources/screen1/source.py" -> "../sources/screen1/sa-sample-screencast.avi.meta" [label="includes" style=dashed color=lightblue ]<br />
"../sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/screen1/source.py.avs" -> "../sources/screen1/source.py" [label="parent" style=solid color=darkblue ]<br />
"../sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"../sources/screen1/sa-sample-screencast.avi" [style=filled fillcolor=yellow]<br />
"../sources/screen1/source.py.avs" -> "../sources/screen1/sa-sample-screencast.avi" [label="includes" style=dashed color=lightblue ]<br />
"../sources/cam1/video.avs$vbitrate=700.avi" [style=filled fillcolor=lightgrey]<br />
"2012-08-08-test.uncut" -> "../sources/cam1/video.avs$vbitrate=700.avi" [label="includes" style=dashed color=lightblue ]<br />
}<br />
</graph><br />
<br />
<br />
=== Сборка видео с версткой .-. ===<br />
<br />
<graph><br />
<br />
digraph G{<br />
node[fontname="Consolas" fontsize=8 shape=note];<br />
edge[fontname="Calibry" fontsize=8 fontcolor=blue dir=back]<br />
rankdir=TB;<br />
<br />
"scenes/default.scenario.avs" [style=filled fillcolor=lightgrey]<br />
"scenes/default.scenario.avs" -> "sources/cam1/video.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/cam1/source.py.avs" -> "sources/cam1/source.py" [label="parent" style=solid color=darkblue ]<br />
"sources/cam1/video.avs" -> "sources/cam1/common.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/screen1/common.avs" -> "lib/lib.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/cam1/audio.avs" -> "sources/cam1/start_time.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"scenes/common.avs" -> "lib/lib.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/screen1/screen.x264.avi.meta" [style=filled fillcolor=lightgrey]<br />
"sources/screen1/source.py" -> "sources/screen1/screen.x264.avi.meta" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/cam1/start_time.py.avs" -> "sources/cam1/start_time.py" [label="parent" style=solid color=darkblue ]<br />
"2010-09-22-oss-golden-mean-fomin.avs.avi" [style=filled fillcolor=lightgrey]<br />
"2010-09-22-oss-golden-mean-fomin.avs.avi" -> "2010-09-22-oss-golden-mean-fomin.avs" [label="parent" style=solid color=darkblue ]<br />
"sources/cam1/video.avs" -> "sources/cam1/videofilters.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/cam.avi.meta" [style=filled fillcolor=lightgrey]<br />
"sources/cam1/cam.avi" [style=filled fillcolor=yellow]<br />
"sources/cam1/cam.avi.meta" -> "sources/cam1/cam.avi" [label="parent" style=solid color=darkblue ]<br />
"sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/screen1/screen.x264.avi" [style=filled fillcolor=yellow]<br />
"sources/screen1/source.py.avs" -> "sources/screen1/screen.x264.avi" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/cam1/video.avs" -> "sources/cam1/source.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/cam1/video.avs" -> "sources/cam1/start_time.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/screen1/video.avs" -> "sources/screen1/common.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/cam1/cam.avi" [style=filled fillcolor=yellow]<br />
"sources/cam1/source.py.avs" -> "sources/cam1/cam.avi" [label="includes" style=dashed color=lightblue ]<br />
"lib/lib.avs" -> "lib/debugmode.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/common.avs" -> "lib/lib.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/screen1/start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/screen1/video.avs" -> "sources/screen1/start_time.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/screen1/start_time.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/screen1/start_time.py.avs" -> "sources/screen1/start_time.py" [label="parent" style=solid color=darkblue ]<br />
"sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/screen1/video.avs" -> "sources/screen1/source.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"scenes/default.scenario.avs" [style=filled fillcolor=lightgrey]<br />
"scenes/default.scenario.avs" -> "scenes/default.scenario" [label="parent" style=solid color=darkblue ]<br />
"sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/screen1/source.py.avs" -> "sources/screen1/source.py" [label="parent" style=solid color=darkblue ]<br />
"sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/cam1/audio.avs" -> "sources/cam1/source.py.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/audio.avs" -> "sources/cam1/common.avs" [label="includes" style=dashed color=lightblue ]<br />
"scenes/default.scenario.avs" [style=filled fillcolor=lightgrey]<br />
"2010-09-22-oss-golden-mean-fomin.avs" -> "scenes/default.scenario.avs" [label="includes" style=dashed color=lightblue ]<br />
"scenes/default.scenario.avs" [style=filled fillcolor=lightgrey]<br />
"scenes/default.scenario.avs" -> "scenes/common.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/cam.avi.meta" [style=filled fillcolor=lightgrey]<br />
"sources/cam1/source.py" -> "sources/cam1/cam.avi.meta" [label="includes" style=dashed color=lightblue ]<br />
"sources/screen1/screen.x264.avi.meta" [style=filled fillcolor=lightgrey]<br />
"sources/screen1/screen.x264.avi" [style=filled fillcolor=yellow]<br />
"sources/screen1/screen.x264.avi.meta" -> "sources/screen1/screen.x264.avi" [label="parent" style=solid color=darkblue ]<br />
"lib/lib.avs" -> "lib/cachemode.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/screen1/source.py.avs" -> "sources/screen1/common.avs" [label="includes" style=dashed color=lightblue ]<br />
"scenes/default.scenario.avs" [style=filled fillcolor=lightgrey]<br />
"scenes/default.scenario.avs" -> "sources/cam1/audio.avs" [label="includes" style=dashed color=lightblue ]<br />
"sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey]<br />
"sources/cam1/source.py.avs" -> "sources/cam1/common.avs" [label="includes" style=dashed color=lightblue ]<br />
"scenes/default.scenario.avs" [style=filled fillcolor=lightgrey]<br />
"scenes/default.scenario.avs" -> "sources/screen1/video.avs" [label="includes" style=dashed color=lightblue ]<br />
}<br />
</graph><br />
<br />
== Интерфейс .-. ==<br />
<br />
=== Текстово-файловый .-. ===<br />
<br />
[[File:FAR 4 SA.png|center]]<br />
<br />
<br />
=== Command line .-. ===<br />
{{SideBar40|Like <tt>svn</tt>/<tt>hg</tt>/<tt>git</tt>…}}<br />
<br />
{{:SeminarAssembler/Command-line/Схема}}<br />
<br />
=== WYSIWYM .-. ===<br />
<br />
[[File:wysiwym.svg]]<br />
<br />
<br />
=== Синхронизация .-. ===<br />
<br />
[[File:SA синхронизация по звуку.png|center]]<br />
<br />
== Инсталляция .-. ==<br />
;Необходимо:<br />
* [http://avisynth.org/ AVISynth, 32bit], >= 2.6.0<br />
* Скачать [[/Builds|SA.EXE]], положить в любой каталог, включенный в PATH.<br />
<br />
;Очень желательно, практически обязательно, если не уверены в обратном (для видеоверстки):<br />
* Кодек [http://sourceforge.net/projects/x264vfw/files/x264vfw/ x264vfw] 32-бит (даже, если Win764bit)<br />
** Другие кодеки по источникам ([[MiniDV2AVI|Cedocida]] для DV и т.п.).<br />
* [http://inkscape.org Inkscape]<br />
* [[VLC]]<br />
<br />
<br />
<br />
;Рекомендую:<br />
** [[ConferenceRecorder]] или просто [[Screen2Log]] для скринкастов.<br />
<br />
== Исходники .-.==<br />
* http://abf.io/belonesox/seminar-assembler/<br />
<br />
== Обратная связь ==<br />
Багрепорты можно слать на [https://bugs.launchpad.net/seminar-assembler/+filebug ланчпад], или по [mailto:stas-fomin@yandex.ru email].<br />
Вопросы, замечания, предложения → туда же.</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=SphinxSearchEngine&diff=8039
SphinxSearchEngine
2023-11-04T07:49:44Z
<p>VitaliyFilippov: VitaliyFilippov moved page Хохлы кусают своих западных хозяев: провал под Авдеевкой вызвал реакцию to SphinxSearchEngine over a redirect without leaving a redirect</p>
<hr />
<div>Fucking Best Group buy SEO Service Provider 2020 + { comparison table }<br />
<br />
Are you WEB masters and SEO analyst who have to pay hundreds of dollars per month. You get a goose pump by seeing monthly and yearly costs plan for tools like Ahrefs and SEMrush moreover, you need other tools like Moz Pro, Alexa Pro, Similarweb, kwfinder, SpyFu, Majestic, Buzzsumo too.<br />
If you want to prepare all of theme you should pay more than 1000$ per month for all these accounts. This cost is really not economical for a SEO master or a Blogger.<br />
There are service providers that give you all these shareable tools with 0.1 coat and you can use all of them with an economical cost.<br />
It is really economical and affordable. Isn’t it?<br />
How is this service provided?<br />
Imagine you are five SEO master friends and you pay the cost for one month together. Now you share username and password due to you all use the tools. I've explained the meaning of group buy simply for you. Let's see how service providers, provided these tools.<br />
Style of provide access to group buy SEO services :<br />
1. Using Chrome extension<br />
2. RDP (Remote desktop connection)<br />
3. Using Software (Browser)<br />
<br />
Quick Conclusion till here : <br />
Try Just once trial account and enjoy using all SEO group buy like a ghost<br />
<br />
Top 3 sellers of shared SEO tools based on the number of user <br />
1. groupbuyseotools.org<br />
2. pitorr.com ( or every were you watch this installation video )<br />
3. supremseo.com<br />
<br />
Comprehensive comparison table of group buy SEO tool providers in the world<br />
In this table I try to compare all aspect of this providers with each other. So, you can decide which provider is better for you<br />
<br />
<br />
Most of these providers, due to they are all resellers of a main service provider, have the same problems and their tools don’t work cause of different problems.<br />
I've almost checked all of these providers and at least I've bought services from them once.<br />
Most of the providers which are named, provided tools that they don’t work. And it could be annoying. After buying a service even though some of them have money-back guarantee but who is willing to follow up just for 10$?!<br />
<br />
<br />
Quick guide line to choose Group buy SEO Tools provider <br />
So that the best decision is choose a provider which has these points:<br />
1- The service should be of good quality and should not be wasted due to its low price<br />
2- it must have a support team to answer your questions and guide you, not your email gets no response.<br />
3- Have a reasonable price, neither too high nor too low<br />
4- Allow you to test the service and check its quality before buying, Trial account can give you a good view before buying it<br />
5- Have a high variety of service and cover all SEO and digital marketing tools and graphics<br />
6- The service must be easy to use and everything must be very easy and accessible<br />
<br />
The best provider I've had good work experience with is https://seordp.org<br />
This service provider has been providing its services with good quality for more than two years <br />
And one of the reasons it has been able to maintain the quality of shared services is the right pricing Because it is not crowded due to its cheapness and the services are always up-to-date and available.<br />
<br />
Another advantage is providing a trial account, you can easily see how it works with this system before buying. Just fill out the form here to have your login information emailed to you. Just as easily and at the same speed<br />
<br />
The support of this server is excellent and they will solve your problems very quickly, and also the scheduling as well as the level of access is quite flexible, and by paying more, you can have different access.</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=SphinxSearchEngine&diff=8038
SphinxSearchEngine
2023-11-04T07:49:34Z
<p>VitaliyFilippov: Reverted edits by SEO TROLLING (talk) to last revision by Williau</p>
<hr />
<div>Fucking Best Group buy SEO Service Provider 2020 + { comparison table }<br />
<br />
Are you WEB masters and SEO analyst who have to pay hundreds of dollars per month. You get a goose pump by seeing monthly and yearly costs plan for tools like Ahrefs and SEMrush moreover, you need other tools like Moz Pro, Alexa Pro, Similarweb, kwfinder, SpyFu, Majestic, Buzzsumo too.<br />
If you want to prepare all of theme you should pay more than 1000$ per month for all these accounts. This cost is really not economical for a SEO master or a Blogger.<br />
There are service providers that give you all these shareable tools with 0.1 coat and you can use all of them with an economical cost.<br />
It is really economical and affordable. Isn’t it?<br />
How is this service provided?<br />
Imagine you are five SEO master friends and you pay the cost for one month together. Now you share username and password due to you all use the tools. I've explained the meaning of group buy simply for you. Let's see how service providers, provided these tools.<br />
Style of provide access to group buy SEO services :<br />
1. Using Chrome extension<br />
2. RDP (Remote desktop connection)<br />
3. Using Software (Browser)<br />
<br />
Quick Conclusion till here : <br />
Try Just once trial account and enjoy using all SEO group buy like a ghost<br />
<br />
Top 3 sellers of shared SEO tools based on the number of user <br />
1. groupbuyseotools.org<br />
2. pitorr.com ( or every were you watch this installation video )<br />
3. supremseo.com<br />
<br />
Comprehensive comparison table of group buy SEO tool providers in the world<br />
In this table I try to compare all aspect of this providers with each other. So, you can decide which provider is better for you<br />
<br />
<br />
Most of these providers, due to they are all resellers of a main service provider, have the same problems and their tools don’t work cause of different problems.<br />
I've almost checked all of these providers and at least I've bought services from them once.<br />
Most of the providers which are named, provided tools that they don’t work. And it could be annoying. After buying a service even though some of them have money-back guarantee but who is willing to follow up just for 10$?!<br />
<br />
<br />
Quick guide line to choose Group buy SEO Tools provider <br />
So that the best decision is choose a provider which has these points:<br />
1- The service should be of good quality and should not be wasted due to its low price<br />
2- it must have a support team to answer your questions and guide you, not your email gets no response.<br />
3- Have a reasonable price, neither too high nor too low<br />
4- Allow you to test the service and check its quality before buying, Trial account can give you a good view before buying it<br />
5- Have a high variety of service and cover all SEO and digital marketing tools and graphics<br />
6- The service must be easy to use and everything must be very easy and accessible<br />
<br />
The best provider I've had good work experience with is https://seordp.org<br />
This service provider has been providing its services with good quality for more than two years <br />
And one of the reasons it has been able to maintain the quality of shared services is the right pricing Because it is not crowded due to its cheapness and the services are always up-to-date and available.<br />
<br />
Another advantage is providing a trial account, you can easily see how it works with this system before buying. Just fill out the form here to have your login information emailed to you. Just as easily and at the same speed<br />
<br />
The support of this server is excellent and they will solve your problems very quickly, and also the scheduling as well as the level of access is quite flexible, and by paying more, you can have different access.</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Template:%D0%95%D0%91%D0%90%D0%A8%D0%98%D0%9C_%D0%92%D0%90%D0%A1_SEO&diff=8037
Template:ЕБАШИМ ВАС SEO
2023-11-04T07:49:17Z
<p>VitaliyFilippov: Reverted edits by SEO TROLLING (talk) to last revision by StasFomin</p>
<hr />
<div><span style="color:red;font-size:110%">{{{1}}}</span></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Screen2Log&diff=8035
Screen2Log
2023-11-04T07:48:49Z
<p>VitaliyFilippov: VitaliyFilippov moved page Суд арестовал участника смертельной драки в центре Москвы to Screen2Log over a redirect without leaving a redirect</p>
<hr />
<div>Screen2Log — скринкастер, адаптированный для тестировщиков и обычных пользователей.<br />
<br />
=== Зачем нужен скринкастер? ===<br />
<br />
Особенно обычным пользователям?<br />
<br />
С тестировщиками более-менее понятно, нетривиальное ручное тестирование отличается от простого простукивания тривиальных тест-кейсов, когда баги так и лезут в мешок.<br />
<br />
Оно скорее похоже на долгую утомительную рыбалку, или патрулирование, когда неясно, где искать добычу/врагов, попадутся ли они, когда, и как оно будет выглядеть.<br />
<br />
И когда, наконец-то, оно попадается (клюет! что-то мелькнуло в поле видимости…), то всплывает куча проблем:<br />
* баг долго оформлять — а это сбивает настрой, поэтому гуру exploratory testing требуют отдельных штурманов-регистраторов, пока «снайпер» занимается охотой, не выходя из своего боевого транса.<br />
* трудно точно описать, особенно если оно уже прошло → это чисто психофизиология, уже через пару минут нельзя с 100% уверенностью утверждать, что это было («врет как очевидец™»).<br />
* ну и наконец, разработчики/подрядчики/техподдержка может просто не верить, если ваш случай редок («It works on my machine!™»).<br />
<br />
А в что касается обычных пользователей… то можно сказать, что вне зависимости от желания, мы все сейчас тестировщики, по факту использования, увы, различных софтин и сервисов.<br />
Причем в отличие от штатных тестировщиков, у которых более-менее налажен контакт с разработчиками, от рядовых пользователей девелоперы часто ограждены <br />
* либо «эффективной» техподдержкой, из трех уровней индусов или дебилов в колл-центре, прорваться сквозь которых, убедив, что ты не ламер, и проблема вызвана не ''только'' твоими кривыми руками, может только очень упорный боец, <br />
* либо «эффективным» пофигизмом. <br />
<br />
Прорвать и то и другое часто помогает лишь очевидная демонстрация, которая, в случае игнорирования, может быть угрозой репутации продукта.<br />
<br />
Решение очевидно — да, нужно записывать экран, и уметь это показать-переслать и т.п.<br />
<br />
Это также поможет вам в случае конфликтов пользования финансово-торговыми сервисами (например, Ebay глючит при оплате, вы не можете оплатить выигранный лот, и автоматически становитесь виновным), ну и вообще.<br />
<br />
А кроме ужасов, компьютер часто является источником радости (lulzов), и скринкастер поможет вам запомнить такие веселые моменты, как эпикфейлы каких нибудь понтовых сайтов («deface сайта минобороны», «детское порно на сайте телеканала», «падение яндекса»…), ну и прочие, редкие события. Причем к скринкасту доверия больше, чем с скриншоту, который совсем легко подделать.<br />
<br />
=== Зачем нужен ''еще один'' скринкастер? ===<br />
<br />
Ведь тысячи их! Платных и бесплатных!<br />
C веселым GUI! И даже предлагающие загрузку в интернет на свои сервисы!<br />
<br />
И мы пробовали многие из них. Платные и бесплатные.<br />
У нас в компании есть site license на один из неплохих вариантов, в доводке которого я принимал активное участие<br />
(слал авторам кучу баг-репортов и фича-реквестов).<br />
<br />
И все же сел делать собственный велосипед.<br />
<br />
Во-первых, законы Гейзенберга и Паркинсона-Мерфи неумолимы — все интересное/опасное, баги, сбои, измены, ДТП, и прочий криминал, обычно происходят ровно тогда, когда на это никто не смотрит и не снимает.<br />
Записывать надо начать до! Т.е. по-уму, надо писать постоянно.<br />
<br />
Если писать непрерывно в один файл, как делают почти все отсмотренные скринкастеры, то<br />
* либо получается большой жирный файл, который никуда не переслать, не приаттачить к багу и т.п., если не занятся видеомонтажем — вырезанием и т.п. А надо то быстро! Не выходя из режима «exploratory testing»! Баг репорт должен быть мгновенным и убедительным!<br />
* либо не получается ничего — падает не только софтина, но и скринкастер (или система целиком, BSOD), и все накрывается ра<s>к</s>ом.<br />
<br />
Плюс:<br />
* Скринкастер может существенно тормозить вашу нормальную работу. Да, регистрация это неплохо, но работа-то важнее.<br />
* Записывать экран надо с точностью до пискеля, в мутной картике нет смысла. Это можно настроить почти во всех скринкастерах выбором правильного кодека. Но не всегда. И не во всех. И это отдельный геморрой.<br />
* Лень. Лень изучать интерфейсы какой-то дополнительной софтины. Удивительно, но факт, сейчас это один из основных тормозов использования чего-бы то ни было.<br />
* Нужна некоторая автоматическое структурирование базы записей, ибо часто то, что это проблема, осознается гораздо позже, и нужно иметь эффективный доступ к записям, без перебора файлов («screencast-1.avi», «ыsometesting-12.avi» и т.п.)<br />
<br />
=== Решение ===<br />
Предлагаемое решение: скринкастер без интерфейса:<br />
* только кнопка «Вкл» — запуск программы<br />
* и «Выкл» — закрыть окно крестиком, по Ctrl-C, или просто убив процесс любым способом.<br />
<br />
Будучи запущенным, он пишет в рабочий каталог (откуда его запустили), экран:<br />
* непрерывно<br />
* нарезая на куски заданного размера (разумные варианты где-то: 30сек, 1мин), это будет весить от 400K в разрешении 1280×800×5fps, до 5MB в 1920×1200×12fps, в любом случае, это вполне нормальный уровень аттачмента к письму или багу, можно быстро передать по Skype и т.п.<br />
* автоматически создавая временную структуру каталогов и файлов:<br />
yyyy-mm-dd\hh\yyyy-mm-dd-hh-mm-ss.avi<br />
* работает с самым низким приоритетом, понижая записываемый fps (для большинства программ, если вы только не тестируете шустрые игры или видеоплееры — это не очень критично), лишь бы не мешать.<br />
<br />
Доступ же к базе записанных скринкастов:<br />
* автоматический, по hotkey, или вызову ярлыка — работает, даже когда скринкастер выключен.<br />
* вообще говоря, просто открывается стандартный интерфейс просмотра папок с видео, который, в Windows 7, с выставленным размером Extra Large Icon, суперудобен, для того, чтобы даже не запуская видео, найти нужный слот-отрывок — достаточно вспомнить «примерно когда это было?» и проскроллировать каталог этого часа с крупными Thumbnailами — прекрасно видно, где и что происходило.<br />
* После нахождения нужного отрывка (или несколько), их можно<br />
** простой пользователь — обычным drag-and-drop-ом перетащить в форму аттачмента письма или бага.<br />
** продвинутый пользователь зажмет «Shift», и в контекстном меню объекта в Explorere появится пункт «Copy as path»…<br />
<br />
== Инсталляция ==<br />
<br />
=== x264vfw ===<br />
Установите кодек x264, 32 битную версию (даже, если у вас Win764bit):<br />
* http://sourceforge.net/projects/x264vfw/files/x264vfw/<br />
<br />
Это нужно для кодирования видео.<br />
<br />
=== K-Lite Codec Pack ===<br />
Теоретически, можно использовать другой pack кодеков, включающих ffdshow, или поставить ffdshow отдельно, но пока этот вопрос плотно не исследовал.<br />
<br />
Скачать K-Lite Codec Pack в соответствии с битностью ваших виндов. [http://www.codecguide.com/klcp_64bit.htm 64bit] или [http://www.codecguide.com/download_k-lite_codec_pack_standard.htm 32bit].<br />
<br />
При инсталляции выберите для надежности Advanced Mode (теоретически, все настройки должны и так правильно выставится, но мало ли что):<br />
[[File:K-Lite Codec Pack installation. Advanced Mode.png|center]]<br />
<br />
Выберите ffdshow для декодирования H264:<br />
[[File:K-Lite Codec Pack installation. FFDSHOW 4 H264.png|center]]<br />
<br />
Убедитесь, что ему разрешено генерировать thumnailы для AVI-видео (остальное по вкусу):<br />
[[File:K-Lite Codec Pack installation. thumnailы для AVI-видео.png|center]]<br />
<br />
=== Screen2Log ===<br />
Опционально, но очень рекомендую (особенно, если у вас большой монитор, по крайней мере не маленький 10" нетбук):<br />
* Скачать http://bazaar.launchpad.net/~stanislav-fomin/screen2log/trunk/view/head:/install/install.reg<br />
* Запустить его (загрузить в реестр) дабл-кликом через explorer или командой:<br />
<tt>regedit install.reg</tt><br />
<br />
Это сделает большие иконки, для папок с типом видео. Выберите папку для хранения скринкастов, и очень рекомендую, зайти в ее свойства и выставить ей тип видео (если вы запускали install.reg, то у видео будут большие иконки, это очень удобно), и выставить также тип видео для подпапок:<br />
<br />
[[File:Customize Folder for Video.png|center]]<br />
<br />
<br />
Ну и затем,<br />
* скачайте http://bazaar.launchpad.net/~stanislav-fomin/screen2log/trunk/view/head:/bin/screen2log.exe<br />
* и положите его куда вам угодно <tt>screen2log.exe</tt><br />
<br />
Запускайте его с консоли, из той папки, в которую надо писать скрин-логи.<br />
Ну или сделайте ярлык.<br />
<br />
На самом деле, при каждом запуске, Screen2Log проверяет, что на рабочем столе есть ярлык для него, и создает его, устанавливая рабочий каталог в соответствии с тем, с которым его запустили, и также создает или обновляет ярлык «screenlogs», в который прописывает текущий каталог для скринкастов.<br />
<br />
Т.е. если вы хотите сменить место записи скринкастов — вам просто нужно запустить Screen2Log из другого рабочего каталога.<br />
<br />
Остановить утилиту просто — закройте окно с ним крестиком или нажмите «CTRL-C»<br />
<br />
Ну и в любое время, даже, когда Screen2Log не запущен, вы можете хоткеем (или ярлыком «screenlogs»)<br />
открыть папку, где структурировано по времени («Дата→Час→Нарезанные интервалы») разложены экранные ролики,<br />
и если вы установили тип видео и большие иконки, как мы рекомендовали выше, то вы увидите что-то вроде:<br />
<br />
[[File:Screen2Log ScreenLogs.png|center]]<br />
<br />
Т.е. элементарным скроллингом внутри папки-часа легко найти нужный момент (когда произошела проблема), а далее, либо <br />
drag-and-dropом, либо (как показано на рисунке) «SHIFT+правая клавиша мыши» и через контекстное меню «Скопировать как путь»,<br />
приаттачиваем нужный файл, к почте, или баг-трекеру.<br />
<br />
Да, хоткей по умолчанию немного дикий — «CTRL-ALT-SHIFT-L», но его можно поменять в настройках ярлыка «screenlogs».<br />
<br />
Успехов!<br />
<br />
=== Настройки ===<br />
<br />
Если запустить утилиту, она вам перечислит вам доступные опции:<br />
Usage: screen2log.exe [fps=fps] [slotsecs=slotsecs] [x1=x1] [x2=x2] [y1=y1] [y2=y2] [width=width] [install_shortcuts=<on/off>]<br />
fps=fps wanted FPS<br />
slotsecs=slotsecs Seconds per timeslot<br />
x1=x1 x1-coord of recorded area<br />
x2=x2 x2-coord of recorded area<br />
y1=y1 y1-coord of recorded area<br />
y2=y2 y2-coord of recorded area<br />
width=width Target width of screen log<br />
install_shortcuts=<on/off> Install shortcuts to desktop<br />
<br />
Разберем их подробней.<br />
<br />
По умолчанию, утилита записывает все доступные экраны (лучше захватить все, чем пропустить важное).<br />
Но если вы специально тестируете на втором (или наоборот) первом мониторе, то можно задать область записи,<br />
параметрами<br />
;x1, y1: координаты верхнего левого угла<br />
;x2, y2: координаты нижнего правого угла<br />
Если опустить какой-то параметр или задать его равным нулю, то он не будет ограничивать тот «полный экран». Т.е. (допустим, разрешение основного монитора 1920x1200)<br />
* при x2=0, y2=0 будет записан весь экран<br />
* при x1=1920 будет записываться то, что «справа» от вашего 24" монитора, например второй монитор.<br />
* при x2=1920 — только основной экран.<br />
<br />
<br />
;width: Если вы хотите сделать грубый рескейлинг при записи. Например, у вас большой монитор 1920×1200, можно задать width=960, и уменьшить размер экрана в 4 раза. Height вычисляется автоматически, чтобы сохранить aspect ratio.<br />
Это может быть полезно:<br />
* Уменьшить размер роликов:<br />
** Экономия места<br />
** Удобней просматривать их тем, у кого мониторы меньше<br />
** Т.е. при багрепортах и т.п., когда scale качества достаточно.<br />
* Запись видео — когда точность пикселей не важна, а вот FPS нужно побольше.<br />
<br />
Но алгоритм scalingа грубый, для терпимых искажений желательно чтобы он был как-то кратен исходному размеру (т.е. уменьшать ровно в 2/3/4 раза).<br />
<br />
<br />
;fps: Целевое число фреймов в секунду. Больший FPS не значит, что FPS будет гарантировано больше — реальный FPS утилита пишет в процессе работы. В целом, для записи работы с софтом обычно достаточно 4-5fps, если надо записывать видео → 12fps.<br />
<br />
;slotsecs: Сколько секунд на слот (отдельный файл). Все это зависит от удобства — меньше секунд → меньше файлы, возможно удобней аттачить к баг-репорту. Но при этом возможно придется аттачить несколько файлов. Ну и наоборот.<br />
<br />
;install_shortcuts: По умолчанию, при каждом запуске, screen2log создает shortcut на рабочем столе,<br />
* указывающий на ту версию, которой его вызвали (например, если вы вызвали новую версию, или куда-то переложили утилиту)<br />
* с теми параметрами, с которыми его вызвали (геометрия, fps, и т.п.). Таким образом запоминаются последние настройки.<br />
Но если указать «install_shortcuts=off», то этого не будет.<br />
<br />
=== Проблемы? ===<br />
Проблемы с использованием → mailto:stas-fomin@yandex.ru<br />
<br />
== Исходники ==<br />
* https://launchpad.net/screen2log<br />
<br />
== FAQ ==<br />
* Если запустить Screen2Log на машине, на которую зашли по RDP-сессии, а потом минимизировать окно, то ничего не записывается. WTF?<br />
<br />
Это свойство RDP-протокола, подающаяся как фича (экономия трафика).<br />
Есть хак над компом, с которого вы запускаете RDP-сессию: создать в его реестре DWORD параметр <tt>RemoteDesktop_SuppressWhenMinimized</tt> равный <tt>2</tt><br />
под веткой<br />
HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client<br />
или соответственно<br />
HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server Client</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Talk:Screen2Log&diff=8036
Talk:Screen2Log
2023-11-04T07:48:49Z
<p>VitaliyFilippov: VitaliyFilippov moved page Talk:Суд арестовал участника смертельной драки в центре Москвы to Talk:Screen2Log over a redirect without leaving a redirect</p>
<hr />
<div><!-- blank page created by Wikilog --></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=ViewVC&diff=8034
ViewVC
2023-11-04T07:48:15Z
<p>VitaliyFilippov: Reverted edits by SEO TROLLING (talk) to last revision by VitaliyFilippov</p>
<hr />
<div>ViewVC — система онлайн-просмотра репозиториев систем версионного контроля [[CVS]] и [[Subversion]]. Ранее называлась ViewCVS.<br />
<br />
* Сайт: http://www.viewvc.org/, http://viewvc.tigris.org/<br />
* Лицензия: Permissive, типа [[rupedia:Лицензия MIT|MIT]]. Free & OpenSource.<br />
* Версия с нашими доработками (ViewVC4Intranet): https://github.com/vitalif/viewvc-4intranet<br />
*: Ниже значком ([[File:Wiki4intranet-logo.svg|32px|link=]]) помечены фичи, присутствующие только в нашей версии.<br />
<br />
= Основные возможности =<br />
<br />
Просмотр:<br />
* Листингов директорий (ls) (в том числе по предыдущим версиям)<br />
* Журналов ревизий с комментариями, списков изменённых файлов (log)<br />
* Различий между версиями, в том числе в формате патча (diff)<br />
* Содержимого файлов<br />
** С подсветкой синтаксиса многих языков программирования, в том числе нашего PL/SQL препроцессируемого [[m4]] (*.sp4)<br />
* Аннотаций, поиск виновного (blame/annotate)<br />
<br />
[[#Поиск изменений|Поиск изменений]]:<br />
* Поиск по параметрам ревизии<br />
* ([[File:Wiki4intranet-logo.svg|32px|link=]]) [[#Поиск по содержимому|'''Поиск по содержимому файлов''']], в том числе бинарных (офисных и т.п.)<br />
* Генерация [[RSS]]-лент изменений (в том числе по любому запросу поиска)<br />
* ([[File:Wiki4intranet-logo.svg|32px|link=]]) [[#Патчи из выбранных изменений|Генерация патчей]] из выбранных списков изменений<br />
* [[#Списки merge для отмены изменений|Вывод команд svn merge для отмены выбранных изменений]]<br />
<br />
Поддержка:<br />
* Прав Subversion.<br />
* ([[File:Wiki4intranet-logo.svg|32px|link=]]) Прав CVSnt.<br />
* ([[File:Wiki4intranet-logo.svg|32px|link=]]) Корректных проверок прав в результатах поиска.<br />
* ([[File:Wiki4intranet-logo.svg|32px|link=]]) Мелкие доработки и исправления багов, полный список [https://github.com/vitalif/viewvc-4intranet/blob/master/CHANGES здесь].<br />
<br />
== Листинги директорий ==<br />
<br />
Заходя на главную страницу ViewVC, можно увидеть список [[CVS]]- и [[Subversion]]-репозиториев, а также ссылку «Query revision history» вверху страницы. Далее можно выбрать репозиторий — вы увидите список файлов и каталогов/модулей (cvs), находящихся в нём. Аналогично, кликнув на каталог, вы увидите листинг файлов и подкаталогов в нём.<br />
<br />
== Журналы ревизий ==<br />
<br />
К журналу ревизий можно перейти, выбирая файл из списка (по умолчанию открывается журнал ревизий), кликая в списке на номер ревизии рядом с каталогом, или переходя по ссылке «(modified)» в списке изменений, просматриваемом по номеру ревизии.<br />
<br />
== Различия между версиями ==<br />
<br />
Diff’ы отображаются с подсветкой удалённых/добавленных/изменённых строк и некоторым количеством строк контекста. Можно просматривать различия только по отдельным файлам; удобнее всего делать это со страницы журнала ревизий — нажимая на ссылки «Diff to previous XXX» или выбирая две версии (числовых, а в случае с CVS — и именованных) и желаемый формат различий внизу страницы. А со страницы с самими различиями можно скачать патч, нажав на ссылку «Patch».<br />
<br />
== Списки изменений по ревизиям ==<br />
<br />
В [[Subversion]] (не [[CVS]]) каждая фиксация изменений атомарна, а в репозиториях хранятся данные для сопоставления номера ревизии репозитория и всех изменений, в ней произошедших. Кликнув по номеру ревизии на странице журнала изменений файла, или по номеру ревизии вверху страницы со списком файлов в каталоге [[Subversion]], вы попадаете на страницу с информацией об изменениях, произошедших в данной ревизии.<br />
<br />
== Построчное аннотирование ==<br />
<br />
Аннотирование (поиск виновного): файл разбивается на строки, и напротив каждой строки выводится информация о том, кто последний её менял. Чтобы перейти на страницу с аннотацией, нужно кликнуть на ссылку annotate на странице с журналом ревизий.<br />
<br />
== Поиск изменений ==<br />
<br />
На страницу поиска коммитов (изменений) можно попасть по ссылкам «Query revision history» в листингах каталогов. На странице поиска можно выбрать:<br />
* ([[File:Wiki4intranet-logo.svg|32px|link=]]) Текст для поиска по содержимому версионированных файлов. При поиске учитывается русская и английская морфология, поиск ведётся ''во всю глубину истории''.<br />
* ([[File:Wiki4intranet-logo.svg|32px|link=]]) Репозиторий, тип репозитория.<br />
* Поддиректорию, путь к конкретному файлу.<br />
* Логин автора.<br />
* ([[File:Wiki4intranet-logo.svg|32px|link=]]) Номер ревизии.<br />
* Интервал дат.<br />
* Текст комментария для поиска.<br />
<br />
Большинство параметров может содержать как точное значение, так и регулярное выражение для выбора нескольких вариантов.<br />
<br />
Нужно отметить несколько нетривиальное поведение поля «поддиректория» при переходе на форму поиска также из некоторой поддиректории репозитория — при этом поле «поддиректория» становится относительным по отношению к поддиректории, из которой был сделан переход.<br />
<br />
Форма поиска используется для интеграции с [[Bugzilla]] — в Bugzilla можно увидеть ссылки «Look for bug in CVS&SVN», ведущие на результаты поиска изменений с номером бага или словом «bugXXXX» в тексте.<br />
<br />
=== Поиск по содержимому ===<br />
<br />
([[File:Wiki4intranet-logo.svg|32px|link=]]) Долгое время для поиска по содержимому у нас пытался жить [[SVNSearcher]] (если это можно назвать жизнью). Но — не прижился. Ибо '''очень''' медленный, '''очень''' некачественный, и генерирует '''очень''' большие индексы. В тормозах его виноват, правда, не Lucene (который вполне [[Сравнение движков полнотекстового поиска|быстрый]]), а качество реализации.<br />
<br />
А теперь наша сборка '''ViewVC''', с помощью прикрученных к ней Tika и Sphinx’а, умеет отлично искать по содержимому Subversion.<br />
<br />
<span style="font-size: 200%">[[File:viewvc-logo.png|link=http://viewvc.org/]] + [[File:Tika.png|200px|link=http://tika.apache.org/]] + [[File:Sphinx.jpg|link=http://sphinxsearh.com/]]</span><br />
<br />
'''Tika''' — это java-библиотека для вытаскивания текста из бинарных документов. Собственно, самое вкусное, что было в составе SVNSearcher’а. Чтобы работала быстро, её можно запускать в режиме TCP-сервера.<br />
<br />
'''Sphinx''' — в качестве движка поиска. Его realtime индексы, из которых по факту ничего нельзя удалить, а можно только добавить, идеально подходят для индексации содержимого системы контроля версий.<br />
<br />
Для использования поиска нужно нажать '''Query revision history''', ввести в поле «Search content» нужный текст, выбрать желаемые даты (по умолчанию поиск только за последнюю неделю), и нажать Search.<br />
<br />
[[File:ViewVC-ContentSearch.png|400px]]<br />
<br />
=== RSS-ленты изменений ===<br />
<br />
Кликнув на привычный значок [[RSS]] [[File:rss14.png]] на странице, можно получать результаты любых поисков в формате [[RSS]]. В том числе, можно подписываться на изменения по отдельным репозиториям, каталогам, файлам — нужно просто кликнуть по значку [[RSS]].<br />
<br />
=== Патчи из выбранных изменений ===<br />
<br />
([[File:Wiki4intranet-logo.svg|32px|link=]]) ViewVC может генерировать патчи из результатов поиска изменений (ревизий). Для генерации патча перейдите по ссылке «''Show a patch built from these changes''», показываемой вверху страницы результатов поиска. Помните, что если результаты поиска включают в себя изменения одних и тех же файлов, сильно разнесённые во времени, патч будет включать также и все изменения, сделанные в том же файле между найденными. ViewVC старается отслеживать такие ситуации и выводить предупреждение о них в следующей форме: '''CAUTION: selected changes are not contiguous, patch may include differences from other commits'''.<br />
<br />
=== Списки merge для отмены изменений ===<br />
<br />
Ещё одна нетривиальная возможность страницы результатов — ссылка «''Show commands which could be used to back out these changes''». Перейдя по ней, вы увидите список команд merge, которые нужно выполнить в рабочей копии репозитория, чтобы попытаться отменить все изменения, выведенные на странице результатов поиска.<br />
<br />
= Ссылки =<br />
<br />
* [http://www.viewvc.org/ Официальный сайт ViewVC];<br />
* [http://viewvc.tigris.org/ ViewVC на хостинге проектов tigris.org];<br />
* [[WikiPedia:ViewVC|ViewVC в Википедии]];<br />
<br />
{{replicate-from-custiswiki-to-lib}}<br />
{{replicate-from-custiswiki-to-4intranet}}</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=%D0%91%D0%BB%D0%BE%D0%B3:%D0%A1%D1%82%D0%B0%D1%81_%D0%A4%D0%BE%D0%BC%D0%B8%D0%BD/2007-08-13_%D0%9D%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D1%8C/I%D0%AF%D0%AF%C6%8EV%C6%8E%D0%AFSIBL%C6%8E&diff=8033
Блог:Стас Фомин/2007-08-13 Необратимость/IЯЯƎVƎЯSIBLƎ
2023-11-04T07:47:40Z
<p>VitaliyFilippov: VitaliyFilippov moved page СК проверяет информацию об инфекции среди красноярских школьников to Блог:Стас Фомин/2007-08-13 Необратимость/IЯЯƎVƎЯSIBLƎ over...</p>
<hr />
<div>Необратимость/'''IЯЯƎVƎЯSIBLƎ'''<br />
<br />
Очередная французская «жесть», как она есть. Европейская «чернуха» не отстаёт от российской, очередное пугалово для иммигрантов — не ходите дети в Париж: там бьют и сношают, там помойка, все живут и передвигаются в подземельях (метро, переходы, гей-клубы).<br />
<br />
Все традиции жанра «низкобюджетное культовое кино для фестиваля» соблюдены. В первую очередь экономия на операторе и освещении: похоже, что съёмками занимается подвернувшийся клиент клуба «Ректум», педераст в хорошем и плохом смысле, бегающий за актёрами с трясущейся наладонной miniDV камерой. Все настолько темно и дёрганно, что видимо напутали даже [http://www.world-art.ru/cinema/cinema.php?id=11996 краткое содержание] на «Word-Art»:<br />
<br />
Поссорившись со своим бывшим мужем Маркусом (Венсан Кассель), Алекс (Моника Беллуччи) ушла с вечеринки и отправилась домой. …Маркус и нынешний любовник Алекс Пьер (Альбер Дюпонтель) - решают покарать насильника собственными руками… &gt;&gt;<br />
<br />
Бывший муж конечно Пьер, а нынешний любовник — Маркус. Впрочем, один хрен. Выдам еще один секрет Полишинеля — в фильме развернута хронология событий, но развернута не так заумно, как в «Memento», а аккуратно-линейно — в каждый момент понимаешь, что самая задница уже позади (т.е. в будущем), дальше будет лучше и спокойней, можно есть попкорн и пить боржом.<br />
<br />
Фильм начинается с совершенно Сорокинского диалога пары старых уродов, на тему «хорошо ли иттить своих дочерей» (запекать и есть их не догадались однако, см. «Сорокин:Настя», явно ограниченные люди), с моралью «все нормально, преступлений нет, есть только поступки». Взбодрив таким образом неподготовленного зрителя, камера вылетает во двор, где наблюдается явный шухер с агрессивными гомосеками и выводящей/выносящей из подвала главных героев полицией. Щелчок в прошлое — и мы оказываемся в первом ключевом эпизоде: «я мщу и мстя моя ужастна». Герой под низкочастотную вибрацию мечется по подземелью с уродами и одно только слово твердит «Глиста знаешь? Где Глист, бл@? Может ты Глист?». Уроды откровенно над ним глумятся — понятно, где может быть глист. В результате герой срывается на одного из гоблинов, но не тут то было — гей-гоблин при моральной поддержке болельщиков в два прихлопа ломает герою руку, и в два притопа обездвиживает и заголяет зад, явно не для того, чтобы сделать укол или отшлёпать. Неизбежное Анальное Насилие прерывается появлениям Героя-2 с огнетушителем, которым он разделывает гоблина в полное мясо (судя по фильмам у меня чёткое ощущение, что огнетушителями, как и подушками безопасности убито больше людей, чем спасено). Немедленно возникают мысли, тянущие на мораль фильма: «так дела не делаются» или «месть это блюдо, которое подают холодным». Добавим — и готовым. Вспоминается непревзойдённая отечественная классика — «Брат», где герой долго-долго строгал обрез и смертельную дробь, а общение с уродами заняло меньше десяти секунд — выстрел, «всем лежать, мордой в пол», выстрел.<br />
<br />
Дальше перемотка назад ускоряется, короткие блоки показывают метания нашего героев в поисках сутенёра-гомосека-солитёра, и наконец доезжаем до второго ключевого эпизода, гвоздя программы — да, режиссер не обманул, обломав первое Анальное Насилие, он преподносит страждущему зрителю завершённое десятиминутное Анальное Насилие в багровых тонах. Причём гомосексуалистом и над женщиной (не знаю, возможно это и фантастика). Здесь, те кто напрягал зрение и кому еще не отшибло память, могут таки убедится, что показанная будущая мстя прошла не по адресу, хотя и близко — насильник aka «глист-нюхатель» стоял рядом с забитым гоблином. «Упс... промашка вышла». Тут зритель очередной раз ухмыляется: «ну Семён Семеныч...», «так дела не делаются», «надо было меньше пить и нюхать» — действительно, у героев было полно возможностей решить вопрос с Глистом — и сдать прямые улики полиции, и дать денег уличным бандитам-контроллерам, и просто проспаться и вооружится перед тем как... Лично я в этот момент окончательно отказал героям в разуме и адекватности и перестал им сочувствовать. Разве что слегка сочувствовал Пьеру — бывшему мужу Алекс, который, хоть и тюфяк-тюфяком, вел себя относительно адекватно (профессор философии однако), но окончательно сорвался в Ректуме «ах я плох в сексе так, как слишком забочусь о партнёре?» — «так ибих их всех!».<br />
<br />
Дальнейший тренд эпизодов — «возвращение в невинность». Предыстория вопроса, почему девушка бредет одна по переходу, показывает, что во всём надо винить только самих пострадавших. Их ни разу не жалко. Мужу-тюфяку надо немного мачизма, а не лобзаний с любовником. Жене — поменьше блядства, и, как будущей матери, не пить и не курить («курящая мать никогда не станет отцом»). Любовнику — найти работу, деньги, перестать пить и нюхать, не помешал бы и тренажёрный зал.<br />
<br />
Остаётся надеяться, что зрители сделают правильные выводы из картины, и анальный секс будет у них только по взаимному согласию. И да — в Париж я больше не поеду (был раз ночью, впечатления очень похожи на этот фильм — опасная помойка).<br />
{{wl-publish: 2007-08-13 03:49:00 +0400 | StasFomin}}</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Template:Replicate-from-custiswiki-to-4intranet&diff=8032
Template:Replicate-from-custiswiki-to-4intranet
2023-11-04T07:47:07Z
<p>VitaliyFilippov: Reverted edits by SEO TROLLING (talk) to last revision by AndreyMoiseev</p>
<hr />
<div><div class="replication-info"><br />
----<br />
<small><i>Статья реплицируется в [http://wiki.4intra.net/ Wiki4IntraNet]</i></small>.</div><br />
<includeonly>[[Category:CustisWikiTo4IntraNet]]</includeonly></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Template:Replicate-from-custiswiki-to-lib&diff=8031
Template:Replicate-from-custiswiki-to-lib
2023-11-04T07:47:04Z
<p>VitaliyFilippov: Reverted edits by SEO TROLLING (talk) to last revision by AndreyMoiseev</p>
<hr />
<div><includeonly><br />
<div class="replication-info"><br />
----<br />
<div style="font-size:50%"><br />
'''Внимание'''! <i>Данная статья выбрана для репликации во [http://lib.custis.ru внешнюю базу знаний компании]. Пожалуйста, не допускайте в этой статье публикацию конфиденциальной информации, ведения обсуждений в теле статьи, и более ответственно относитесь к качеству самой статьи — проверяйте орфографию, пишите по-русски, избегайте непроверенной вами информации. </i><br />
</div></div><br />
[[Category:CustisWikiToLib]]<br />
</includeonly></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Template:Extension&diff=8030
Template:Extension
2023-11-04T07:46:51Z
<p>VitaliyFilippov: Reverted edits by SEO TROLLING (talk) to last revision by Nnemo</p>
<hr />
<div><includeonly>{| class="ext-infobox ext-status-{{#switch: {{lc: {{{status|unknown}}} }}<br />
|unstable|experimental|beta|stable={{{status}}}<br />
|#default=unknown<br />
}}" style="{{Border-radius|2px}}; float: right; clear: right; background-color: white; width:280px; border-collapse:separate;" cellspacing="0"<br />
|+ '''[[Manual:Extensions|MediaWiki extensions manual]]''' - '''[[Extension Matrix|list]]'''<br />
|- class="ext-header"<br />
! colspan="2" style="padding-top: 0.5em;" | [[File:{{#ifeq: {{{status|}}} |unstable|Crystal Clear app error.png|<!--else-->Crystal Clear action run.png}}|link=:Template:Extension#Content|left|40px]] <span style="font-size: 130%;">{{{name|{{PAGENAME}}}}}</span><br /><br />
[[Extension status|Release status:]] {{#switch: {{lc: {{{status|unknown}}} }}<br />
|unstable|experimental|beta|stable={{{status}}}<br />
|#default=unknown<br />
}}<!-- Category logic -->{{#ifeq:{{{templatemode|}}}|nocats|<!-- do nothing -->|<!--else-->[[Category:{{#switch: {{lc:{{{status|}}} }}<br />
|unstable|experimental|stable = {{{status}}} extensions<br />
|beta = beta status extensions<br />
|unknown = extensions with unknown status<br />
|#default = extensions with invalid status<br />
}}]]}}<br />
|-<br />
{{#if:{{{image|}}}|<br />
{{!}} colspan="2" style="text-align: center;" {{!}} [[Image:{{{image}}}|{{{imagesize|220}}}px]]<br />
{{!}}-<br />
}}<br />
{{#if:{{{type|}}}{{{type1|}}}|<br />
{{!}} style="vertical-align: top" {{!}} [[Template:Extension#type|'''Implementation''']]<br />
{{!}} {{#ifeq:{{{templatemode|}}}|nocats|<!--<br />
-->{{Foreach|Extension/TypeSwitchNoCats|<!-- -->delim=,&ensp;|<!--<br />
-->{{{type1|{{{type|missing}}}<!-- -->}}}|<!--<br />
-->{{{type2|}}}|<!-- -->{{{type3|}}}|<!-- -->{{{type4|}}}|<!-- -->{{{type5|}}}|<!-- -->{{{type6|}}}<!--<br />
-->}}<!--<br />
-->|<!--else--><!--<br />
-->{{Foreach|Extension/TypeSwitch|<!-- -->delim=,&ensp;|<!--<br />
-->{{{type1|{{{type|missing}}}<!-- -->}}}|<!--<br />
-->{{{type2|}}}|<!-- -->{{{type3|}}}|<!-- -->{{{type4|}}}|<!-- -->{{{type5|}}}|<!-- -->{{{type6|}}}<!--<br />
-->}}<!--<br />
-->}}<!--<br />
-->|<!--else--><!--<br />
-->{{#ifeq:{{{templatemode|}}}|nocats|<!--<br />
nothing<br />
-->|<!--else--><!--<br />
-->{{Extension/TypeSwitch|_missing_}}<!--<br />
-->}}<!--<br />
--><br />
{{!}}-<br />
}}<br />
|-<br />
| style="vertical-align: top" | [[Template:Extension#description|'''Description''']] || {{{description}}}<br />
|-<br />
{{#if:{{{author|{{{username|}}} }}}|<br />
{{!}} style="vertical-align: top" {{!}} [[Template:Extension#username|'''Author(s)''']]<br />
{{!}} {{#if: {{{username|}}} |<!--<br />
-->{{#ifeq: {{{username}}}|{{{author|{{{username}}}<!-- -->}}}|<!--<br />
nothing<br />
-->|<!--else--><!--<br />
-->{{{author}}} (<!--<br />
-->}}<!--<br />
-->[[User:{{{username}}}|{{{username}}}]]<!--<br />
--><sup><small>[[User talk:{{{username}}}|{{int:talkpagelinktext}}]]</small></sup><!--<br />
-->{{#ifeq: {{{username}}}|{{{author|{{{username}}}<!-- -->}}}|<!--<br />
nothing<br />
-->|<!--else--><!--<br />
-->)<!--<br />
-->}}<!--<br />
-->|<!--else--><!--<br />
-->{{{author}}}<!--<br />
-->}}<br />
{{!}}-<br />
}}<br />
{{#if:{{{version|}}}|<br />
{{!}} style="vertical-align: top" {{!}} [[Template:Extension#version|'''Last version''']]<br />
{{!}} {{{version|}}}{{#if:{{{update|}}}|&#160;({{{update}}})}}<br />
{{!}}-<br />
}}<br />
{{#if:{{{mediawiki|}}}|<br />
{{!}} style="vertical-align: top" {{!}} [[Template:Extension#mediawiki|'''MediaWiki''']]<br />
{{!}} {{{mediawiki}}}<br />
{{!}}-<br />
}}<br />
{{#if:{{{php|}}}|<br />
{{!}} style="vertical-align: top" {{!}} [[Template:Extension#php|'''PHP''']]<br />
{{!}} {{{php}}}<br />
{{!}}-<br />
}}<br />
{{#if:{{{needs-updatephp|}}}|<br />
{{!}} style="vertical-align: top" {{!}} <abbr title="'php update.php' needed after installation">[[Template:Extension#needs-updatephp|'''Database&nbsp;changes''']]<abbr/><br />
{{!}} {{{needs-updatephp}}}<br />
{{!}}-<br />
}}<br />
| style="vertical-align: top" {{!}} [[Template:Extension#license|'''License''']]<br />
| {{#if:{{{license|}}}|{{{license}}}|No license specified[[Category:Extensions with no license specified]]}}<br />
|-<br />
| style="vertical-align: top" | [[Template:Extension#download|'''Download''']] <br />
| <!--<br />
-->{{#if:{{{download|}}}|{{{download}}}|''No link''}}<!--<br />
-->{{#if:{{{readme|}}}|<br />{{{readme}}}<!-- -->}}<!--<br />
-->{{#if:{{{changelog|}}}|<br />{{{changelog}}}<!-- -->}}<br />
|-<br />
{{#if:{{{example|}}}|<br />
{{!}} style="vertical-align: top" {{!}} [[Template:Extension#example|'''Example''']]<br />
{{!}} {{{example}}}<br />
{{!}}-<br />
}}<br />
{{#if:{{{parameters|}}}|<br />
{{!}} style="padding: 0pt;" colspan="2" {{!}}<!--<br />
--><br />
{{{!}} class="mw-collapsible mw-collapsed" style="border-collapse: collapse; width: 100%;"<br />
{{!}}-<br />
! style="vertical-align: top; text-align: left; padding: 0.2em 0.5em;" {{!}} [[Template:Extension#parameters|'''Parameters''']]<br />
{{!}}-<br />
{{!}}<br />
{{{parameters}}}<br />
{{!}}}<br />
{{!}}-<br />
}}<br />
{{#if:{{{tags|}}}|<br />
{{!}} style="padding: 0pt;" colspan="2" {{!}}<br />
{{{!}} class="mw-collapsible mw-collapsed" style="border-collapse: collapse; width: 100%;"<br />
{{!}}-<br />
! style="vertical-align: top; text-align: left; padding: 0.2em 0.5em;" {{!}} [[Template:Extension#tags|'''Tags''']]<br />
{{!}}-<br />
{{!}} {{{tags}}}<br />
{{!}}}<br />
{{!}}-<br />
}}<br />
{{#if:{{{rights|}}}|<br />
{{!}} style="padding: 0pt;" colspan="2" {{!}}<br />
{{{!}} class="mw-collapsible mw-collapsed" style="border-collapse: collapse; width: 100%;"<br />
{{!}}-<br />
! style="vertical-align: top; text-align: left; padding: 0.2em 0.5em;" {{!}} [[Template:Extension#rights|'''Added rights''']]<br />
{{!}}-<br />
{{!}}<br />
{{{rights}}}<br />
[[Category:Extensions which add rights]]<br />
{{!}}}<br />
{{!}}-<br />
}}<br />
{{#if:{{{hook1|}}}|<br />
{{!}} style="padding: 0pt;" colspan="2" {{!}}<br />
{{{!}} class="mw-collapsible mw-collapsed" style="border-collapse: collapse; width: 100%;"<br />
{{!}}-<br />
! style="vertical-align: top; text-align: left; padding: 0.2em 0.5em;" {{!}} [[Template:Extension#hook|'''Hooks used''']]<br />
{{!}}-<br />
{{!}}<!--<br />
-->{{#ifeq:{{{templatemode|}}}|nocats|<!--<br />
-->{{Foreach|Extension/HookInUseNoCats|delim=<br/>|<!--<br />
-->{{{hook1}}}|{{{hook2|}}}|{{{hook3|}}}|{{{hook4|}}}|{{{hook5|}}}|{{{hook6|}}}|<!--<br />
-->{{{hook7|}}}|{{{hook8|}}}|{{{hook9|}}}|{{{hook10|}}}|{{{hook11|}}}|{{{hook12|}}}|<!--<br />
-->{{{hook13|}}}|{{{hook14|}}}|{{{hook15|}}}|{{{hook16|}}}|{{{hook17|}}}|{{{hook18|}}}|<!--<br />
-->{{{hook19|}}}|{{{hook20|}}}|{{{hook21|}}}|{{{hook22|}}}|{{{hook23|}}}|{{{hook24|}}}|<!--<br />
-->{{{hook25|}}}|{{{hook26|}}}|{{{hook27|}}}|{{{hook28|}}}|{{{hook29|}}}|{{{hook30|}}}|<!--<br />
-->{{{hook31|}}}|{{{hook32|}}}|{{{hook33|}}}|{{{hook34|}}}|{{{hook35|}}}|{{{hook36|}}}|<!--<br />
-->{{{hook37|}}}|{{{hook38|}}}|{{{hook39|}}}|{{{hook40|}}}|{{{hook41|}}}|{{{hook42|}}}|<!--<br />
-->{{{hook43|}}}|{{{hook44|}}}|{{{hook45|}}}|{{{hook46|}}}|{{{hook47|}}}|{{{hook48|}}}<!--<br />
-->}}<!--<br />
-->|<!--else--><!--<br />
-->{{Foreach|Extension/HookInUse|delim=<br/>|<!--<br />
-->{{{hook1}}}|{{{hook2|}}}|{{{hook3|}}}|{{{hook4|}}}|{{{hook5|}}}|{{{hook6|}}}|<!--<br />
-->{{{hook7|}}}|{{{hook8|}}}|{{{hook9|}}}|{{{hook10|}}}|{{{hook11|}}}|{{{hook12|}}}|<!--<br />
-->{{{hook13|}}}|{{{hook14|}}}|{{{hook15|}}}|{{{hook16|}}}|{{{hook17|}}}|{{{hook18|}}}|<!--<br />
-->{{{hook19|}}}|{{{hook20|}}}|{{{hook21|}}}|{{{hook22|}}}|{{{hook23|}}}|{{{hook24|}}}|<!--<br />
-->{{{hook25|}}}|{{{hook26|}}}|{{{hook27|}}}|{{{hook28|}}}|{{{hook29|}}}|{{{hook30|}}}|<!--<br />
-->{{{hook31|}}}|{{{hook32|}}}|{{{hook33|}}}|{{{hook34|}}}|{{{hook35|}}}|{{{hook36|}}}|<!--<br />
-->{{{hook37|}}}|{{{hook38|}}}|{{{hook39|}}}|{{{hook40|}}}|{{{hook41|}}}|{{{hook42|}}}|<!--<br />
-->{{{hook43|}}}|{{{hook44|}}}|{{{hook45|}}}|{{{hook46|}}}|{{{hook47|}}}|{{{hook48|}}}<!--<br />
-->}}<!--<br />
-->}}<!--<br />
--><br />
{{!}}}<br />
{{!}}-<br />
}}<br />
{{#if:{{{compatibility|}}}|<br />
{{!}} colspan="2" {{!}}<br />
{{{compatibility}}}<br />
{{!}}-<br />
}}<!--<br />
Note: this next check suppresses the 'Check usage' link if page is: a subpage, not in Extension: namespace, or if suppressed by 'templatemode=nocats' or 'nousage=true'.<br />
-->{{#if:{{{nousage|{{#ifeq:{{{templatemode|}}}|nocats|no usage|{{#ifeq:{{NAMESPACE}}|{{ns:102}}|{{#ifeq:{{PAGENAME}}|{{BASEPAGENAME}}||no usage}}|no usage}}}}}}}||<br />
{{!}} colspan="2" style="text-align:center;" {{!}}<br />
[http://s23.org/wikistats/mediawiki_extensions.php?name={{{CheckUsageNameOverride|{{FULLPAGENAMEE}}}}} Check usage] ''(experimental)''<!--<br />
-->}}<br />
{{#if: {{{bugzilla|}}} | <br />'''[[Bugzilla|Bugs]]:''' [https://bugzilla.wikimedia.org/buglist.cgi?component={{urlencode:{{{bugzilla}}}}}&resolution=--- list open] [https://bugzilla.wikimedia.org/buglist.cgi?component={{urlencode:{{{bugzilla}}}}} list all] [https://bugzilla.wikimedia.org/enter_bug.cgi?product=MediaWiki%20extensions&component={{urlencode:{{{bugzilla}}}}} report]}}<br />
|}<!--<br />
-->{{#ifeq:{{{templatemode|}}}|nocats|<!--<br />
nothing--><!--<br />
-->|<!--else--><!--<br />
-->{{DEFAULTSORT:{{#if:{{{name|}}}|<!--<br />
-->{{uc:{{{name}}}<!-- -->}}<!--<br />
-->|<!--else--><!--<br />
-->{{uc:{{PAGENAME}}<!-- -->}}<!--<br />
-->}}<!-- -->}}<!--<br />
-->[[Category:All extensions]]<!--<br />
-->}}</includeonly><noinclude>{{Documentation}}<br />
[[Category:Info templates|{{PAGENAME}}]]<br />
[[Category:Extension creation]]<br />
[[Category:Categorizing templates|{{PAGENAME}}]]<br />
[[Category:Extension templates]]<br />
{{languages|Template:Extension}}<br />
</noinclude></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Template:Bug&diff=8029
Template:Bug
2023-11-04T07:45:58Z
<p>VitaliyFilippov: Reverted edits by SEO TROLLING (talk) to last revision by VitaliyFilippov</p>
<hr />
<div><noinclude><br />
Ссылка на баг в Bugzilla. Использовать так:<br />
<pre><br />
{{Bug|Номер бага|(опционально) заголовок}}<br />
</pre><br />
-----<br />
<br />
См. также:<br />
* [[:Template:Attachment|Ссылка на вложение]]<br />
* [[:Template:BugInfo|Маленький информер по багу]]<br />
* [[:Template:BugInformer|Большой информер по багу]]<br />
* [[:Template:Bz-embed|Встраивание списка багов из Bugzilla (с учётом прав доступа)]]<br />
<br />
{{replicate-from-custiswiki-to-all}}</noinclude><includeonly>[http://bugs.office.custis.ru/bugs/show_bug.cgi?id={{{1|}}} {{#if:{{{2|}}}|{{{2}}}|Bug:{{{1|}}}}}]</includeonly></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Bugzilla4Intranet/N&diff=8028
Bugzilla4Intranet/N
2023-11-04T07:45:49Z
<p>VitaliyFilippov: VitaliyFilippov moved page Власти Израиля предписали ООН и населению переместиться в южную часть Газы/N to Bugzilla4Intranet/N over a redirect without leaving a redirect</p>
<hr />
<div><tt><span title="Все новые фичи, кроме доработок поиска" class="bz_feature" style="background-color: #0b0; color: white">&nbsp;N&nbsp;</span>&nbsp;</tt></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Bugzilla4Intranet/F&diff=8027
Bugzilla4Intranet/F
2023-11-04T07:45:38Z
<p>VitaliyFilippov: VitaliyFilippov moved page Власти Израиля предписали ООН и населению переместиться в южную часть Газы/F to Bugzilla4Intranet/F over a redirect without leaving a redirect</p>
<hr />
<div><tt><span title="Доработки объектного ядра, кэширование, оптимизация" class="bz_core" style="background-color: blue; color: white">&nbsp;F&nbsp;</span>&nbsp;</tt></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Bugzilla4Intranet/F&diff=8026
Bugzilla4Intranet/F
2023-11-04T07:45:25Z
<p>VitaliyFilippov: Reverted edits by SEO TROLLING (talk) to last revision by VitaliyFilippov</p>
<hr />
<div><tt><span title="Доработки объектного ядра, кэширование, оптимизация" class="bz_core" style="background-color: blue; color: white">&nbsp;F&nbsp;</span>&nbsp;</tt></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Bugzilla4Intranet/C&diff=8025
Bugzilla4Intranet/C
2023-11-04T07:45:05Z
<p>VitaliyFilippov: VitaliyFilippov moved page Власти Израиля предписали ООН и населению переместиться в южную часть Газы/C to Bugzilla4Intranet/C over a redirect without leaving a redirect</p>
<hr />
<div>* [http://мета-модерн.рф/sorokin_metamodernism Метамодернизм в позднем творчестве В.Г. Сорокина]<br />
* [http://мета-модерн.рф/litrpg ЛитРПГ - последняя отрыжка постмодерна]<br />
* [http://мета-модерн.рф/richard_iii "Ричард III и семиотика"]<br />
* [http://мета-модерн.рф/ridero_visualisation 3D-визуализация обложки Ridero] создаем обложку книги при работе над самиздатом.<br />
* [http://мета-модерн.рф/architecture Архитектура метамодерна] - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.<br />
* [http://мета-модерн.рф/literature Литература] <br />
* [http://мета-модерн.рф/ Метамодерн]<br />
* [http://мета-модерн.рф/venya_drkin Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос"].<br />
*[http://www.димитровградонлайн.рф/publ/raznoe/kak_izbavitsja_ot_komarov_luchshie_tipy_lovushek/5-1-0-1 Как избавиться от комаров? Лучшие типы ловушек.]<br />
*[http://www.димитровградонлайн.рф/publ/texnologii/chto_delat_esli_robloks_vyletaet_na_windows/3-1-0-2 Что делать если роблокс вылетает на windows]<br />
*[http://www.димитровградонлайн.рф/publ/psikhologija_i_semejnye_otnoshenija/chto_delat_esli_rebenok_smotrit_porno/6-1-0-3 Что делать, если ребенок смотрит порно?]<br />
*[http://www.димитровградонлайн.рф/publ/raznoe/pochemu_sobaka_prygaet_na_ljudej_pri_vstreche/5-1-0-5 Почему собака прыгает на людей при встрече?]<br />
*[http://www.димитровградонлайн.рф/publ/texnologii/kakoe_maslo_lit_v_zadnij_differencial_most_visco_diff_38434aa050/3-1-0-4 Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050]<br />
*[http://www.димитровградонлайн.рф/publ/raznoe/o_chem_mozhet_rasskazat_khvost_vashej_koshki/5-1-0-7 О чем может рассказать хвост вашей кошки?]<br />
*[http://www.димитровградонлайн.рф/publ/raznoe/o_chem_govorjat_vervetki/5-1-0-8 Верветки]<br />
*[http://www.димитровградонлайн.рф/publ/raznoe/otchetnost_bjudzhetnykh_uchrezhdenij_pri_zakupkakh_po_zakonu_223_fz/5-1-0-9 Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ]<br />
*[http://www.димитровградонлайн.рф/publ/raznoe/srok_iskovoj_davnosti_uchimsja_rasschityvat_pravilno/5-1-0-10 Срок исковой давности как правильно рассчитать]<br />
* [http://www.димитровградонлайн.рф/publ/politika/kto_takoj_dmitrij_patrushev_budet_li_on_preemnikom_vladimira_putina/4-1-0-12 Дмитрий Патрушев минсельхоз будет ли преемником Путина]<br />
*[http://www.димитровградонлайн.рф/publ/politika/kto_takoj_vladislav_pozdnjakov_chto_takoe_muzhskoe_gosudarstvo_i_pochemu_ego_priznali_ehkstremistskim_v_rossii/4-1-0-13 Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?]<br />
* [http://www.димитровградонлайн.рф/publ/texnologii/kak_pravilno_vybrat_mashinnoe_maslo_v_dimitrovgrade/3-1-0-14 Как правильно выбрать машинное масло в Димитровграде?]<br />
* [http://www.димитровградонлайн.рф/publ/psikhologija_i_semejnye_otnoshenija/kak_stat_bogatym_i_znamenitym_v_rossii/6-1-0-15 Как стать богатым и знаменитым в России?]<br />
* [http://www.димитровградонлайн.рф/publ/raznoe/pochemu_film_pipec_kick_ass_stal_populjaren_po_vsemu_miru/5-1-0-16 Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?]<br />
* [http://www.димитровградонлайн.рф/publ/psikhologija_i_semejnye_otnoshenija/kak_stat_mudrecom/6-1-0-17 Как стать мудрецом?]<br />
* [http://www.димитровградонлайн.рф/publ/texnologii/kak_ustanovit_free_bsd/3-1-0-19 Как правильно установить FreeBSD]<br />
* [http://www.димитровградонлайн.рф/publ/politika/kak_stat_takim_kak_putin/4-1-0-20 Как стать таким как Путин?]<br />
* [http://www.димитровградонлайн.рф/publ/o_dimitrovgrade/gde_luchshe_zhit_v_dimitrovgrade_ili_v_uljanovske/1-1-0-21 Где лучше жить - в Димитровграде или в Ульяновске?]<br />
* [http://www.димитровградонлайн.рф/publ/o_dimitrovgrade/pochemu_gorod_dimitrovgrad_tak_nazyvaetsja/1-1-0-22 Почему город Димитровград так называется?]<br />
* [http://www.димитровградонлайн.рф/news/chto_takoe_metamodern/2023-10-13-6 Что такое метамодерн?]<br />
* [http://www.димитровградонлайн.рф/news/vazhno_vremennoe_ogranichenie_dvizhenija_avtotransportnykh_sredstv_v_dimitrovgrade/2023-10-13-5 ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде]<br />
* [http://www.димитровградонлайн.рф/news/tarify_na_ehlektroehnergiju_dlja_majnerov_predlozheno_povysit/2023-10-13-4 Тарифы на электроэнергию для майнеров предложено повысить]</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Bugzilla4Intranet/S&diff=8024
Bugzilla4Intranet/S
2023-11-04T07:44:39Z
<p>VitaliyFilippov: VitaliyFilippov moved page Власти Израиля предписали ООН и населению переместиться в южную часть Газы/S to Bugzilla4Intranet/ without leaving a redirect</p>
<hr />
<div><tt><span title="Доработки поиска, отчётов и групповых операций" class="bz_search_feature" style="background-color: red; color: white">&nbsp;S&nbsp;</span>&nbsp;</tt></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Bugzilla4Intranet/NU&diff=8023
Bugzilla4Intranet/NU
2023-11-04T07:44:33Z
<p>VitaliyFilippov: VitaliyFilippov moved page Власти Израиля предписали ООН и населению переместиться в южную часть Газы/NU to Bugzilla4Intranet/NU over a redirect without leaving a redirect</p>
<hr />
<div><tt><span title="Новые фичи, связанные также с юзабилити" class="bz_usability_feature" style="background-color: #080; color: white">&nbsp;NU&nbsp;</span></tt></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Bugzilla4Intranet/U&diff=8022
Bugzilla4Intranet/U
2023-11-04T07:43:51Z
<p>VitaliyFilippov: VitaliyFilippov moved page Власти Израиля предписали ООН и населению переместиться в южную часть Газы/U to Bugzilla4Intranet/U over a redirect without leaving a redirect</p>
<hr />
<div><tt><span title="Доработки юзабилити" class="bz_usability" style="background-color: #f80; color: white">&nbsp;U&nbsp;</span>&nbsp;</tt></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Template:Replicate-from-custiswiki-to-all&diff=8021
Template:Replicate-from-custiswiki-to-all
2023-11-04T07:43:14Z
<p>VitaliyFilippov: Reverted edits by SEO TROLLING (talk) to last revision by VitaliyFilippov</p>
<hr />
<div><noinclude>Шаблон для задания репликации статьи/шаблона/изображения во ВСЕ наши Wiki-системы.<br />
<br />
Включать следует '''только''' на действительно полезные везде вещи, типа пиктограмм, макросов интеграции с Bugzilla и т.п. На справку включать НЕ надо.</noinclude><div class="replication-info"><br />
----<br />
<small><i>Статья реплицируется в [[SMWiki]], [[SBWiki]], [[RDWiki]], [[GZWiki]], [[DPWiki]], [[HRWiki]], [[CBWiki]], [[ORWiki]], [[RAWiki]], [[ITWiki]], [[CRMWiki]], [[NordeaWiki]], [[EvolWiki]], [[TMSWiki]]</i></small>.</div><br />
<includeonly>[[Category:Джентльменский набор вики]]</includeonly></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Bugzilla4Intranet&diff=8020
Bugzilla4Intranet
2023-11-04T07:43:01Z
<p>VitaliyFilippov: VitaliyFilippov moved page Власти Израиля предписали ООН и населению переместиться в южную часть Газы to Bugzilla4Intranet over a redirect without leaving a redirect</p>
<hr />
<div>[[Bugzilla4Intranet]] — форк баг-трекера Bugzilla (версии 3.6.4), ставящий своей конечной целью превращение Bugzilla в настраиваемый трекер, а также оптимизацию производительности и ликвидацию некачественного кода, присутствующего в оригинале в большом количестве.<br />
<br />
* Исходный код: https://github.com/vitalif/bugzilla-4intranet<br />
* Страница проекта: http://wiki.4intra.net/Bugzilla4Intranet<br />
* Лицензия: MPL 1.1 (как и у оригинала Bugzilla), двойная MPL 1.1+ / GPL 3+ (для переписанных частей кода)<br />
<br />
Идеальная цель проекта:<br />
* Полностью настраиваемая объектная модель, редактируемая из интерфейса. Функционирование всех объектов системы на её основе, возможность добавлять свои объекты, возможность поиска любых объектов, автоматическое версионирование всех изменений, отсутствие (полное или практически полное) жёстких завязок на конкретные поля или сущности.<br />
* Полная ликвидация CGI.pm.<br />
* '''Минимум''' сложной программной логики в шаблонах. Шаблоны — это представление, а не контроллер!<br />
* Выделенный отдельно уровень локализации, не требующий для перевода на другой язык переписывать шаблоны.<br />
<br />
== Состояние проекта ==<br />
<br />
Bugzilla4Intranet — форк версии 3.6.4. Это не самая новая версия Bugzilla. Что это означает на данный момент:<br />
* <s>Пока что не поддерживается</s> обновление с новых версий Bugzilla до Bugzilla4Intranet. '''UPDATE:''' Уже поддерживается (в ветке 'beta'), схема БД совместима. Какие-то мелкие баги всё ещё возможны, но в целом, как минимум на MySQL, всё должно работать.<br />
* По пути доработки некоторые редкоиспользуемые фичи могли отвалиться — например, importxml.pl, миграция багов, какие-нибудь скрипты из contrib/, поддержка Oracle, тесты…<br />
* Часть возможностей, присутствующих в свежем оригинале, может отсутствовать в нашей версии, например:<br />
** Отсутствует группировка полей на форме поиска в fieldset’ы.<br />
** <s>Отсутствуют</s> Уже присутствуют сохраняемые отчёты.<br />
** Отсутствуют (и, скорее всего, добавлены не будут — фича странная и даже, возможно, вредная) «пользовательские теги» на багах, то есть теги, которые видят только пользователи, их создавшие.<br />
** <s>Отсутствует</s> Уже присутствует и улучшена поддержка SQLite — а именно, в отличие от оригинальной Bugzilla, можно использовать встроенный в SQLite полнотекстовый поиск FTS4, при передаче параметра &debug=1 работает вывод плана запроса, и можно использовать sqlite с contrib/bzdbcopy.pl. Пока в ветке sqlite.<br />
** Отсутствует поддержка одновременной Prev/Next навигации по нескольким спискам багов (параметр &list_id=…), ибо последний список багов хранится в Cookie, а не в БД.<br />
** Возможно, какие-то прочие фичи, в основном — мелкие.<br />
<br />
Зато — добавлено множество новых возможностей! Из крупных доработок можно отметить:<br />
* Интерфейс:<br />
** Новая более удобная форма постановки бага. Идея — разделение всех полей на две колонки: в левой, крупной — описание бага и большие текстовые поля, в правой — все мелкие поля с детальной информацией.<br />
** Небольшой редизайн формы редактирования бага. Поля отображаются не справа от своих названий в следующей колонке, а под названиями, и выводятся в 4 колонки, плавно уменьшающиеся до 2 и потом 1 с уменьшением ширины экрана (например, на мобильниках); комментарии отображаются во всю ширину экрана.<br />
** Улучшенный интерфейс Boolean Charts.<br />
** Более аккуратные стили практически на всех страницах.<br />
** Интеграция более свежего скина Mozilla.<br />
** Поддержка Gravatar-юзерпиков.<br />
** Приятный глазу HTML-формат почтовых уведомлений по багам.<br />
* Excel-импорт.<br />
* Улучшения работы с вложениями:<br />
** Добавление нескольких вложений к багу разом;<br />
** Возможность при добавлении вложения вставить текст или изображение прямо из буфера обмена;<br />
** Возможность скачать все вложения к багу в одном ZIP-архиве;<br />
** Базовый онлайн-просмотр офисных документов с помощью LibreOffice;<br />
** Показ приложенных изображений прямо внутри комментариев.<br />
* Улучшения Custom-полей и более мощные зависимости между полями:<br />
** Новые типы;<br />
** Доступность «обратных к полю типа BUG_ID отношений» в поиске и Excel-импорте;<br />
** Возможность делать custom поля зависимыми друг от друга;<br />
** Возможность не только показывать одно custom поле для нескольких значений контролирующего поля, а также и показывать одно и то же значение select-поля для нескольких значений контролирующего поля;<br />
** Возможность разрешить/запретить пустое значение (NULL, то есть, «---» для select-полей, просто пустое для прочих) в зависимости от значений другого поля (например, попродуктно);<br />
** Возможность включить/выключить копирование поля при клонировании багов, в том числе — в зависимости от значений другого поля (например, попродуктно);<br />
** Настройки значений по умолчанию для любых полей — как глобальных, так и зависимых от значений другого поля;<br />
** Все вышеперечисленные поля зависимостей могут быть как одинаковыми, так и разными. То есть NULL можно включать/выключать в зависимости от одного поля, значение по умолчанию — в зависимости от другого поля, клонирование — от третьего, наборы значений — от четвёртого, видимость — от пятого.<br />
** Все вышеперечисленные зависимости можно задавать для пустого значения поля;<br />
** Полностью убраны старые параметры, включающие/выключащие поля и задающие их значения по умолчанию (Administration &rarr; Parameters &rarr; Bug Fields). Теперь эти настройки нужно делать через общий интерфейс настройки полей;<br />
** Более аккуратная форма редактирования свойств полей;<br />
** Новые удобные интерфейсы редактирования зависимостей и наборов значений для каждого контролирующего значения прямо с его страницы (то есть, например, включать/выключать поля прямо со страницы продукта);<br />
** Аналогично 4.x можно деактивировать старые версии, milestone’ы, компоненты;<br />
** Target Milestone можно перенастроить так, чтобы значения по умолчанию выбирались в зависимости не от продукта, а от любого другого select-поля (например, от компонента);<br />
** Продукты можно перемещать между классификациями со страницы продукта, а не через отдельный нетривиальный интерфейс «Reclassify».<br />
* «Валидаторы» изменений багов, то есть — настраиваемые предупреждения / ошибки.<br />
* Представление сохранённых поисков в виде MySQL’ных View, позволяющих запрашивать информацию внешними инструментами и с учётом прав доступа.<br />
* Страницы массовой фиксации трудозатрат (в том числе — задним числом и от чужого имени при наличии соответствующего разрешения).<br />
* RSS-ленты комментариев и активности по багам и поискам.<br />
* Различные новые поля в поиске, в том числе — поля связанных багов.<br />
* Возможность правки комментариев, Diff’ы в истории изменений и письмах.<br />
* Возможность отключения полей «Platform» и «Operating system», возможность настраивать регулярные выражения для автоопределения их значений на основе User-Agent.<br />
* Улучшения интерфейсов настройки прав доступа, несколько облегчающие работу с оными в Bugzilla (модель разграничения доступа в Bugzilla весьма неочевидная):<br />
** Редизайн формы настроек доступа к продукту.<br />
** Новый интерфейс редактирования групп, отображающий полный список пользователей, так или иначе входящих в группу и/или имеющих права включения других пользователей в эту группу. То есть, для редактирования можно «заходить» со стороны группы, а не со стороны каждого входящего в неё пользователя.<br />
** Детальная информация о том, какие разрешения дают группы, на странице списка групп в панели администрирования и на странице с информацией о собственных группах (Preferences &rarr; Permissions).<br />
* Улучшения ответа на баги через почту — возможность использовать заголовки полей, возможность поставить несколько вложений, адекватная диагностика при ошибках, фильтрация автоматических ответов (чтобы, например, не получалось бесконечного цикла отправки комментариев при установке пользователем ответа типа «я в отпуске до XX.XX»).<br />
* Новый «REST-JSON»/«REST-XML» API, принимающий входные параметры как обычные параметры POST или строки запроса, отвечающий JSON или XML, способный перехватывать любые ошибки и передавать их в ответе в виде имён (а не ужасных прибитых гвоздями численных кодов).<br />
* Бэкпортированы веб-сервисы из Bugzilla 4.4.<br />
<br />
Кроме новых возможностей, уже проведена большая работа по рефакторингу наслоений оригинального кода:<br />
* Полностью переписан код, отвечающий за поиск. Даже сложные запросы поиска строятся так, что СУБД может максимизировать использование индексов и выполнять их оптимально.<br />
* Приведена в норму структура базы данных — теперь все целочисленные первичные ключи имеют одинаковый тип INT, а не разные SMALLINT/MEDIUMINT/INT, а все select-поля хранят ID значений вместо самих значений, и NULL вместо строкового «---», используемого как NULL в оригинале (а также вместо версии «unspecified»); кроме того, практически всем VARCHAR колонкам проставлен максимальный лимит длины (255), чтобы не заниматься крохоборством и не увеличивать максимальную длину сначала до 20, потом до 64, потом до 128… VARCHAR, как следует из названия, имеет переменную длину и «лишнего» места не занимает.<br />
* Полностью переписана логика сохранения багов в БД — теперь код работает корректнее и эффективнее, кроме того, для работы с моделью более не нужно обращаться к контроллеру (*.cgi).<br />
* Ликвидирован hard-code возможных значений для поля «See Also». В оригинале 3.6 данное поле может содержать только URL определённого вида, соответствующего '''жёстко заданным в коде''' (!!!) шаблонам для разных баг-трекеров. В оригинале 4.4 авторы решили это отрефакторить и… что бы вы думали? Оставили завязку в коде, но вынесли каждый шаблон в отдельный класс! Зачем так сделано — загадка, нормальное решение — простой настраиваемый набор регулярных выражений в параметрах.<br />
* Ликвидирован (по меньшей мере, почти) hard-code названий статусов (теперь их можно, например, назвать русскими именами).<br />
* Ликвидирован hard-code классов обработчиков заданий очереди, не позволяющий без модификации кода ядра добавлять собственные типы заданий в расширениях.<br />
* Из шаблонов вынесены некоторые крупные куски программной логики, а также объёмные JavaScript’ы.<br />
* Из шаблонов вынесена некоторая часть сообщений локализации (описания полей, «термины»); убраны сверхдлинные IF..ELSEIF’ы, которыми выбирались сообщения об ошибках.<br />
* Реализовано клиентское кэширование зависимостей между значениями полей, что даёт браузеру возможность быстрее открывать формы редактирования и поиска багов.<br />
* Реализовано серверное кэширование метаданных между запросами.<br />
* Добавлена поддержка полнотекстового поиска Sphinx, который работает гораздо быстрее и качественнее, чем MySQL FULLTEXT.<br />
* Добавлена простая реализация standalone HTTP-сервера на основе HTTP::Server::Simple, в духе Plack; добавлены init-скрипты для запуска данного сервера и демона очереди заданий. Рекомендуется использовать HTTP::Server::Simple + nginx в качестве фронтенда к нему вместо работы под mod_perl, так как mod_perl создаёт большое количество различных проблем, в том числе мистических багов, не проявляющих себя в «голом» Perl’е.<br />
* Добавлена возможность корректной перезагрузки всех модулей и расширений на каждом запросе, что сильно упрощает отладку и разработку — больше не нужно после внесения каждого изменения перезапускать сервер.<br />
* Полностью переписана система расширений, новая создана по образу и подобию MediaWiki и позволяет перезагружать на каждом запросе в том числе и код расширений. Планируется добавление возможности расширениям создавать собственные точки входа (*.cgi скрипты) внутри собственной директории, а не в корне установки (возможно, для этого точки входа будут превращены из *.cgi файлов в классы-контроллеры).<br />
* По умолчанию вложения '''вообще''' не хранятся внутри БД (BLOB’ы — mauvais ton), хотя возможность хранения оставлена для совместимости с оригиналом.<br />
* Задолго до попытки реализации аналогичной фичи в оригинале, ещё в 2010 году, добавлен Redirect после сохранения изменений в баг, не дающий вам случайно перепослать POST запрос при нажатии F5. Кроме того, в оригинальной Bugzilla это не работает в Internet Explorer, а у нас — работает везде.<br />
* HTML-формат почты также появился задолго до его реализации в оригинальной Bugzilla.<br />
* Полностью изгнан YAHOO UI — пожалуй, худший из всех JS-фреймворков. Мало того, что он худший — зачем нужно JS-фреймворк в Bugzilla, вообще не очень понятно.<br />
* Как и в оригинале, реализована подсказка имён пользователей; правда, в связи с изгнанием YAHOO UI реализована она на других технологиях.<br />
* Практически изгнан CGI.pm: функции cgi->param() и cgi->cookie() не используются НИГДЕ; вместо них параметры и куки читаются из хешрефов Bugzilla->input_params и Bugzilla->cookies.<br />
* Удалены различные устаревшие процедурные интерфейсы типа LookupNamedQuery(), is_open_state() и тому подобные.<br />
<br />
Прочие идеи:<br />
* Свои типы объектов (в процессе реализации в ветке classes).<br />
* UI для работы с вьюхами (правда, чтобы багзилла создавала mysql-пользователей, ей нужен рутовый mysql пароль).<br />
* Add me to CC list, добавление флага на странице добавления аттача…<br />
* …Либо интегрировать форму добавления аттача прямо на форму бага!<br />
* (готово) Отключение/включение Silent в параметрах.<br />
* Показывать историю изменений багов прямо в ленте комментариев.<br />
* Интеграция с VCS — показывать коммиты прямо в ленте комментариев.<br />
* Парсить и сохранять ссылки на баги в комментариях к другим багам и показывать на их основе обратные ссылки.<br />
* Массовая правка багов прямо из таблицы списка багов + возможно, пересортировка.<br />
* (готово) Заредизайнить форму редактирования бага.<br />
* Переименовать Checker’ы в «Валидаторы».<br />
* (готово) Какой-нибудь вариант «Responsive Layout».<br />
* Рассмотреть возможность утаскивания какого-нибудь функционала из https://github.com/bayoteers/.<br />
* Вмержить «недавние поиски» из 4.x?<br />
* Показывать «недавние поиски»?<br />
* Дать возможность экстенжнам создавать свои контроллеры (условно говоря, *.cgi скрипты).<br />
* (готово) Убрать из ядра CUSTIS-специфичные фичи.<br />
* Что-то сделать с editemailin.cgi.<br />
* Кастомизация картинок создания бага и т. п.<br />
<br />
== Установка ==<br />
<br />
Вначале нужно установить Perl модули — просто вызовом команды <tt>cpan</tt>, она же <tt>perl -MCPAN -eshell</tt> (на случай, если в вашей системе не окажется исполняемого файла cpan).<br />
<br />
Минимально требуемые модули:<br />
<br />
cpan {{CPAN|Date::Parse}} {{CPAN|DBI}} {{CPAN|CGI}} {{CPAN|DateTime}} {{CPAN|Email::Address}} \<br />
{{CPAN|Template}} {{CPAN|JSON}} {{CPAN|Email::MIME}} {{CPAN|Test::Taint}} \<br />
{{CPAN|XML::Twig}} {{CPAN|Text::TabularDisplay}} {{CPAN|Email::Sender}} \<br />
{{CPAN|Lingua::Translit}} {{CPAN|Archive::Zip}} \<br />
{{CPAN|DBD::mysql}} {{CPAN|Image::Magick}}<br />
<br />
{{CPAN|Image::Magick}} обычно можно ставить как пакет вашего любимого Linux-дистрибутива, например <tt>perlmagick</tt> в Debian. Если вы используете PostgreSQL, то вместо {{CPAN|DBD::mysql}} вам нужен {{CPAN|DBD::pg}}.<br />
<br />
В тестах {{CPAN|GD}} есть старый баг, который никак не пофиксят — 1 тест не проходит и установка не удаётся. Так что, пока его не пофиксят, GD ставим с -f (force).<br />
<br />
Опционально, но желательно:<br />
<br />
cpan -f {{CPAN|GD}}<br />
cpan {{CPAN|Template::Plugin::GD}} {{CPAN|GD::Graph}} {{CPAN|GD::Graph3d}} \<br />
{{CPAN|MIME::Parser}} {{CPAN|Mail::RFC822::Address}} {{CPAN|Email::Reply}} \<br />
{{CPAN|Devel::StackTrace}} {{CPAN|Email::MIME::Attachment::Stripper}} \<br />
{{CPAN|SOAP::Lite}} {{CPAN|JSON::RPC}} {{CPAN|JSON::XS}} {{CPAN|Text::CSV}} {{CPAN|HTML::Strip}} \<br />
{{CPAN|Text::CSV_XS}} {{CPAN|Spreadsheet::ParseExcel}} {{CPAN|Spreadsheet::XLSX}} \<br />
{{CPAN|Lingua::Stem::Snowball}} {{CPAN|Math::Random::Secure}} {{CPAN|TheSchwartz}} \<br />
{{CPAN|Daemon::Generic}} {{CPAN|HTTP::Server::Simple}} {{CPAN|Net::Server}} {{CPAN|Sys::Sendfile}}<br />
<br />
После установки данных модулей создайте MySQL-базу данных и пользователя, имеющего к ней полный доступ, запустите '''./checksetup.sh''' в директории установки Bugzilla и следуйте инструкциям.<br />
<br />
При обновлении — просто обновите код и также запустите '''./checksetup.sh'''. Нужные изменения в БД будут внесены автоматически.<br />
<br />
== История улучшений ==<br />
<br />
Список доработок актуален на дату: 2012-12-05 (5 декабря 2012).<br />
<br />
=== Улучшения оригинальной Bugzilla 3.0 по сравнению с 2.x ===<br />
<br />
Bugzilla 3 имеет много преимуществ — авторы наконец-то осилили и mod_perl, и транзакции, и работу в UTF-8, и некоторые возможности расширения, и внешний вид посимпатичнее, и проверки дублирования изменений, и запросы через DBI (а не SendSQL()), и нормальные шаблоны для писем (если, конечно, Template Toolkit считать нормальным вообще).<br />
<br />
В то же время, авторы Bugzilla начинают понимать, что возможности расширения в Bugzilla необходимы, и постепенно добавляют таковые. В 3.0 появляются Custom Fields (дополнительные поля у багов) и чуть-чуть хуков, в 3.2 появляется настраиваемый жизненный цикл бага, поддержка расширений авторизации и ещё чуть-чуть хуков. Правда, хуков там всё равно мало, и как пишут сами авторы, они не очень красивые и, вероятно, в будущем будут переделаны. Будущее — это 4.0, которая, скорее всего, вырастет когда-нибудь из HEAD’а, который обычно представляет собой unstable версию с нечётным индексом (3.1, 3.3, 3.5 и т.п). В 4.0 обещали хуки для всего, чего душе угодно, но пользоваться ими вряд ли кто-то будет, учитывая то, какой кошмар царит в головах авторов, судя по «новой системе расширений», добавленной в 3.6.<br />
<br />
Производительность и надёжность (по сравнению с 2.x прогресс огромен):<br />
<br />
* mod_perl вместо CGI — улучшает производительность. Правда, изначальные заверения о том, что «теперь багзилла будет летать», как оказалось, <s>несколько</s> не соответствуют действительности. Причина — тому, кто юзает {{CPAN|Template::Toolkit}}, мод_перл — мёртвому припарка. Выигрыш в производительности от mod_perl с лихвой компенсируется усложнением TT-шных шаблонов.<br />
* InnoDB вместо MyISAM — ошибок «…table XXX is marked as crashed…» больше нет.<br />
* транзакции вместо блокировок таблиц, а также внешние ключи (дождались!)<br />
* полнотекстовый поиск по багам с морфологией вместо поиска по подстроке (которому, кстати, сопутствовали долгие блокировки при поисках)<br />
* теперь вся багзилла работает в UTF-8 => отпадают все мыслимые проблемы с кодировками<br />
* убрано множество кривых решений вроде файла data/nomail с логинами юзеров, которым не надо слать почту (теперь в настройках юзера админ может задать bugmail disabled), data/versioncache с перловым хешем мешающим обновлять словари (типа кэш какой-то) и т. п.<br />
<br />
Новые фичи:<br />
<br />
* Интерфейс! :) более красивый и сексуальный во всех аспектах.<br />
* Можно добавлять аттачи и ставить флаги непосредственно при вводе нового бага.<br />
* Нормальная защита от двойного сабмита любых форм.<br />
* Дополнительные заголовки в письмах от Bugzilla.<br />
* Email-управление багами.<br />
* «Разделяемые» хранимые запросы поиска.<br />
* Несколько более гибкая система прав (например, editbugs и canconfirm можно ставить на отдельные продукты).<br />
<br />
=== Доработки 2.x &rarr; /dev/null ===<br />
<br />
Следующие доработки были внесены нами давно в 2.x, и отмерли по той причине, что в 3.0 реализованы авторами:<br />
<br />
* Настройка списка CC по умолчанию для каждого компонента.<br />
* Исправление глючных прав выбора компонентов — {{Bug|19597}} более неактуален.<br />
* Настройка Milestone по умолчанию.<br />
* Нормальная защита от двойного сабмита любых форм — то есть от дублирования багов и изменений.<br />
* Видоизменена в Bugzilla 3.x работа с кодировками — появился UTF-8. Соответственно отмирают:<br />
** <strike>Страницы в cp1251 (HTML Content-Type)</strike>.<br />
** <strike>chart.cgi: Перекодировка названий из Param(defaultcharset) в utf8</strike>.<br />
** <strike>report.cgi: Перекодировка названий строк и столбцов из Param(defaultcharset) в utf8</strike>.<br />
** <strike>showdependencygraph.cgi: перекодировка краткого названия из Param(defaultcharset) в utf8</strike>.<br />
** <strike>Bugzilla::DB::Mysql: обмен с базой в cp1251 (SET NAMES cp1251)</strike>.<br />
<br />
=== Легенда ===<br />
<br />
Легенда к списку доработок, разбитому по статусу относительно [[Bugzilla]] 3.<br />
<br />
* '''Ожидает проноса или решения о его ненужности''',<br />
* Пронесено,<br />
* <strike>Не требуется / похоронено</strike>.<br />
<br />
По категории:<br />
<br />
<div id="bz_legend"><br />
* {{/F}} Доработки объектного ядра, кэширование, оптимизация [<html><a id="hide_bz_core" href="javascript:bz_hide_show('bz_core', 0)">скрыть</a><a id="show_bz_core" style="display: none" href="javascript:bz_hide_show('bz_core', 1)">показать</a></html>]<br />
* {{/N}} Все новые фичи, кроме доработок поиска [<html><a id="hide_bz_feature" href="javascript:bz_hide_show('bz_feature', 0)">скрыть</a><a id="show_bz_feature" style="display: none" href="javascript:bz_hide_show('bz_feature', 1)">показать</a></html>]<br />
* {{/S}} Доработки поиска, отчётов и групповых операций [<html><a id="hide_bz_search_feature" href="javascript:bz_hide_show('bz_search_feature', 0)">скрыть</a><a id="show_bz_search_feature" style="display: none" href="javascript:bz_hide_show('bz_search_feature', 1)">показать</a></html>]<br />
* {{/U}} Доработки юзабилити [<html><a id="hide_bz_usability" href="javascript:bz_hide_show('bz_usability', 0)">скрыть</a><a id="show_bz_usability" style="display: none" href="javascript:bz_hide_show('bz_usability', 1)">показать</a></html>]<br />
* {{/NU}} Новые фичи, связанные также с юзабилити [<html><a id="hide_bz_usability_feature" href="javascript:bz_hide_show('bz_usability_feature', 0)">скрыть</a><a id="show_bz_usability_feature" style="display: none" href="javascript:bz_hide_show('bz_usability_feature', 1)">показать</a></html>]<br />
* {{/C}} Доработки, специфичные для практик использования Bugzilla внутри CustIS [<html><a id="hide_bz_custis_specific" href="javascript:bz_hide_show('bz_custis_specific', 0)">скрыть</a><a id="show_bz_custis_specific" style="display: none" href="javascript:bz_hide_show('bz_custis_specific', 1)">показать</a></html>]<br />
<html><br />
<script language="JavaScript"><br />
function bz_hide_show(className, showhide)<br />
{<br />
if (document.getElementsByClassName)<br />
{<br />
var el = document.getElementsByClassName(className);<br />
var e, p;<br />
for (var i in el)<br />
{<br />
e = el[i];<br />
while (!(!e || (''+e.nodeName).toLowerCase() == 'li'))<br />
e = e.parentNode;<br />
if (e)<br />
{<br />
p = e;<br />
while (!(!p || p.id == 'bz_legend'))<br />
p = p.parentNode;<br />
if (!p)<br />
e.style.display = showhide ? '' : 'none';<br />
}<br />
}<br />
document.getElementById('hide_'+className).style.display = showhide ? '' : 'none';<br />
document.getElementById('show_'+className).style.display = showhide ? 'none' : '';<br />
}<br />
}<br />
</script><br />
</html><br />
</div><br />
<br />
Под заголовком «доработки X.Y» понимаются доработки, внесённые уже после объединения CustIS Bugzilla с оригинальной версией.<br />
<br />
=== Доработки 2.x &rarr; 3.2 ===<br />
<br />
Список доработок, существовавших в «CustIS Bugzilla» на момент объединения её с mainstream-версией 3.2.<br />
<br />
Всем спасибо за прохождение [[Bugzilla:опрос_по_функциям|опроса по часто используемым функциям Bugzilla]].<br />
<br />
Пронесены в Bugzilla 3.2:<br />
<br />
* {{/C}} Атрибут «Договор» — {{Bug|14378}}, договор по умолчанию у каждого продукта. [[Значения атрибута Договор (Bugzilla)]].<br />
* {{/F}} Возможность ограничения значений Custom Field не одним значением контролирующего поля, а несколькими — {{Bug|53617}}.<br />
* {{/C}} Раскрытие почтовых групп в CC — {{Bug|12253}}.<br />
* {{/U}} Content-disposition вложений — {{Bug|38801}}.<br />
* {{/N}} Страница добавления членов в группы — {{Bug|23445}}.<br />
* {{/N}} Добавление предыдущих Assignee и QA Contact в список CC к багу.<br />
* {{/N}} Текстовые вложения — {{Bug|15001}}, ''в том числе при постановке бага'' — {{Bug|53638}}.<br />
* {{/N}} Запись трудозатрат при создании Attachment-а — {{Bug|19052}}.<br />
* {{/N}} Напоминания о вводе трудозатрат и запросах флагов — {{Bug|17481}}.<br />
* {{/U}} Блокирование клонируемого бага клонированным, а не наоборот.<br />
* {{/N}} Возможность клонирования бага не только из описания, а также из любого комментария.<br />
* {{/N}} Разрешение создания багов в состояниях ASSIGNED и RESOLVED FIXED <strike>и соответствующие пользовательские настройки</strike> ({{Bug|17976}})<br />
* <s>{{/N}} Combo-box выбора человека, у которого спрашиваем про '?'-флаг — {{Bug|10837}}, {{Bug|57482}}.</s><br />
* {{/NU}} Автодополнение пользователей в большинстве мест, в том числе во флагах, с мультивыбором. Реализация '''отличается''' от реализации в Bugzilla 4.x {{Bug|91840}}<br />
* {{/N}} «Silent» комментарии ''и вложения!'' — {{Bug|14372}}.<br />
* {{/C}} Пользовательская настройка 'Redirect me to my Bugzilla' — {{Bug|17975}}, в том числе влияние её на почту о флагах — {{Bug|66740}}.<br />
* {{/N}} Страница с настройками почты по умолчанию.<br />
* {{/C}} Страница «TodayWorktime» — {{Bug|13772}}.<br />
* {{/NU}} Предварительный просмотр комментариев — {{Bug|15119}}. В новом виде, прямо под полем ввода — отладка в баге {{Bug|53606}}.<br />
* {{/C}} Рассылка отчётов о трудозатратах по почте — {{Bug|15148}}.<br />
* {{/U}} Шрифт Arial в отчётах.<br />
* {{/U}} Индикаторы продукта, компонента и т. п. в письмах, ''в том числе в письмах о флагах!'' (prod: PROD.COMP) — {{Bug|15607}}.<br />
* <strike>Хранимая процедура LoadMyWorkTime()</strike><br />
* {{/U}} Не сбрасывать оставшееся время при закрытии багов,<br />
* {{/U}} show_bug.cgi:<br />
** Показ % завершённых зависимостей бага — {{Bug|28333}}.<br />
** Показ изначального QA contact.<br />
* {{/N}} report.cgi: возможность измерения не только количества багов, но и трудозатрат.<br />
* {{/U}} showdependencygraph.cgi:<br />
*: alt="ID: bugtitle" вместо alt="bug #bugid",<br />
* {{/U}} Более богатая раскраска багов по состояниям,<br />
* {{/S}} summarize_time.cgi: показывать только свои трудозатраты по багу — {{Bug|17977}}.<br />
* {{/N}} userprefs.cgi: показ и изменения списков наблюдения (своих и за собой) — {{Bug|19347}}.<br />
* <strike>Bugzilla::DB::Mysql: убрано CAST() AS BINARY для INSTR() для MySQL>=4</strike>,<br />
* <strike>template/en/default/attachment/show-multiple.html.tmpl: убран iframe</strike>,<br />
* {{/N}} Комментарии о клонированных багах в клонируемых багах.<br />
* {{/U}} Отображение ссылок на баги в комментах и списках зависимых багов с разными стилями в зависимости от состояния, включая ''номера багов в списках'' и ''почтовые сообщения'' — {{Bug|53833}}!<br />
*# просто номер для багов в статусе UNCONFIRMED, NEW, ASSIGNED, REOPENED<br />
*# зачеркнутый номер для багов в статусе RESOLVED<br />
*# зачеркнутый номер с пунктирной рамочкой для багов VERIFIED<br />
*# зачеркнутый номер со сплошной рамочкой для CLOSED<br />
* {{/NU}} Поля Hours Worked и Status Whiteboard в форме создания бага.<br />
* {{/U}} Ссылки на комментарии, соответствующие установке флага, на флагах.<br />
* {{/S}} Поддержка <code>%user%</code> при поиске по Boolean Charts:<br />
*: Отправлено в [https://bugzilla.mozilla.org/show_bug.cgi?id=41651 Mozilla Bug 41651].<br />
* {{/F}} Версия по умолчанию для каждого компонента. ''Плюс исправление кривости CGI::cookie(), ведущей к несохранению версии из формы.''<br />
* <strike>Интеграция с [[SharePoint]]</strike>,<br />
* {{/C}} Интеграция с [[ViewVC]],<br />
* {{/N}} Интеграция с MediaWiki — {{Bug|13593}}.<br />
*: Плюс, новые Wiki добавлять теперь легко, ссылки можно писать в вики-стиле: <nowiki>wiki:[[Ссылка с пробелами и "любой мутью"]]</nowiki><br />
*: Плюс из вики-ссылок удаляются маркеры цитирования и переводы строк — {{Bug|68347}}.<br />
<br />
=== Доработки 3.2 ===<br />
<br />
* {{/F}} Фиксы производительности — в частности см. [http://yourcmc.ru/wiki/index.php/Template_Toolkit#.C2.AB.D0.9D.D0.B5_.D0.B8.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D1.83.D0.B9.D1.82.D0.B5_Template_Toolkit.21.C2.BB Не используйте Template Toolkit!]<br />
* {{/F}} Доработки mod_perl.pl для виндов, и для никсов тоже — убран {{CPAN|Apache2::SizeLimit}}.<br />
* {{/C}} Защита багов от рассылки изменений (в любой роли — CC, Assignee, Reporter, QA) определённым юзерам (по группам) — {{Bug|38616}}.<br />
* {{/U}} Автоматическое проставление Assignee=ТЫ при выборе статуса ASSIGNED и проставление QA=ТЫ при выборе VERIFIED, но ''не при выборе'' CLOSED мимо VERIFIED — {{Bug|53754}}.<br />
* {{/N}} Управление багами по почте, фильтры для удаления аутлукового говна из писем-ответов, поддержка вложений в почте, поддержка HTML входящих писем, поддержка почтовых алиасов пользователей, скрипт загрузки алиасов из LDAP, поддержка полей по умолчанию для спецадресов типа helpdesk-smth — {{Bug|47074}}, {{Bug|53608}}.<br />
* {{/N}} Интерфейс отписки от уведомлений по багу (то есть из CC) одним кликом по ссылке из письма (no more spam!) — {{Bug|46701}}.<br />
* {{/S}} RSS-лента комментариев к багам — {{Bug|16210}}, а также и активности по багам, оптимизация — {{Bug|53687}}.<br />
* {{/U}} Разделитель как «.» так и ", " при вводе времени.<br />
* <strike>{{/S}} «Стрелочки» рядом с заголовками в таблице списка багов, показывающие порядок сортировки.<br />Взято из [https://bugzilla.mozilla.org/show_bug.cgi?id=164009 Mozilla Bug 164009].</strike><br />
* {{/U}} Если severity CRITICAL или BLOCKER, то письмо приходит с красной строчкой сверху, в теме письма [CRITICAL] или [BLOCKER] после номера бага, а важность письма — Высокая и приоритет — 1.<br />
* {{/S}} По клику ''Show bug ID list'' показ списка ID багов через пробел на странице поиска.<br />
* {{/U}} Подсветка красным цветом поля ввода времени в случае ввода некорректного значения, и ловля NaN — изменения закоммитит, но без времени.<br />
* {{/N}} Массовый Excel-импорт багов — {{Bug|42133}}. Справка: [[Bugzilla#Импорт багов из Excel-листов]].<br />
* {{/S}} Поддержка русской морфологии в полнотекстовом поиске MySQL — {{Bug|46221}}.<br />
* {{/C}} Ссылки на сотрудников в Plantime вместо mailto: (префикс настраивается) — {{Bug|46053}}.<br />
<br />
=== Доработки 3.4 ===<br />
<br />
Bugzilla 3.4 установлена в качестве боевой ''30 августа 2009''. Всем спасибо за боевое «гамма-тестирование» (потому, что даже не совсем бета). :)<br />
<br />
* {{/N}} Возможность создания багов в состоянии RESOLVED и выбора Resolution при этом — {{Bug|53758}}.<br />
* {{/N}} Показ списков CC а-ля [https://bugzilla.mozilla.org/ Mozilla Bugzilla] — сначала в div’е со скроллером, и из него можно скопировать в буфер, а по нажатию edit — multiple selection box — {{Bug|54165}}.<br />
* {{/U}} Сохранение порядка сортировки при редактировании запроса — {{Bug|54380}}.<br />
* {{/U}} Стили ссылок и подсказок в графах и деревьях — {{Bug|54382}}.<br />
* {{/N}} Редактируемость Default CC — {{Bug|55095}}.<br />
* {{/U}} Радиобатон для выбора файл/текст вложение — {{Bug|53850}}.<br />
* {{/N}} Текстовые вложения при постановке бага — {{Bug|53638}}.<br />
* {{/F}} Фикс для кривого {{CPAN|Encode::MIME::Header}} — см. {{Bug|53764}}. Актуально при использовании Exchange.<br />
* {{/U}} Выбор положения «подвала» с сохранёнными запросами — сверху, снизу или и там, и там — {{Bug|53697}}.<br />
* {{/N}} Copy-paste для tab-separated таблиц с отрисовкой в ASCII. {{Bug|55876}}<br />
* {{/U}} Изменён метод формирования списка CC при клонировании бага. {{Bug|55966}}.<br />
* {{/U}} Submit anyway, как заявлено, только my changes, а не значения всех полей со старой формы. {{Bug|56327}}.<br />
* {{/U}} «Умные» поля Version, Component и Target Milestone в групповом редактировании багов. То есть на выбор предоставляется <s>пересечение</s> (твою мать, тоже мне «умные» — это были тупые, «умные» — это объединение) множеств доступных значений для всех выбранных продуктов. {{Bug|56536}}.<br />
* {{/F}} Принудительная перезагрузка формы редактирования бага в Firefox при нажатии Reload. Баг стоит на фаерфокс на багзилле мозиллы, но это один из багов, о котором «nobody cares», тянется он уже 8 лет, кажется. {{Bug|57315}}.<br />
* {{/U}} Ввод рабочего времени в формате ЧЧ:ММ. {{Bug|58021}}.<br />
* {{/S}} Полностью переделанное построение графов зависимостей — баги разбиваются на кластеры и отрисовываются в svg+png. {{Bug|53609}}.<br />
* {{/U}} Фокус на поле «quick search» на Bugzilla Main Page. {{Bug|58301}}.<br />
* {{/F}} Красивые страницы ошибок, с красной рамочкой и даже с котёнком и пожарной машиной в случае, если ошибка в коде. В том числе правильная ловля ошибок компиляции, в том числе правильная обработка ошибок в вебсервисах. {{Bug|58633}}.<br />
* {{/N}} Настройка на уровне продукта, включающая предупреждения в случае, если в баг этого продукта СПИСЫВАЕТСЯ время. То есть «предпочитать не списывать время сюда». {{Bug|59357}}. {{Bug|59357}}.<br />
* {{/F}} Детализация сообщений об ошибках неправильно выбранных полей. {{Bug|61456}}.<br />
* {{/S}} Колонки «Blocked» и «Depends on» в поиске. {{Bug|61979}}.<br />
* {{/C}} Поддержка [[ShowTeamWork]] в RSS-лентах. (бага нет)<br />
* {{/U}} Стили описания запроса поиска. {{Bug|62248}}.<br />
* {{/F}} Ликвидация дублирования багов при неудачном создании attachment’а (завернули в транзакцию). {{Bug|63152}}.<br />
* {{/S}} Колонки «Flags» и «Requests» в поиске. {{Bug|62964}}.<br />
* {{/F}} Разрешение правки значений Custom полей не только admin’ам, а группе editfields. {{Bug|63441}}.<br />
* {{/NU}} Сильно переделан быстрый поиск, в сторону большей интуитивности синтаксиса (он был безумный, и код тоже). {{Bug|63855}} и не только.<br />
* {{/N}} Отправка почты в формате HTML+plaintext (multipart/alternative), а не только plaintext, в том числе и о флагах. Кроме того, переделаны проверки безопасности, так что теперь письма приходят, но ровно с тем количеством информации, которое необходимо. {{Bug|53624}}, {{Bug|53647}}, {{Bug|64616}}.<br />
<br />
=== Доработки 3.6 ===<br />
<br />
Bugzilla 3.6 установлена в качестве боевой ''10 июня 2010''.<br />
<br />
* {{/U}} Submit формы бага по Ctrl-Enter. {{Bug|64559}}, {{Bug|65729}}.<br />
* {{/F}} Selenium-тесты для Bugzilla и просто автотесты для вебсервисов. {{Bug|64428}}.<br />
* {{/U}} Javascript-сортировка списка багов на стороне клиента (украдено из https://bugzilla.mozilla.org/).<br />
* {{/NU}} Предлагать вариант пользователя при опечатке (на основании расстояния Левенштейна) при доступности хранимой процедуры LEVENSHTEIN. {{Bug|64855}}.<br />
* {{/F}} При внесении изменений или постановке багов, теперь происходит перенаправление на страницу бага, а не показ страницы бага самим <tt>process_bug.cgi</tt>. Эффективно это означает, что после изменений теперь всегда можно обновлять страницу (F5), и повторно изменения отправляться не будут — {{Bug|64562}}.<br />
* {{/F}} Полностью выкинута «новая система расширений», внесённая в 3.6, и добавлена своя. Ибо она была совершенно ужасна, хотя и выросла из относительно разумной идеи. Это не говоря о несовместимости со старым, проверенным, хотя и не очень красивым методом. Своя — совместима и сделана на основе «best practices», взятых из MediaWiki. Честно — когда я это увидел, оно меня убило — я не знал даже, что так в Perl’е вообще можно делать. И лучше бы не узнавал. Описано в {{Bug|40933}} в районе объединения с 3.6.<br />
* {{/U}} Угадывание кодировки текстовых вложений и показ юникодных с правильной — {{Bug|65730}}.<br />
* {{/S}} Отчёты — возможность измерения не только количества багов, но и трудозатрат, в том числе затраченного времени — {{Bug|65839}}.<br />
* {{/U}} Фокус на поле выбора юзеров / кнопке Confirm на странице подтверждения выбора пользователей. {{Bug|65880}}.<br />
* {{/C}} Раскрытие «групповых пользователей» при установке на них флага (ставится много флагов на подписанных). {{Bug|66094}}.<br />
* {{/U}} Добавление ссылки на аттачмент при клонировании бага из коммента с аттачментом. {{Bug|66177}}.<br />
* {{/U}} Добавление пустых значений в отчёты (таблицы/графики), регистронезависимость группировки в отчётах, рефакторинг группировки. {{Bug|66350}}.<br />
* {{/C}} Системная настройка снятия флагов при закрытии бага. {{Bug|68430}}.<br />
* {{/U}} Сортировка пользовательских настроек по алфавиту.<br />
* {{/N}} Массовое обновление багов из Excel. {{Bug|68621}}.<br />
* {{/C}} Форма для фиксации трудозатрат задним числом и от чужого имена, и распределения часов. Права на эту форму — группа '''worktimeadmin'''. {{Bug|68921}}, [[Bug 68921]].<br />
* {{/N}} Настройка компонентов «Open for bug entry», по аналогии с закрытием продуктов. {{Bug|68921}}.<br />
* {{/C}} Связь продуктов — внешний &larr; внутренний. {{Bug|68921}}.<br />
* {{/F}} Блокировка строки бага (SELECT FOR UPDATE) при обновлении. {{Bug|69012}}.<br />
* {{/NU}} Пользовательская настройка кодировки и разделителя для экспорта и импорта CSV. {{Bug|69766}}.<br />
* {{/F}} Возможность превращения Bugzilla-поисков во вьюшки БД с доступом извне. {{Bug|61728}}.<br />
* {{/F}} Настройка копирования/некопирования значения кастом поля при клонировании бага. {{Bug|69325}}.<br />
* {{/F}} Численный тип кастом полей. {{Bug|55655}}.<br />
* {{/F}} Добавление селект-полей в фильтры поиска + рефакторинг зависимостей полей/значений. {{Bug|69481}}.<br />
* {{/N}} Проверки («предикаты») корректности изменений багов. {{Bug|68921}}, {{Bug|61225}}, {{Bug|65361}}, [[Bugzilla: проверки изменений багов]].<br />
* {{/NU}} Пользовательская настройка влияния Silent на почту о флагах. {{Bug|72510}}.<br />
* {{/U}} Письма о флагах теперь приходят со ссылкой сразу на правильный коммент бага. {{Bug|71288}}.<br />
* {{/F}} Корректная валидация значений полей при обновлении багов:<br />
** Не требовать прав на баг, связанный полем Bug ID, при обновлении доступного бага. {{Bug|72149}}.<br />
** Общий механизм проверки значений зависимых полей в зависимости от значений контролирующих полей, интегрированный с бывшей формой «Verify New Product Details». {{Bug|61456}}.<br />
** Очищать значения полей, не показываемых после изменений других полей. {{Bug|63249}}.<br />
* {{/S}} Колонка «Первый коммент» в поиске. {{Bug|71955}}.<br />
* {{/F}} Несколько функций API для работы со значениями полей. Плюс новый вид RPC — принимает запросы по REST, отвечает простым видом XML, причём все ошибки отлавливаются и включаются в ответ. {{Bug|70168}}, [[API_багзиллы_для_внешних_систем]].<br />
* {{/F}} Лимит 255 символов на значения строковых Custom полей. Сделано ранее, всплывало в {{Bug|72711}}.<br />
* {{/S}} Печать SCRUM-карточек из списка багов. {{Bug|45485}}.<br />
* {{/C}} Автоматическое проставление значений поля «внешний баг» при клонировании багов во внешние/внутренние продукты и кнопочки клонирования. {{Bug|63249}}, {{Bug|69514}}.<br />
* {{/S}} Использование PostgreSQL’евского полнотекстового поиска, сортировка по релевантности при быстром поиске. Исправления всех доработок для совместимости с PostgreSQL. {{Bug|72826}}, {{Bug|72816}}.<br />
* {{/F}} Опция для добавления полей типа Bug ID в зависимости бага. {{Bug|73054}}.<br />
* {{/U}} Строка быстрого поиска увеличена до 300px. {{Bug|73354}}.<br />
* {{/F}} В отладочных целях: поддержка корректной перезагрузки всех Perl-модулей при работе под mod_perl. Для активации нужно добавить в конфигурацию Apache '''перед''' <tt>PerlConfigRequire .../mod_perl.pl</tt>:<br />
*: <tt>&lt;perl>$Bugzilla::RELOAD_MODULES = 1; $^P |= 0x10;&lt;/perl></tt><br />
* {{/F}} Оптимизация прав доступа к разделу администрирования: группа '''admin_index'''.<br />
* {{/F}} Кэширование JSON-кодированных данных зависимостей значений полей друг от друга для формы поиска и формы бага на стороне клиента с корректным сбросом кэша. {{Bug|70605}}.<br />
* {{/F}} Кэширование метаданных — объектов полей Bugzilla::Field со всеми сопутствующими и набора полей для поиска в памяти между запросами. {{Bug|70605}}.<br />
* {{/S}} {{/F}} Практически одна из ГЛАВНЫХ фич Bugzilla4Intranet — '''полностью переделанный движок поиска''', оптимизированный настолько, что Full-Scan’ов таблиц не происходит '''практически никогда''', в том числе и при использовании сложных поисковых выражений. Честно — как без этого живёт и до сих пор не сдохла багзиллы Мозиллы (http://bugzilla.mozilla.org/) — нам неизвестно. {{Bug|70605}}<br />
* {{/F}} Полностью выкошена библиотека YAHOO UI. {{Bug|70605}}<br />
* {{/N}} Расширение для вставки ограниченных правами списков багов в MediaWiki. {{Bug|71261}}<br />
* {{/C}} Ссылка клонирования во внешний/внутренний продукт. {{Bug|69514}}<br />
* {{/C}} Настройка на уровне продукта, рекомендующая не списывать в него время. {{Bug|59357}}<br />
* {{/NU}} Массовая загрузка вложений прямо с формы редактирования бага. {{Bug|68919}}<br />
* {{/N}} Настройка unauth_bug_details, разрешающая показывать, в каком продукте находится недоступный баг. {{Bug|67778}}<br />
* {{/N}} Шаблон «SimpleTable» для вставки списков багов в другие страницы посредством iframe, с поддержкой масштабирования этого iframe с помощью HTML5 postMessage кроссдоменной коммуникации, плюс Wiki-шаблон для удобства эксплуатации данной доработки. {{Bug|70302}}<br />
* {{/C}} Зависимость внутренних багов второго уровня от внешних багов. {{Bug|75690}}<br />
* {{/U}} Tab-index-ы на форме постановки бага. {{Bug|86003}}<br />
* {{/S}} Колонка «Duplicate of» в поиске. {{Bug|86642}}<br />
* {{/NU}} Загрузка скриншотов через SUPA. {{Bug|87188}}<br />
* {{/C}} Worktime-Only комментарии, схлопываемые по умолчанию. {{Bug|87696}}<br />
* {{/S}} Колонка «Дата последнего комментария» в поиске. {{Bug|91323}}<br />
* {{/S}} Колонка «Последний комментарий» в поиске. {{Bug|98364}}<br />
* {{/N}} Возможность автоматической подписки на баги, удовлетворяющие заданным условиям поиска. {{Bug|101207}}<br />
* {{/NU}} Продукт, Reporter, QA и Assignee в результатах поиска показываются ссылками на списки соответствующих открытых багов. {{Bug|102435}}<br />
* {{/NU}} Полностью новая форма настроек доступа к продукту, вместо стандартного УЖОСА. {{Bug|102958}}<br />
* {{/S}} Колонка «Продукт внешнего бага» в поиске. {{Bug|111527}}<br />
* {{/N}} Back-port веб-сервисов из Bugzilla 4.0.1. {{Bug|84586}}.<br />
<br />
== Внешние баги ==<br />
<br />
* {{Bug|12122}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=302778 Mozilla Bug 302778 — When using IE, all negative event checkboxes are missing from email preferences page]<br />
* {{Bug|16361}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=477264 Mozilla Bug 477264 — Server error 'Foreign key constraint fails…' when adding any attribute into an environment]<br />
* {{Bug|38801}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=501639 Mozilla Bug 501639 — Firefox suggests «attachment.cgi» instead of real attachment filename when downloading (due to content-disposition)]<br />
* {{Bug|40933}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=446598 Mozilla Bug 446598 — provide useful change information in an rss/atom feed of recent changes]<br />
* {{Bug|40933}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=65477 Mozilla Bug 65477 — Allow different styles of bugmail by user preference (HTML, XML, etc.)]<br />
* {{Bug|46262}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=486666 Mozilla Bug 486666 — Russian translation for Testopia documentation]<br />
* {{Bug|47074}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=381912 Mozilla Bug 381912 — <nowiki>[email_in]</nowiki> Add the ability to add attachments by email]<br />
* {{Bug|53836}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=41651 Mozilla Bug 41651 — Relative advanced queries]<br />
* {{Bug|53848}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=164009 Mozilla Bug 164009 — Show which columns are being sorted on, in buglist.cgi, and what direction the sort is]<br />
* {{Bug|54380}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=516956 Mozilla Bug 516956 — Sort order is cleared into «Reuse same sort as the last time» on query edit]<br />
* {{Bug|54468}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=517265 Mozilla Bug 517265 — «A comment» (longdesc) in advanced search is resetted after clicking «Edit Search»]<br />
* {{Bug|53629}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=518397 Mozilla Bug 518397 — Bugzilla::Util::get_text implementation leads to performance issues on long bugs], [https://bugzilla.mozilla.org/show_bug.cgi?id=518398 Mozilla Bug 518398 — Why Bugzilla doesn’t use Template::Stash::XS?]<br />
* {{Bug|53697}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=527976 Mozilla Bug 527976 — Ability to select position of useful-links and common-links (page header, page footer or both)]<br />
* {{Bug|55790}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=531855 Mozilla Bug 531855 — Show product/component in page title]<br />
<br />
[[Category:Bugzilla]]</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Bugzilla4Intranet&diff=8019
Bugzilla4Intranet
2023-11-04T07:42:52Z
<p>VitaliyFilippov: Reverted edits by SEO TROLLING (talk) to last revision by Виталий Липатов</p>
<hr />
<div>[[Bugzilla4Intranet]] — форк баг-трекера Bugzilla (версии 3.6.4), ставящий своей конечной целью превращение Bugzilla в настраиваемый трекер, а также оптимизацию производительности и ликвидацию некачественного кода, присутствующего в оригинале в большом количестве.<br />
<br />
* Исходный код: https://github.com/vitalif/bugzilla-4intranet<br />
* Страница проекта: http://wiki.4intra.net/Bugzilla4Intranet<br />
* Лицензия: MPL 1.1 (как и у оригинала Bugzilla), двойная MPL 1.1+ / GPL 3+ (для переписанных частей кода)<br />
<br />
Идеальная цель проекта:<br />
* Полностью настраиваемая объектная модель, редактируемая из интерфейса. Функционирование всех объектов системы на её основе, возможность добавлять свои объекты, возможность поиска любых объектов, автоматическое версионирование всех изменений, отсутствие (полное или практически полное) жёстких завязок на конкретные поля или сущности.<br />
* Полная ликвидация CGI.pm.<br />
* '''Минимум''' сложной программной логики в шаблонах. Шаблоны — это представление, а не контроллер!<br />
* Выделенный отдельно уровень локализации, не требующий для перевода на другой язык переписывать шаблоны.<br />
<br />
== Состояние проекта ==<br />
<br />
Bugzilla4Intranet — форк версии 3.6.4. Это не самая новая версия Bugzilla. Что это означает на данный момент:<br />
* <s>Пока что не поддерживается</s> обновление с новых версий Bugzilla до Bugzilla4Intranet. '''UPDATE:''' Уже поддерживается (в ветке 'beta'), схема БД совместима. Какие-то мелкие баги всё ещё возможны, но в целом, как минимум на MySQL, всё должно работать.<br />
* По пути доработки некоторые редкоиспользуемые фичи могли отвалиться — например, importxml.pl, миграция багов, какие-нибудь скрипты из contrib/, поддержка Oracle, тесты…<br />
* Часть возможностей, присутствующих в свежем оригинале, может отсутствовать в нашей версии, например:<br />
** Отсутствует группировка полей на форме поиска в fieldset’ы.<br />
** <s>Отсутствуют</s> Уже присутствуют сохраняемые отчёты.<br />
** Отсутствуют (и, скорее всего, добавлены не будут — фича странная и даже, возможно, вредная) «пользовательские теги» на багах, то есть теги, которые видят только пользователи, их создавшие.<br />
** <s>Отсутствует</s> Уже присутствует и улучшена поддержка SQLite — а именно, в отличие от оригинальной Bugzilla, можно использовать встроенный в SQLite полнотекстовый поиск FTS4, при передаче параметра &debug=1 работает вывод плана запроса, и можно использовать sqlite с contrib/bzdbcopy.pl. Пока в ветке sqlite.<br />
** Отсутствует поддержка одновременной Prev/Next навигации по нескольким спискам багов (параметр &list_id=…), ибо последний список багов хранится в Cookie, а не в БД.<br />
** Возможно, какие-то прочие фичи, в основном — мелкие.<br />
<br />
Зато — добавлено множество новых возможностей! Из крупных доработок можно отметить:<br />
* Интерфейс:<br />
** Новая более удобная форма постановки бага. Идея — разделение всех полей на две колонки: в левой, крупной — описание бага и большие текстовые поля, в правой — все мелкие поля с детальной информацией.<br />
** Небольшой редизайн формы редактирования бага. Поля отображаются не справа от своих названий в следующей колонке, а под названиями, и выводятся в 4 колонки, плавно уменьшающиеся до 2 и потом 1 с уменьшением ширины экрана (например, на мобильниках); комментарии отображаются во всю ширину экрана.<br />
** Улучшенный интерфейс Boolean Charts.<br />
** Более аккуратные стили практически на всех страницах.<br />
** Интеграция более свежего скина Mozilla.<br />
** Поддержка Gravatar-юзерпиков.<br />
** Приятный глазу HTML-формат почтовых уведомлений по багам.<br />
* Excel-импорт.<br />
* Улучшения работы с вложениями:<br />
** Добавление нескольких вложений к багу разом;<br />
** Возможность при добавлении вложения вставить текст или изображение прямо из буфера обмена;<br />
** Возможность скачать все вложения к багу в одном ZIP-архиве;<br />
** Базовый онлайн-просмотр офисных документов с помощью LibreOffice;<br />
** Показ приложенных изображений прямо внутри комментариев.<br />
* Улучшения Custom-полей и более мощные зависимости между полями:<br />
** Новые типы;<br />
** Доступность «обратных к полю типа BUG_ID отношений» в поиске и Excel-импорте;<br />
** Возможность делать custom поля зависимыми друг от друга;<br />
** Возможность не только показывать одно custom поле для нескольких значений контролирующего поля, а также и показывать одно и то же значение select-поля для нескольких значений контролирующего поля;<br />
** Возможность разрешить/запретить пустое значение (NULL, то есть, «---» для select-полей, просто пустое для прочих) в зависимости от значений другого поля (например, попродуктно);<br />
** Возможность включить/выключить копирование поля при клонировании багов, в том числе — в зависимости от значений другого поля (например, попродуктно);<br />
** Настройки значений по умолчанию для любых полей — как глобальных, так и зависимых от значений другого поля;<br />
** Все вышеперечисленные поля зависимостей могут быть как одинаковыми, так и разными. То есть NULL можно включать/выключать в зависимости от одного поля, значение по умолчанию — в зависимости от другого поля, клонирование — от третьего, наборы значений — от четвёртого, видимость — от пятого.<br />
** Все вышеперечисленные зависимости можно задавать для пустого значения поля;<br />
** Полностью убраны старые параметры, включающие/выключащие поля и задающие их значения по умолчанию (Administration &rarr; Parameters &rarr; Bug Fields). Теперь эти настройки нужно делать через общий интерфейс настройки полей;<br />
** Более аккуратная форма редактирования свойств полей;<br />
** Новые удобные интерфейсы редактирования зависимостей и наборов значений для каждого контролирующего значения прямо с его страницы (то есть, например, включать/выключать поля прямо со страницы продукта);<br />
** Аналогично 4.x можно деактивировать старые версии, milestone’ы, компоненты;<br />
** Target Milestone можно перенастроить так, чтобы значения по умолчанию выбирались в зависимости не от продукта, а от любого другого select-поля (например, от компонента);<br />
** Продукты можно перемещать между классификациями со страницы продукта, а не через отдельный нетривиальный интерфейс «Reclassify».<br />
* «Валидаторы» изменений багов, то есть — настраиваемые предупреждения / ошибки.<br />
* Представление сохранённых поисков в виде MySQL’ных View, позволяющих запрашивать информацию внешними инструментами и с учётом прав доступа.<br />
* Страницы массовой фиксации трудозатрат (в том числе — задним числом и от чужого имени при наличии соответствующего разрешения).<br />
* RSS-ленты комментариев и активности по багам и поискам.<br />
* Различные новые поля в поиске, в том числе — поля связанных багов.<br />
* Возможность правки комментариев, Diff’ы в истории изменений и письмах.<br />
* Возможность отключения полей «Platform» и «Operating system», возможность настраивать регулярные выражения для автоопределения их значений на основе User-Agent.<br />
* Улучшения интерфейсов настройки прав доступа, несколько облегчающие работу с оными в Bugzilla (модель разграничения доступа в Bugzilla весьма неочевидная):<br />
** Редизайн формы настроек доступа к продукту.<br />
** Новый интерфейс редактирования групп, отображающий полный список пользователей, так или иначе входящих в группу и/или имеющих права включения других пользователей в эту группу. То есть, для редактирования можно «заходить» со стороны группы, а не со стороны каждого входящего в неё пользователя.<br />
** Детальная информация о том, какие разрешения дают группы, на странице списка групп в панели администрирования и на странице с информацией о собственных группах (Preferences &rarr; Permissions).<br />
* Улучшения ответа на баги через почту — возможность использовать заголовки полей, возможность поставить несколько вложений, адекватная диагностика при ошибках, фильтрация автоматических ответов (чтобы, например, не получалось бесконечного цикла отправки комментариев при установке пользователем ответа типа «я в отпуске до XX.XX»).<br />
* Новый «REST-JSON»/«REST-XML» API, принимающий входные параметры как обычные параметры POST или строки запроса, отвечающий JSON или XML, способный перехватывать любые ошибки и передавать их в ответе в виде имён (а не ужасных прибитых гвоздями численных кодов).<br />
* Бэкпортированы веб-сервисы из Bugzilla 4.4.<br />
<br />
Кроме новых возможностей, уже проведена большая работа по рефакторингу наслоений оригинального кода:<br />
* Полностью переписан код, отвечающий за поиск. Даже сложные запросы поиска строятся так, что СУБД может максимизировать использование индексов и выполнять их оптимально.<br />
* Приведена в норму структура базы данных — теперь все целочисленные первичные ключи имеют одинаковый тип INT, а не разные SMALLINT/MEDIUMINT/INT, а все select-поля хранят ID значений вместо самих значений, и NULL вместо строкового «---», используемого как NULL в оригинале (а также вместо версии «unspecified»); кроме того, практически всем VARCHAR колонкам проставлен максимальный лимит длины (255), чтобы не заниматься крохоборством и не увеличивать максимальную длину сначала до 20, потом до 64, потом до 128… VARCHAR, как следует из названия, имеет переменную длину и «лишнего» места не занимает.<br />
* Полностью переписана логика сохранения багов в БД — теперь код работает корректнее и эффективнее, кроме того, для работы с моделью более не нужно обращаться к контроллеру (*.cgi).<br />
* Ликвидирован hard-code возможных значений для поля «See Also». В оригинале 3.6 данное поле может содержать только URL определённого вида, соответствующего '''жёстко заданным в коде''' (!!!) шаблонам для разных баг-трекеров. В оригинале 4.4 авторы решили это отрефакторить и… что бы вы думали? Оставили завязку в коде, но вынесли каждый шаблон в отдельный класс! Зачем так сделано — загадка, нормальное решение — простой настраиваемый набор регулярных выражений в параметрах.<br />
* Ликвидирован (по меньшей мере, почти) hard-code названий статусов (теперь их можно, например, назвать русскими именами).<br />
* Ликвидирован hard-code классов обработчиков заданий очереди, не позволяющий без модификации кода ядра добавлять собственные типы заданий в расширениях.<br />
* Из шаблонов вынесены некоторые крупные куски программной логики, а также объёмные JavaScript’ы.<br />
* Из шаблонов вынесена некоторая часть сообщений локализации (описания полей, «термины»); убраны сверхдлинные IF..ELSEIF’ы, которыми выбирались сообщения об ошибках.<br />
* Реализовано клиентское кэширование зависимостей между значениями полей, что даёт браузеру возможность быстрее открывать формы редактирования и поиска багов.<br />
* Реализовано серверное кэширование метаданных между запросами.<br />
* Добавлена поддержка полнотекстового поиска Sphinx, который работает гораздо быстрее и качественнее, чем MySQL FULLTEXT.<br />
* Добавлена простая реализация standalone HTTP-сервера на основе HTTP::Server::Simple, в духе Plack; добавлены init-скрипты для запуска данного сервера и демона очереди заданий. Рекомендуется использовать HTTP::Server::Simple + nginx в качестве фронтенда к нему вместо работы под mod_perl, так как mod_perl создаёт большое количество различных проблем, в том числе мистических багов, не проявляющих себя в «голом» Perl’е.<br />
* Добавлена возможность корректной перезагрузки всех модулей и расширений на каждом запросе, что сильно упрощает отладку и разработку — больше не нужно после внесения каждого изменения перезапускать сервер.<br />
* Полностью переписана система расширений, новая создана по образу и подобию MediaWiki и позволяет перезагружать на каждом запросе в том числе и код расширений. Планируется добавление возможности расширениям создавать собственные точки входа (*.cgi скрипты) внутри собственной директории, а не в корне установки (возможно, для этого точки входа будут превращены из *.cgi файлов в классы-контроллеры).<br />
* По умолчанию вложения '''вообще''' не хранятся внутри БД (BLOB’ы — mauvais ton), хотя возможность хранения оставлена для совместимости с оригиналом.<br />
* Задолго до попытки реализации аналогичной фичи в оригинале, ещё в 2010 году, добавлен Redirect после сохранения изменений в баг, не дающий вам случайно перепослать POST запрос при нажатии F5. Кроме того, в оригинальной Bugzilla это не работает в Internet Explorer, а у нас — работает везде.<br />
* HTML-формат почты также появился задолго до его реализации в оригинальной Bugzilla.<br />
* Полностью изгнан YAHOO UI — пожалуй, худший из всех JS-фреймворков. Мало того, что он худший — зачем нужно JS-фреймворк в Bugzilla, вообще не очень понятно.<br />
* Как и в оригинале, реализована подсказка имён пользователей; правда, в связи с изгнанием YAHOO UI реализована она на других технологиях.<br />
* Практически изгнан CGI.pm: функции cgi->param() и cgi->cookie() не используются НИГДЕ; вместо них параметры и куки читаются из хешрефов Bugzilla->input_params и Bugzilla->cookies.<br />
* Удалены различные устаревшие процедурные интерфейсы типа LookupNamedQuery(), is_open_state() и тому подобные.<br />
<br />
Прочие идеи:<br />
* Свои типы объектов (в процессе реализации в ветке classes).<br />
* UI для работы с вьюхами (правда, чтобы багзилла создавала mysql-пользователей, ей нужен рутовый mysql пароль).<br />
* Add me to CC list, добавление флага на странице добавления аттача…<br />
* …Либо интегрировать форму добавления аттача прямо на форму бага!<br />
* (готово) Отключение/включение Silent в параметрах.<br />
* Показывать историю изменений багов прямо в ленте комментариев.<br />
* Интеграция с VCS — показывать коммиты прямо в ленте комментариев.<br />
* Парсить и сохранять ссылки на баги в комментариях к другим багам и показывать на их основе обратные ссылки.<br />
* Массовая правка багов прямо из таблицы списка багов + возможно, пересортировка.<br />
* (готово) Заредизайнить форму редактирования бага.<br />
* Переименовать Checker’ы в «Валидаторы».<br />
* (готово) Какой-нибудь вариант «Responsive Layout».<br />
* Рассмотреть возможность утаскивания какого-нибудь функционала из https://github.com/bayoteers/.<br />
* Вмержить «недавние поиски» из 4.x?<br />
* Показывать «недавние поиски»?<br />
* Дать возможность экстенжнам создавать свои контроллеры (условно говоря, *.cgi скрипты).<br />
* (готово) Убрать из ядра CUSTIS-специфичные фичи.<br />
* Что-то сделать с editemailin.cgi.<br />
* Кастомизация картинок создания бага и т. п.<br />
<br />
== Установка ==<br />
<br />
Вначале нужно установить Perl модули — просто вызовом команды <tt>cpan</tt>, она же <tt>perl -MCPAN -eshell</tt> (на случай, если в вашей системе не окажется исполняемого файла cpan).<br />
<br />
Минимально требуемые модули:<br />
<br />
cpan {{CPAN|Date::Parse}} {{CPAN|DBI}} {{CPAN|CGI}} {{CPAN|DateTime}} {{CPAN|Email::Address}} \<br />
{{CPAN|Template}} {{CPAN|JSON}} {{CPAN|Email::MIME}} {{CPAN|Test::Taint}} \<br />
{{CPAN|XML::Twig}} {{CPAN|Text::TabularDisplay}} {{CPAN|Email::Sender}} \<br />
{{CPAN|Lingua::Translit}} {{CPAN|Archive::Zip}} \<br />
{{CPAN|DBD::mysql}} {{CPAN|Image::Magick}}<br />
<br />
{{CPAN|Image::Magick}} обычно можно ставить как пакет вашего любимого Linux-дистрибутива, например <tt>perlmagick</tt> в Debian. Если вы используете PostgreSQL, то вместо {{CPAN|DBD::mysql}} вам нужен {{CPAN|DBD::pg}}.<br />
<br />
В тестах {{CPAN|GD}} есть старый баг, который никак не пофиксят — 1 тест не проходит и установка не удаётся. Так что, пока его не пофиксят, GD ставим с -f (force).<br />
<br />
Опционально, но желательно:<br />
<br />
cpan -f {{CPAN|GD}}<br />
cpan {{CPAN|Template::Plugin::GD}} {{CPAN|GD::Graph}} {{CPAN|GD::Graph3d}} \<br />
{{CPAN|MIME::Parser}} {{CPAN|Mail::RFC822::Address}} {{CPAN|Email::Reply}} \<br />
{{CPAN|Devel::StackTrace}} {{CPAN|Email::MIME::Attachment::Stripper}} \<br />
{{CPAN|SOAP::Lite}} {{CPAN|JSON::RPC}} {{CPAN|JSON::XS}} {{CPAN|Text::CSV}} {{CPAN|HTML::Strip}} \<br />
{{CPAN|Text::CSV_XS}} {{CPAN|Spreadsheet::ParseExcel}} {{CPAN|Spreadsheet::XLSX}} \<br />
{{CPAN|Lingua::Stem::Snowball}} {{CPAN|Math::Random::Secure}} {{CPAN|TheSchwartz}} \<br />
{{CPAN|Daemon::Generic}} {{CPAN|HTTP::Server::Simple}} {{CPAN|Net::Server}} {{CPAN|Sys::Sendfile}}<br />
<br />
После установки данных модулей создайте MySQL-базу данных и пользователя, имеющего к ней полный доступ, запустите '''./checksetup.sh''' в директории установки Bugzilla и следуйте инструкциям.<br />
<br />
При обновлении — просто обновите код и также запустите '''./checksetup.sh'''. Нужные изменения в БД будут внесены автоматически.<br />
<br />
== История улучшений ==<br />
<br />
Список доработок актуален на дату: 2012-12-05 (5 декабря 2012).<br />
<br />
=== Улучшения оригинальной Bugzilla 3.0 по сравнению с 2.x ===<br />
<br />
Bugzilla 3 имеет много преимуществ — авторы наконец-то осилили и mod_perl, и транзакции, и работу в UTF-8, и некоторые возможности расширения, и внешний вид посимпатичнее, и проверки дублирования изменений, и запросы через DBI (а не SendSQL()), и нормальные шаблоны для писем (если, конечно, Template Toolkit считать нормальным вообще).<br />
<br />
В то же время, авторы Bugzilla начинают понимать, что возможности расширения в Bugzilla необходимы, и постепенно добавляют таковые. В 3.0 появляются Custom Fields (дополнительные поля у багов) и чуть-чуть хуков, в 3.2 появляется настраиваемый жизненный цикл бага, поддержка расширений авторизации и ещё чуть-чуть хуков. Правда, хуков там всё равно мало, и как пишут сами авторы, они не очень красивые и, вероятно, в будущем будут переделаны. Будущее — это 4.0, которая, скорее всего, вырастет когда-нибудь из HEAD’а, который обычно представляет собой unstable версию с нечётным индексом (3.1, 3.3, 3.5 и т.п). В 4.0 обещали хуки для всего, чего душе угодно, но пользоваться ими вряд ли кто-то будет, учитывая то, какой кошмар царит в головах авторов, судя по «новой системе расширений», добавленной в 3.6.<br />
<br />
Производительность и надёжность (по сравнению с 2.x прогресс огромен):<br />
<br />
* mod_perl вместо CGI — улучшает производительность. Правда, изначальные заверения о том, что «теперь багзилла будет летать», как оказалось, <s>несколько</s> не соответствуют действительности. Причина — тому, кто юзает {{CPAN|Template::Toolkit}}, мод_перл — мёртвому припарка. Выигрыш в производительности от mod_perl с лихвой компенсируется усложнением TT-шных шаблонов.<br />
* InnoDB вместо MyISAM — ошибок «…table XXX is marked as crashed…» больше нет.<br />
* транзакции вместо блокировок таблиц, а также внешние ключи (дождались!)<br />
* полнотекстовый поиск по багам с морфологией вместо поиска по подстроке (которому, кстати, сопутствовали долгие блокировки при поисках)<br />
* теперь вся багзилла работает в UTF-8 => отпадают все мыслимые проблемы с кодировками<br />
* убрано множество кривых решений вроде файла data/nomail с логинами юзеров, которым не надо слать почту (теперь в настройках юзера админ может задать bugmail disabled), data/versioncache с перловым хешем мешающим обновлять словари (типа кэш какой-то) и т. п.<br />
<br />
Новые фичи:<br />
<br />
* Интерфейс! :) более красивый и сексуальный во всех аспектах.<br />
* Можно добавлять аттачи и ставить флаги непосредственно при вводе нового бага.<br />
* Нормальная защита от двойного сабмита любых форм.<br />
* Дополнительные заголовки в письмах от Bugzilla.<br />
* Email-управление багами.<br />
* «Разделяемые» хранимые запросы поиска.<br />
* Несколько более гибкая система прав (например, editbugs и canconfirm можно ставить на отдельные продукты).<br />
<br />
=== Доработки 2.x &rarr; /dev/null ===<br />
<br />
Следующие доработки были внесены нами давно в 2.x, и отмерли по той причине, что в 3.0 реализованы авторами:<br />
<br />
* Настройка списка CC по умолчанию для каждого компонента.<br />
* Исправление глючных прав выбора компонентов — {{Bug|19597}} более неактуален.<br />
* Настройка Milestone по умолчанию.<br />
* Нормальная защита от двойного сабмита любых форм — то есть от дублирования багов и изменений.<br />
* Видоизменена в Bugzilla 3.x работа с кодировками — появился UTF-8. Соответственно отмирают:<br />
** <strike>Страницы в cp1251 (HTML Content-Type)</strike>.<br />
** <strike>chart.cgi: Перекодировка названий из Param(defaultcharset) в utf8</strike>.<br />
** <strike>report.cgi: Перекодировка названий строк и столбцов из Param(defaultcharset) в utf8</strike>.<br />
** <strike>showdependencygraph.cgi: перекодировка краткого названия из Param(defaultcharset) в utf8</strike>.<br />
** <strike>Bugzilla::DB::Mysql: обмен с базой в cp1251 (SET NAMES cp1251)</strike>.<br />
<br />
=== Легенда ===<br />
<br />
Легенда к списку доработок, разбитому по статусу относительно [[Bugzilla]] 3.<br />
<br />
* '''Ожидает проноса или решения о его ненужности''',<br />
* Пронесено,<br />
* <strike>Не требуется / похоронено</strike>.<br />
<br />
По категории:<br />
<br />
<div id="bz_legend"><br />
* {{/F}} Доработки объектного ядра, кэширование, оптимизация [<html><a id="hide_bz_core" href="javascript:bz_hide_show('bz_core', 0)">скрыть</a><a id="show_bz_core" style="display: none" href="javascript:bz_hide_show('bz_core', 1)">показать</a></html>]<br />
* {{/N}} Все новые фичи, кроме доработок поиска [<html><a id="hide_bz_feature" href="javascript:bz_hide_show('bz_feature', 0)">скрыть</a><a id="show_bz_feature" style="display: none" href="javascript:bz_hide_show('bz_feature', 1)">показать</a></html>]<br />
* {{/S}} Доработки поиска, отчётов и групповых операций [<html><a id="hide_bz_search_feature" href="javascript:bz_hide_show('bz_search_feature', 0)">скрыть</a><a id="show_bz_search_feature" style="display: none" href="javascript:bz_hide_show('bz_search_feature', 1)">показать</a></html>]<br />
* {{/U}} Доработки юзабилити [<html><a id="hide_bz_usability" href="javascript:bz_hide_show('bz_usability', 0)">скрыть</a><a id="show_bz_usability" style="display: none" href="javascript:bz_hide_show('bz_usability', 1)">показать</a></html>]<br />
* {{/NU}} Новые фичи, связанные также с юзабилити [<html><a id="hide_bz_usability_feature" href="javascript:bz_hide_show('bz_usability_feature', 0)">скрыть</a><a id="show_bz_usability_feature" style="display: none" href="javascript:bz_hide_show('bz_usability_feature', 1)">показать</a></html>]<br />
* {{/C}} Доработки, специфичные для практик использования Bugzilla внутри CustIS [<html><a id="hide_bz_custis_specific" href="javascript:bz_hide_show('bz_custis_specific', 0)">скрыть</a><a id="show_bz_custis_specific" style="display: none" href="javascript:bz_hide_show('bz_custis_specific', 1)">показать</a></html>]<br />
<html><br />
<script language="JavaScript"><br />
function bz_hide_show(className, showhide)<br />
{<br />
if (document.getElementsByClassName)<br />
{<br />
var el = document.getElementsByClassName(className);<br />
var e, p;<br />
for (var i in el)<br />
{<br />
e = el[i];<br />
while (!(!e || (''+e.nodeName).toLowerCase() == 'li'))<br />
e = e.parentNode;<br />
if (e)<br />
{<br />
p = e;<br />
while (!(!p || p.id == 'bz_legend'))<br />
p = p.parentNode;<br />
if (!p)<br />
e.style.display = showhide ? '' : 'none';<br />
}<br />
}<br />
document.getElementById('hide_'+className).style.display = showhide ? '' : 'none';<br />
document.getElementById('show_'+className).style.display = showhide ? 'none' : '';<br />
}<br />
}<br />
</script><br />
</html><br />
</div><br />
<br />
Под заголовком «доработки X.Y» понимаются доработки, внесённые уже после объединения CustIS Bugzilla с оригинальной версией.<br />
<br />
=== Доработки 2.x &rarr; 3.2 ===<br />
<br />
Список доработок, существовавших в «CustIS Bugzilla» на момент объединения её с mainstream-версией 3.2.<br />
<br />
Всем спасибо за прохождение [[Bugzilla:опрос_по_функциям|опроса по часто используемым функциям Bugzilla]].<br />
<br />
Пронесены в Bugzilla 3.2:<br />
<br />
* {{/C}} Атрибут «Договор» — {{Bug|14378}}, договор по умолчанию у каждого продукта. [[Значения атрибута Договор (Bugzilla)]].<br />
* {{/F}} Возможность ограничения значений Custom Field не одним значением контролирующего поля, а несколькими — {{Bug|53617}}.<br />
* {{/C}} Раскрытие почтовых групп в CC — {{Bug|12253}}.<br />
* {{/U}} Content-disposition вложений — {{Bug|38801}}.<br />
* {{/N}} Страница добавления членов в группы — {{Bug|23445}}.<br />
* {{/N}} Добавление предыдущих Assignee и QA Contact в список CC к багу.<br />
* {{/N}} Текстовые вложения — {{Bug|15001}}, ''в том числе при постановке бага'' — {{Bug|53638}}.<br />
* {{/N}} Запись трудозатрат при создании Attachment-а — {{Bug|19052}}.<br />
* {{/N}} Напоминания о вводе трудозатрат и запросах флагов — {{Bug|17481}}.<br />
* {{/U}} Блокирование клонируемого бага клонированным, а не наоборот.<br />
* {{/N}} Возможность клонирования бага не только из описания, а также из любого комментария.<br />
* {{/N}} Разрешение создания багов в состояниях ASSIGNED и RESOLVED FIXED <strike>и соответствующие пользовательские настройки</strike> ({{Bug|17976}})<br />
* <s>{{/N}} Combo-box выбора человека, у которого спрашиваем про '?'-флаг — {{Bug|10837}}, {{Bug|57482}}.</s><br />
* {{/NU}} Автодополнение пользователей в большинстве мест, в том числе во флагах, с мультивыбором. Реализация '''отличается''' от реализации в Bugzilla 4.x {{Bug|91840}}<br />
* {{/N}} «Silent» комментарии ''и вложения!'' — {{Bug|14372}}.<br />
* {{/C}} Пользовательская настройка 'Redirect me to my Bugzilla' — {{Bug|17975}}, в том числе влияние её на почту о флагах — {{Bug|66740}}.<br />
* {{/N}} Страница с настройками почты по умолчанию.<br />
* {{/C}} Страница «TodayWorktime» — {{Bug|13772}}.<br />
* {{/NU}} Предварительный просмотр комментариев — {{Bug|15119}}. В новом виде, прямо под полем ввода — отладка в баге {{Bug|53606}}.<br />
* {{/C}} Рассылка отчётов о трудозатратах по почте — {{Bug|15148}}.<br />
* {{/U}} Шрифт Arial в отчётах.<br />
* {{/U}} Индикаторы продукта, компонента и т. п. в письмах, ''в том числе в письмах о флагах!'' (prod: PROD.COMP) — {{Bug|15607}}.<br />
* <strike>Хранимая процедура LoadMyWorkTime()</strike><br />
* {{/U}} Не сбрасывать оставшееся время при закрытии багов,<br />
* {{/U}} show_bug.cgi:<br />
** Показ % завершённых зависимостей бага — {{Bug|28333}}.<br />
** Показ изначального QA contact.<br />
* {{/N}} report.cgi: возможность измерения не только количества багов, но и трудозатрат.<br />
* {{/U}} showdependencygraph.cgi:<br />
*: alt="ID: bugtitle" вместо alt="bug #bugid",<br />
* {{/U}} Более богатая раскраска багов по состояниям,<br />
* {{/S}} summarize_time.cgi: показывать только свои трудозатраты по багу — {{Bug|17977}}.<br />
* {{/N}} userprefs.cgi: показ и изменения списков наблюдения (своих и за собой) — {{Bug|19347}}.<br />
* <strike>Bugzilla::DB::Mysql: убрано CAST() AS BINARY для INSTR() для MySQL>=4</strike>,<br />
* <strike>template/en/default/attachment/show-multiple.html.tmpl: убран iframe</strike>,<br />
* {{/N}} Комментарии о клонированных багах в клонируемых багах.<br />
* {{/U}} Отображение ссылок на баги в комментах и списках зависимых багов с разными стилями в зависимости от состояния, включая ''номера багов в списках'' и ''почтовые сообщения'' — {{Bug|53833}}!<br />
*# просто номер для багов в статусе UNCONFIRMED, NEW, ASSIGNED, REOPENED<br />
*# зачеркнутый номер для багов в статусе RESOLVED<br />
*# зачеркнутый номер с пунктирной рамочкой для багов VERIFIED<br />
*# зачеркнутый номер со сплошной рамочкой для CLOSED<br />
* {{/NU}} Поля Hours Worked и Status Whiteboard в форме создания бага.<br />
* {{/U}} Ссылки на комментарии, соответствующие установке флага, на флагах.<br />
* {{/S}} Поддержка <code>%user%</code> при поиске по Boolean Charts:<br />
*: Отправлено в [https://bugzilla.mozilla.org/show_bug.cgi?id=41651 Mozilla Bug 41651].<br />
* {{/F}} Версия по умолчанию для каждого компонента. ''Плюс исправление кривости CGI::cookie(), ведущей к несохранению версии из формы.''<br />
* <strike>Интеграция с [[SharePoint]]</strike>,<br />
* {{/C}} Интеграция с [[ViewVC]],<br />
* {{/N}} Интеграция с MediaWiki — {{Bug|13593}}.<br />
*: Плюс, новые Wiki добавлять теперь легко, ссылки можно писать в вики-стиле: <nowiki>wiki:[[Ссылка с пробелами и "любой мутью"]]</nowiki><br />
*: Плюс из вики-ссылок удаляются маркеры цитирования и переводы строк — {{Bug|68347}}.<br />
<br />
=== Доработки 3.2 ===<br />
<br />
* {{/F}} Фиксы производительности — в частности см. [http://yourcmc.ru/wiki/index.php/Template_Toolkit#.C2.AB.D0.9D.D0.B5_.D0.B8.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D1.83.D0.B9.D1.82.D0.B5_Template_Toolkit.21.C2.BB Не используйте Template Toolkit!]<br />
* {{/F}} Доработки mod_perl.pl для виндов, и для никсов тоже — убран {{CPAN|Apache2::SizeLimit}}.<br />
* {{/C}} Защита багов от рассылки изменений (в любой роли — CC, Assignee, Reporter, QA) определённым юзерам (по группам) — {{Bug|38616}}.<br />
* {{/U}} Автоматическое проставление Assignee=ТЫ при выборе статуса ASSIGNED и проставление QA=ТЫ при выборе VERIFIED, но ''не при выборе'' CLOSED мимо VERIFIED — {{Bug|53754}}.<br />
* {{/N}} Управление багами по почте, фильтры для удаления аутлукового говна из писем-ответов, поддержка вложений в почте, поддержка HTML входящих писем, поддержка почтовых алиасов пользователей, скрипт загрузки алиасов из LDAP, поддержка полей по умолчанию для спецадресов типа helpdesk-smth — {{Bug|47074}}, {{Bug|53608}}.<br />
* {{/N}} Интерфейс отписки от уведомлений по багу (то есть из CC) одним кликом по ссылке из письма (no more spam!) — {{Bug|46701}}.<br />
* {{/S}} RSS-лента комментариев к багам — {{Bug|16210}}, а также и активности по багам, оптимизация — {{Bug|53687}}.<br />
* {{/U}} Разделитель как «.» так и ", " при вводе времени.<br />
* <strike>{{/S}} «Стрелочки» рядом с заголовками в таблице списка багов, показывающие порядок сортировки.<br />Взято из [https://bugzilla.mozilla.org/show_bug.cgi?id=164009 Mozilla Bug 164009].</strike><br />
* {{/U}} Если severity CRITICAL или BLOCKER, то письмо приходит с красной строчкой сверху, в теме письма [CRITICAL] или [BLOCKER] после номера бага, а важность письма — Высокая и приоритет — 1.<br />
* {{/S}} По клику ''Show bug ID list'' показ списка ID багов через пробел на странице поиска.<br />
* {{/U}} Подсветка красным цветом поля ввода времени в случае ввода некорректного значения, и ловля NaN — изменения закоммитит, но без времени.<br />
* {{/N}} Массовый Excel-импорт багов — {{Bug|42133}}. Справка: [[Bugzilla#Импорт багов из Excel-листов]].<br />
* {{/S}} Поддержка русской морфологии в полнотекстовом поиске MySQL — {{Bug|46221}}.<br />
* {{/C}} Ссылки на сотрудников в Plantime вместо mailto: (префикс настраивается) — {{Bug|46053}}.<br />
<br />
=== Доработки 3.4 ===<br />
<br />
Bugzilla 3.4 установлена в качестве боевой ''30 августа 2009''. Всем спасибо за боевое «гамма-тестирование» (потому, что даже не совсем бета). :)<br />
<br />
* {{/N}} Возможность создания багов в состоянии RESOLVED и выбора Resolution при этом — {{Bug|53758}}.<br />
* {{/N}} Показ списков CC а-ля [https://bugzilla.mozilla.org/ Mozilla Bugzilla] — сначала в div’е со скроллером, и из него можно скопировать в буфер, а по нажатию edit — multiple selection box — {{Bug|54165}}.<br />
* {{/U}} Сохранение порядка сортировки при редактировании запроса — {{Bug|54380}}.<br />
* {{/U}} Стили ссылок и подсказок в графах и деревьях — {{Bug|54382}}.<br />
* {{/N}} Редактируемость Default CC — {{Bug|55095}}.<br />
* {{/U}} Радиобатон для выбора файл/текст вложение — {{Bug|53850}}.<br />
* {{/N}} Текстовые вложения при постановке бага — {{Bug|53638}}.<br />
* {{/F}} Фикс для кривого {{CPAN|Encode::MIME::Header}} — см. {{Bug|53764}}. Актуально при использовании Exchange.<br />
* {{/U}} Выбор положения «подвала» с сохранёнными запросами — сверху, снизу или и там, и там — {{Bug|53697}}.<br />
* {{/N}} Copy-paste для tab-separated таблиц с отрисовкой в ASCII. {{Bug|55876}}<br />
* {{/U}} Изменён метод формирования списка CC при клонировании бага. {{Bug|55966}}.<br />
* {{/U}} Submit anyway, как заявлено, только my changes, а не значения всех полей со старой формы. {{Bug|56327}}.<br />
* {{/U}} «Умные» поля Version, Component и Target Milestone в групповом редактировании багов. То есть на выбор предоставляется <s>пересечение</s> (твою мать, тоже мне «умные» — это были тупые, «умные» — это объединение) множеств доступных значений для всех выбранных продуктов. {{Bug|56536}}.<br />
* {{/F}} Принудительная перезагрузка формы редактирования бага в Firefox при нажатии Reload. Баг стоит на фаерфокс на багзилле мозиллы, но это один из багов, о котором «nobody cares», тянется он уже 8 лет, кажется. {{Bug|57315}}.<br />
* {{/U}} Ввод рабочего времени в формате ЧЧ:ММ. {{Bug|58021}}.<br />
* {{/S}} Полностью переделанное построение графов зависимостей — баги разбиваются на кластеры и отрисовываются в svg+png. {{Bug|53609}}.<br />
* {{/U}} Фокус на поле «quick search» на Bugzilla Main Page. {{Bug|58301}}.<br />
* {{/F}} Красивые страницы ошибок, с красной рамочкой и даже с котёнком и пожарной машиной в случае, если ошибка в коде. В том числе правильная ловля ошибок компиляции, в том числе правильная обработка ошибок в вебсервисах. {{Bug|58633}}.<br />
* {{/N}} Настройка на уровне продукта, включающая предупреждения в случае, если в баг этого продукта СПИСЫВАЕТСЯ время. То есть «предпочитать не списывать время сюда». {{Bug|59357}}. {{Bug|59357}}.<br />
* {{/F}} Детализация сообщений об ошибках неправильно выбранных полей. {{Bug|61456}}.<br />
* {{/S}} Колонки «Blocked» и «Depends on» в поиске. {{Bug|61979}}.<br />
* {{/C}} Поддержка [[ShowTeamWork]] в RSS-лентах. (бага нет)<br />
* {{/U}} Стили описания запроса поиска. {{Bug|62248}}.<br />
* {{/F}} Ликвидация дублирования багов при неудачном создании attachment’а (завернули в транзакцию). {{Bug|63152}}.<br />
* {{/S}} Колонки «Flags» и «Requests» в поиске. {{Bug|62964}}.<br />
* {{/F}} Разрешение правки значений Custom полей не только admin’ам, а группе editfields. {{Bug|63441}}.<br />
* {{/NU}} Сильно переделан быстрый поиск, в сторону большей интуитивности синтаксиса (он был безумный, и код тоже). {{Bug|63855}} и не только.<br />
* {{/N}} Отправка почты в формате HTML+plaintext (multipart/alternative), а не только plaintext, в том числе и о флагах. Кроме того, переделаны проверки безопасности, так что теперь письма приходят, но ровно с тем количеством информации, которое необходимо. {{Bug|53624}}, {{Bug|53647}}, {{Bug|64616}}.<br />
<br />
=== Доработки 3.6 ===<br />
<br />
Bugzilla 3.6 установлена в качестве боевой ''10 июня 2010''.<br />
<br />
* {{/U}} Submit формы бага по Ctrl-Enter. {{Bug|64559}}, {{Bug|65729}}.<br />
* {{/F}} Selenium-тесты для Bugzilla и просто автотесты для вебсервисов. {{Bug|64428}}.<br />
* {{/U}} Javascript-сортировка списка багов на стороне клиента (украдено из https://bugzilla.mozilla.org/).<br />
* {{/NU}} Предлагать вариант пользователя при опечатке (на основании расстояния Левенштейна) при доступности хранимой процедуры LEVENSHTEIN. {{Bug|64855}}.<br />
* {{/F}} При внесении изменений или постановке багов, теперь происходит перенаправление на страницу бага, а не показ страницы бага самим <tt>process_bug.cgi</tt>. Эффективно это означает, что после изменений теперь всегда можно обновлять страницу (F5), и повторно изменения отправляться не будут — {{Bug|64562}}.<br />
* {{/F}} Полностью выкинута «новая система расширений», внесённая в 3.6, и добавлена своя. Ибо она была совершенно ужасна, хотя и выросла из относительно разумной идеи. Это не говоря о несовместимости со старым, проверенным, хотя и не очень красивым методом. Своя — совместима и сделана на основе «best practices», взятых из MediaWiki. Честно — когда я это увидел, оно меня убило — я не знал даже, что так в Perl’е вообще можно делать. И лучше бы не узнавал. Описано в {{Bug|40933}} в районе объединения с 3.6.<br />
* {{/U}} Угадывание кодировки текстовых вложений и показ юникодных с правильной — {{Bug|65730}}.<br />
* {{/S}} Отчёты — возможность измерения не только количества багов, но и трудозатрат, в том числе затраченного времени — {{Bug|65839}}.<br />
* {{/U}} Фокус на поле выбора юзеров / кнопке Confirm на странице подтверждения выбора пользователей. {{Bug|65880}}.<br />
* {{/C}} Раскрытие «групповых пользователей» при установке на них флага (ставится много флагов на подписанных). {{Bug|66094}}.<br />
* {{/U}} Добавление ссылки на аттачмент при клонировании бага из коммента с аттачментом. {{Bug|66177}}.<br />
* {{/U}} Добавление пустых значений в отчёты (таблицы/графики), регистронезависимость группировки в отчётах, рефакторинг группировки. {{Bug|66350}}.<br />
* {{/C}} Системная настройка снятия флагов при закрытии бага. {{Bug|68430}}.<br />
* {{/U}} Сортировка пользовательских настроек по алфавиту.<br />
* {{/N}} Массовое обновление багов из Excel. {{Bug|68621}}.<br />
* {{/C}} Форма для фиксации трудозатрат задним числом и от чужого имена, и распределения часов. Права на эту форму — группа '''worktimeadmin'''. {{Bug|68921}}, [[Bug 68921]].<br />
* {{/N}} Настройка компонентов «Open for bug entry», по аналогии с закрытием продуктов. {{Bug|68921}}.<br />
* {{/C}} Связь продуктов — внешний &larr; внутренний. {{Bug|68921}}.<br />
* {{/F}} Блокировка строки бага (SELECT FOR UPDATE) при обновлении. {{Bug|69012}}.<br />
* {{/NU}} Пользовательская настройка кодировки и разделителя для экспорта и импорта CSV. {{Bug|69766}}.<br />
* {{/F}} Возможность превращения Bugzilla-поисков во вьюшки БД с доступом извне. {{Bug|61728}}.<br />
* {{/F}} Настройка копирования/некопирования значения кастом поля при клонировании бага. {{Bug|69325}}.<br />
* {{/F}} Численный тип кастом полей. {{Bug|55655}}.<br />
* {{/F}} Добавление селект-полей в фильтры поиска + рефакторинг зависимостей полей/значений. {{Bug|69481}}.<br />
* {{/N}} Проверки («предикаты») корректности изменений багов. {{Bug|68921}}, {{Bug|61225}}, {{Bug|65361}}, [[Bugzilla: проверки изменений багов]].<br />
* {{/NU}} Пользовательская настройка влияния Silent на почту о флагах. {{Bug|72510}}.<br />
* {{/U}} Письма о флагах теперь приходят со ссылкой сразу на правильный коммент бага. {{Bug|71288}}.<br />
* {{/F}} Корректная валидация значений полей при обновлении багов:<br />
** Не требовать прав на баг, связанный полем Bug ID, при обновлении доступного бага. {{Bug|72149}}.<br />
** Общий механизм проверки значений зависимых полей в зависимости от значений контролирующих полей, интегрированный с бывшей формой «Verify New Product Details». {{Bug|61456}}.<br />
** Очищать значения полей, не показываемых после изменений других полей. {{Bug|63249}}.<br />
* {{/S}} Колонка «Первый коммент» в поиске. {{Bug|71955}}.<br />
* {{/F}} Несколько функций API для работы со значениями полей. Плюс новый вид RPC — принимает запросы по REST, отвечает простым видом XML, причём все ошибки отлавливаются и включаются в ответ. {{Bug|70168}}, [[API_багзиллы_для_внешних_систем]].<br />
* {{/F}} Лимит 255 символов на значения строковых Custom полей. Сделано ранее, всплывало в {{Bug|72711}}.<br />
* {{/S}} Печать SCRUM-карточек из списка багов. {{Bug|45485}}.<br />
* {{/C}} Автоматическое проставление значений поля «внешний баг» при клонировании багов во внешние/внутренние продукты и кнопочки клонирования. {{Bug|63249}}, {{Bug|69514}}.<br />
* {{/S}} Использование PostgreSQL’евского полнотекстового поиска, сортировка по релевантности при быстром поиске. Исправления всех доработок для совместимости с PostgreSQL. {{Bug|72826}}, {{Bug|72816}}.<br />
* {{/F}} Опция для добавления полей типа Bug ID в зависимости бага. {{Bug|73054}}.<br />
* {{/U}} Строка быстрого поиска увеличена до 300px. {{Bug|73354}}.<br />
* {{/F}} В отладочных целях: поддержка корректной перезагрузки всех Perl-модулей при работе под mod_perl. Для активации нужно добавить в конфигурацию Apache '''перед''' <tt>PerlConfigRequire .../mod_perl.pl</tt>:<br />
*: <tt>&lt;perl>$Bugzilla::RELOAD_MODULES = 1; $^P |= 0x10;&lt;/perl></tt><br />
* {{/F}} Оптимизация прав доступа к разделу администрирования: группа '''admin_index'''.<br />
* {{/F}} Кэширование JSON-кодированных данных зависимостей значений полей друг от друга для формы поиска и формы бага на стороне клиента с корректным сбросом кэша. {{Bug|70605}}.<br />
* {{/F}} Кэширование метаданных — объектов полей Bugzilla::Field со всеми сопутствующими и набора полей для поиска в памяти между запросами. {{Bug|70605}}.<br />
* {{/S}} {{/F}} Практически одна из ГЛАВНЫХ фич Bugzilla4Intranet — '''полностью переделанный движок поиска''', оптимизированный настолько, что Full-Scan’ов таблиц не происходит '''практически никогда''', в том числе и при использовании сложных поисковых выражений. Честно — как без этого живёт и до сих пор не сдохла багзиллы Мозиллы (http://bugzilla.mozilla.org/) — нам неизвестно. {{Bug|70605}}<br />
* {{/F}} Полностью выкошена библиотека YAHOO UI. {{Bug|70605}}<br />
* {{/N}} Расширение для вставки ограниченных правами списков багов в MediaWiki. {{Bug|71261}}<br />
* {{/C}} Ссылка клонирования во внешний/внутренний продукт. {{Bug|69514}}<br />
* {{/C}} Настройка на уровне продукта, рекомендующая не списывать в него время. {{Bug|59357}}<br />
* {{/NU}} Массовая загрузка вложений прямо с формы редактирования бага. {{Bug|68919}}<br />
* {{/N}} Настройка unauth_bug_details, разрешающая показывать, в каком продукте находится недоступный баг. {{Bug|67778}}<br />
* {{/N}} Шаблон «SimpleTable» для вставки списков багов в другие страницы посредством iframe, с поддержкой масштабирования этого iframe с помощью HTML5 postMessage кроссдоменной коммуникации, плюс Wiki-шаблон для удобства эксплуатации данной доработки. {{Bug|70302}}<br />
* {{/C}} Зависимость внутренних багов второго уровня от внешних багов. {{Bug|75690}}<br />
* {{/U}} Tab-index-ы на форме постановки бага. {{Bug|86003}}<br />
* {{/S}} Колонка «Duplicate of» в поиске. {{Bug|86642}}<br />
* {{/NU}} Загрузка скриншотов через SUPA. {{Bug|87188}}<br />
* {{/C}} Worktime-Only комментарии, схлопываемые по умолчанию. {{Bug|87696}}<br />
* {{/S}} Колонка «Дата последнего комментария» в поиске. {{Bug|91323}}<br />
* {{/S}} Колонка «Последний комментарий» в поиске. {{Bug|98364}}<br />
* {{/N}} Возможность автоматической подписки на баги, удовлетворяющие заданным условиям поиска. {{Bug|101207}}<br />
* {{/NU}} Продукт, Reporter, QA и Assignee в результатах поиска показываются ссылками на списки соответствующих открытых багов. {{Bug|102435}}<br />
* {{/NU}} Полностью новая форма настроек доступа к продукту, вместо стандартного УЖОСА. {{Bug|102958}}<br />
* {{/S}} Колонка «Продукт внешнего бага» в поиске. {{Bug|111527}}<br />
* {{/N}} Back-port веб-сервисов из Bugzilla 4.0.1. {{Bug|84586}}.<br />
<br />
== Внешние баги ==<br />
<br />
* {{Bug|12122}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=302778 Mozilla Bug 302778 — When using IE, all negative event checkboxes are missing from email preferences page]<br />
* {{Bug|16361}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=477264 Mozilla Bug 477264 — Server error 'Foreign key constraint fails…' when adding any attribute into an environment]<br />
* {{Bug|38801}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=501639 Mozilla Bug 501639 — Firefox suggests «attachment.cgi» instead of real attachment filename when downloading (due to content-disposition)]<br />
* {{Bug|40933}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=446598 Mozilla Bug 446598 — provide useful change information in an rss/atom feed of recent changes]<br />
* {{Bug|40933}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=65477 Mozilla Bug 65477 — Allow different styles of bugmail by user preference (HTML, XML, etc.)]<br />
* {{Bug|46262}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=486666 Mozilla Bug 486666 — Russian translation for Testopia documentation]<br />
* {{Bug|47074}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=381912 Mozilla Bug 381912 — <nowiki>[email_in]</nowiki> Add the ability to add attachments by email]<br />
* {{Bug|53836}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=41651 Mozilla Bug 41651 — Relative advanced queries]<br />
* {{Bug|53848}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=164009 Mozilla Bug 164009 — Show which columns are being sorted on, in buglist.cgi, and what direction the sort is]<br />
* {{Bug|54380}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=516956 Mozilla Bug 516956 — Sort order is cleared into «Reuse same sort as the last time» on query edit]<br />
* {{Bug|54468}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=517265 Mozilla Bug 517265 — «A comment» (longdesc) in advanced search is resetted after clicking «Edit Search»]<br />
* {{Bug|53629}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=518397 Mozilla Bug 518397 — Bugzilla::Util::get_text implementation leads to performance issues on long bugs], [https://bugzilla.mozilla.org/show_bug.cgi?id=518398 Mozilla Bug 518398 — Why Bugzilla doesn’t use Template::Stash::XS?]<br />
* {{Bug|53697}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=527976 Mozilla Bug 527976 — Ability to select position of useful-links and common-links (page header, page footer or both)]<br />
* {{Bug|55790}}: [https://bugzilla.mozilla.org/show_bug.cgi?id=531855 Mozilla Bug 531855 — Show product/component in page title]<br />
<br />
[[Category:Bugzilla]]</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=%D0%A0%D0%B0%D0%B7%D0%B2%D0%B8%D1%82%D0%B8%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BC%D0%BE%D0%B1%D0%B8%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2_%D0%B2_%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B5_%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D0%BE%D0%B3%D0%BE_%D0%9F%D0%9E_(%D0%94%D0%BC%D0%B8%D1%82%D1%80%D0%B8%D0%B9_%D0%9A%D0%BE%D1%81%D1%82%D1%8E%D0%BA,_OSDN-UA-2012)&diff=8018
Развитие операционных систем мобильных устройств в контексте свободного ПО (Дмитрий Костюк, OSDN-UA-2012)
2023-11-04T07:42:24Z
<p>VitaliyFilippov: Reverted edits by SEO TROLLING (talk) to last revision by StasFomin</p>
<hr />
<div>== Аннотация ==<br />
;Докладчик: [mailto:dmitriykostiuk@gmail.com Дмитрий Костюк]<br />
<blockquote><br />
</blockquote><br />
<br />
<br />
== Видео ==<br />
<br />
{{vimeoembed|51016753|800|376}}<br />
{{ftp-osdn-ua-2012|mobile-os-evolution-kostuk}}<br />
<br />
<poll><br />
ALTERNATIVE<br />
REVOTE<br />
UNIQUE<br />
Оцените доклад «{{PAGENAME}}»:<br />
Отлично!<br />
Хорошо.<br />
Нормально…<br />
Не очень :(<br />
Просто хочу узнать результаты.<br />
</poll><br />
<br />
== Слайды ==<br />
[[File:Развитие операционных систем мобильных устройств в контексте свободного ПО (Дмитрий Костюк, OSDN-UA-2012).pdf|left|page=-|256px]]<br />
<br />
{{----}}<br />
== Примечания и отзывы ==<br />
<!-- <blockquote>[©]</blockquote> --><br />
<br />
<blockquote><br />
Понравился рассказ про историю мобильных ОС - обожаю скриншоты раритетных интерфейсов :) Вспомнили и Newton, и Palm, и Psion, и других ветеранов, а также попытки СПО вылезти на этот рынок.[http://frenzytechnix.livejournal.com/27935.html ©]</blockquote><br />
<br />
{{include-review|OSDN-UA-2012 (Обзор Стаса Фомина)/Развитие операционных систем мобильных устройств}}<br />
<br />
<references/><br />
<br />
[[Category:OSDN-UA-2012]]</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=%D0%91%D0%BB%D0%BE%D0%B3:%D0%A1%D1%82%D0%B0%D1%81_%D0%A4%D0%BE%D0%BC%D0%B8%D0%BD/2009-08-13_%D0%9A%D0%B0%D0%BD%D0%BA%D0%B0%D0%BD_%D0%B8_Kanban,_%D0%93%D0%BE%D0%BB%D0%B4%D1%80%D0%B0%D1%82%D1%82_%D0%B8_%D0%B2%D1%8B%D0%BF%D1%83%D0%BA%D0%BB%D0%B0%D1%8F_%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F&diff=8017
Блог:Стас Фомин/2009-08-13 Канкан и Kanban, Голдратт и выпуклая оптимизация
2023-11-04T07:42:10Z
<p>VitaliyFilippov: VitaliyFilippov moved page ВС России сорвали четыре попытки ротации ВСУ на Южно-Донецком направлении to [[Блог:Стас Фомин/2009-08-13 Канкан и Kanban, Голдрат...</p>
<hr />
<div>В компании лето, однако активно проводим всякие сборища-встречи-семинары.<br />
<br />
Была встреча «[http://team.custis.ru/2009/07/kanban-vs-scrum.html Kanban vs. Scrum]», есть некий тренд к большей простоте и экономичности, даже от SCRUMа.<br />
<br />
У нас в компании некоторые проекты уже начали работать по Kanbaну, а я даже внедрил Kanban дома, для регулирования падающего на меня потока домашних работ («Incomings»→«In process»→«Done»).<br />
<br />
Благо все условия для этого есть — все поверхности (стены, полы и даже потолок у нас в квартире покрыты пробкой):<br />
<br />
[[File:Семейный Kanban на пробковых стенах.jpg|512px|center]]<br />
<br />
В тему моды экономичных производственных Lean-практик был еще один семинар по Голдратту: <br />[http://team.custis.ru/2009/08/blog-post_06.html «Управление производством на основании численных данных» и «Теория ограничений и линейное программирование»]<br />
<br />
Доволен, что удалось практически за день сделать интересную презентацию, прорешав доступные примеры из Голдраттового «Синдрома Стога Сена» и найдя там компьютером ошибки. ''Впрочем, это могут быть ошибки перевода, уже заказал книгу на языке оригинала, жду, надо разобраться''.<br />
<br />
Несколько убило, что в зале среди IT-шников почти никто не знал смысл словосочетания «линейное программирование».<br />
<br />
Увы, и ах.<br />
<br />
Кстати, в начале следующей недели — очередное сборище: «[http://team.custis.ru/2009/08/agilerussia-agile.html Метрики в Agile]».<br />
{{wl-publish: 2009-08-13 23:29:00 +0400 | StasFomin}}</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=%D0%91%D0%BB%D0%BE%D0%B3:%D0%A1%D1%82%D0%B0%D1%81_%D0%A4%D0%BE%D0%BC%D0%B8%D0%BD/2009-08-13_%D0%9A%D0%B0%D0%BD%D0%BA%D0%B0%D0%BD_%D0%B8_Kanban,_%D0%93%D0%BE%D0%BB%D0%B4%D1%80%D0%B0%D1%82%D1%82_%D0%B8_%D0%B2%D1%8B%D0%BF%D1%83%D0%BA%D0%BB%D0%B0%D1%8F_%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F&diff=8016
Блог:Стас Фомин/2009-08-13 Канкан и Kanban, Голдратт и выпуклая оптимизация
2023-11-04T07:41:36Z
<p>VitaliyFilippov: Reverted edits by SEO TROLLING (talk) to last revision by VitaliyFilippov</p>
<hr />
<div>В компании лето, однако активно проводим всякие сборища-встречи-семинары.<br />
<br />
Была встреча «[http://team.custis.ru/2009/07/kanban-vs-scrum.html Kanban vs. Scrum]», есть некий тренд к большей простоте и экономичности, даже от SCRUMа.<br />
<br />
У нас в компании некоторые проекты уже начали работать по Kanbaну, а я даже внедрил Kanban дома, для регулирования падающего на меня потока домашних работ («Incomings»→«In process»→«Done»).<br />
<br />
Благо все условия для этого есть — все поверхности (стены, полы и даже потолок у нас в квартире покрыты пробкой):<br />
<br />
[[File:Семейный Kanban на пробковых стенах.jpg|512px|center]]<br />
<br />
В тему моды экономичных производственных Lean-практик был еще один семинар по Голдратту: <br />[http://team.custis.ru/2009/08/blog-post_06.html «Управление производством на основании численных данных» и «Теория ограничений и линейное программирование»]<br />
<br />
Доволен, что удалось практически за день сделать интересную презентацию, прорешав доступные примеры из Голдраттового «Синдрома Стога Сена» и найдя там компьютером ошибки. ''Впрочем, это могут быть ошибки перевода, уже заказал книгу на языке оригинала, жду, надо разобраться''.<br />
<br />
Несколько убило, что в зале среди IT-шников почти никто не знал смысл словосочетания «линейное программирование».<br />
<br />
Увы, и ах.<br />
<br />
Кстати, в начале следующей недели — очередное сборище: «[http://team.custis.ru/2009/08/agilerussia-agile.html Метрики в Agile]».<br />
{{wl-publish: 2009-08-13 23:29:00 +0400 | StasFomin}}</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=%D0%91%D0%BB%D0%BE%D0%B3:%D0%A1%D1%82%D0%B0%D1%81_%D0%A4%D0%BE%D0%BC%D0%B8%D0%BD/2007-08-13_%D0%9D%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D1%8C/I%D0%AF%D0%AF%C6%8EV%C6%8E%D0%AFSIBL%C6%8E&diff=8015
Блог:Стас Фомин/2007-08-13 Необратимость/IЯЯƎVƎЯSIBLƎ
2023-11-04T07:40:30Z
<p>VitaliyFilippov: Reverted edits by SEO TROLLING (talk) to last revision by StasFomin</p>
<hr />
<div>Необратимость/'''IЯЯƎVƎЯSIBLƎ'''<br />
<br />
Очередная французская «жесть», как она есть. Европейская «чернуха» не отстаёт от российской, очередное пугалово для иммигрантов — не ходите дети в Париж: там бьют и сношают, там помойка, все живут и передвигаются в подземельях (метро, переходы, гей-клубы).<br />
<br />
Все традиции жанра «низкобюджетное культовое кино для фестиваля» соблюдены. В первую очередь экономия на операторе и освещении: похоже, что съёмками занимается подвернувшийся клиент клуба «Ректум», педераст в хорошем и плохом смысле, бегающий за актёрами с трясущейся наладонной miniDV камерой. Все настолько темно и дёрганно, что видимо напутали даже [http://www.world-art.ru/cinema/cinema.php?id=11996 краткое содержание] на «Word-Art»:<br />
<br />
Поссорившись со своим бывшим мужем Маркусом (Венсан Кассель), Алекс (Моника Беллуччи) ушла с вечеринки и отправилась домой. …Маркус и нынешний любовник Алекс Пьер (Альбер Дюпонтель) - решают покарать насильника собственными руками… &gt;&gt;<br />
<br />
Бывший муж конечно Пьер, а нынешний любовник — Маркус. Впрочем, один хрен. Выдам еще один секрет Полишинеля — в фильме развернута хронология событий, но развернута не так заумно, как в «Memento», а аккуратно-линейно — в каждый момент понимаешь, что самая задница уже позади (т.е. в будущем), дальше будет лучше и спокойней, можно есть попкорн и пить боржом.<br />
<br />
Фильм начинается с совершенно Сорокинского диалога пары старых уродов, на тему «хорошо ли иттить своих дочерей» (запекать и есть их не догадались однако, см. «Сорокин:Настя», явно ограниченные люди), с моралью «все нормально, преступлений нет, есть только поступки». Взбодрив таким образом неподготовленного зрителя, камера вылетает во двор, где наблюдается явный шухер с агрессивными гомосеками и выводящей/выносящей из подвала главных героев полицией. Щелчок в прошлое — и мы оказываемся в первом ключевом эпизоде: «я мщу и мстя моя ужастна». Герой под низкочастотную вибрацию мечется по подземелью с уродами и одно только слово твердит «Глиста знаешь? Где Глист, бл@? Может ты Глист?». Уроды откровенно над ним глумятся — понятно, где может быть глист. В результате герой срывается на одного из гоблинов, но не тут то было — гей-гоблин при моральной поддержке болельщиков в два прихлопа ломает герою руку, и в два притопа обездвиживает и заголяет зад, явно не для того, чтобы сделать укол или отшлёпать. Неизбежное Анальное Насилие прерывается появлениям Героя-2 с огнетушителем, которым он разделывает гоблина в полное мясо (судя по фильмам у меня чёткое ощущение, что огнетушителями, как и подушками безопасности убито больше людей, чем спасено). Немедленно возникают мысли, тянущие на мораль фильма: «так дела не делаются» или «месть это блюдо, которое подают холодным». Добавим — и готовым. Вспоминается непревзойдённая отечественная классика — «Брат», где герой долго-долго строгал обрез и смертельную дробь, а общение с уродами заняло меньше десяти секунд — выстрел, «всем лежать, мордой в пол», выстрел.<br />
<br />
Дальше перемотка назад ускоряется, короткие блоки показывают метания нашего героев в поисках сутенёра-гомосека-солитёра, и наконец доезжаем до второго ключевого эпизода, гвоздя программы — да, режиссер не обманул, обломав первое Анальное Насилие, он преподносит страждущему зрителю завершённое десятиминутное Анальное Насилие в багровых тонах. Причём гомосексуалистом и над женщиной (не знаю, возможно это и фантастика). Здесь, те кто напрягал зрение и кому еще не отшибло память, могут таки убедится, что показанная будущая мстя прошла не по адресу, хотя и близко — насильник aka «глист-нюхатель» стоял рядом с забитым гоблином. «Упс... промашка вышла». Тут зритель очередной раз ухмыляется: «ну Семён Семеныч...», «так дела не делаются», «надо было меньше пить и нюхать» — действительно, у героев было полно возможностей решить вопрос с Глистом — и сдать прямые улики полиции, и дать денег уличным бандитам-контроллерам, и просто проспаться и вооружится перед тем как... Лично я в этот момент окончательно отказал героям в разуме и адекватности и перестал им сочувствовать. Разве что слегка сочувствовал Пьеру — бывшему мужу Алекс, который, хоть и тюфяк-тюфяком, вел себя относительно адекватно (профессор философии однако), но окончательно сорвался в Ректуме «ах я плох в сексе так, как слишком забочусь о партнёре?» — «так ибих их всех!».<br />
<br />
Дальнейший тренд эпизодов — «возвращение в невинность». Предыстория вопроса, почему девушка бредет одна по переходу, показывает, что во всём надо винить только самих пострадавших. Их ни разу не жалко. Мужу-тюфяку надо немного мачизма, а не лобзаний с любовником. Жене — поменьше блядства, и, как будущей матери, не пить и не курить («курящая мать никогда не станет отцом»). Любовнику — найти работу, деньги, перестать пить и нюхать, не помешал бы и тренажёрный зал.<br />
<br />
Остаётся надеяться, что зрители сделают правильные выводы из картины, и анальный секс будет у них только по взаимному согласию. И да — в Париж я больше не поеду (был раз ночью, впечатления очень похожи на этот фильм — опасная помойка).<br />
{{wl-publish: 2007-08-13 03:49:00 +0400 | StasFomin}}</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Screen2Log&diff=8014
Screen2Log
2023-11-04T07:40:10Z
<p>VitaliyFilippov: Reverted edits by SEO TROLLING (talk) to last revision by StasFomin</p>
<hr />
<div>Screen2Log — скринкастер, адаптированный для тестировщиков и обычных пользователей.<br />
<br />
=== Зачем нужен скринкастер? ===<br />
<br />
Особенно обычным пользователям?<br />
<br />
С тестировщиками более-менее понятно, нетривиальное ручное тестирование отличается от простого простукивания тривиальных тест-кейсов, когда баги так и лезут в мешок.<br />
<br />
Оно скорее похоже на долгую утомительную рыбалку, или патрулирование, когда неясно, где искать добычу/врагов, попадутся ли они, когда, и как оно будет выглядеть.<br />
<br />
И когда, наконец-то, оно попадается (клюет! что-то мелькнуло в поле видимости…), то всплывает куча проблем:<br />
* баг долго оформлять — а это сбивает настрой, поэтому гуру exploratory testing требуют отдельных штурманов-регистраторов, пока «снайпер» занимается охотой, не выходя из своего боевого транса.<br />
* трудно точно описать, особенно если оно уже прошло → это чисто психофизиология, уже через пару минут нельзя с 100% уверенностью утверждать, что это было («врет как очевидец™»).<br />
* ну и наконец, разработчики/подрядчики/техподдержка может просто не верить, если ваш случай редок («It works on my machine!™»).<br />
<br />
А в что касается обычных пользователей… то можно сказать, что вне зависимости от желания, мы все сейчас тестировщики, по факту использования, увы, различных софтин и сервисов.<br />
Причем в отличие от штатных тестировщиков, у которых более-менее налажен контакт с разработчиками, от рядовых пользователей девелоперы часто ограждены <br />
* либо «эффективной» техподдержкой, из трех уровней индусов или дебилов в колл-центре, прорваться сквозь которых, убедив, что ты не ламер, и проблема вызвана не ''только'' твоими кривыми руками, может только очень упорный боец, <br />
* либо «эффективным» пофигизмом. <br />
<br />
Прорвать и то и другое часто помогает лишь очевидная демонстрация, которая, в случае игнорирования, может быть угрозой репутации продукта.<br />
<br />
Решение очевидно — да, нужно записывать экран, и уметь это показать-переслать и т.п.<br />
<br />
Это также поможет вам в случае конфликтов пользования финансово-торговыми сервисами (например, Ebay глючит при оплате, вы не можете оплатить выигранный лот, и автоматически становитесь виновным), ну и вообще.<br />
<br />
А кроме ужасов, компьютер часто является источником радости (lulzов), и скринкастер поможет вам запомнить такие веселые моменты, как эпикфейлы каких нибудь понтовых сайтов («deface сайта минобороны», «детское порно на сайте телеканала», «падение яндекса»…), ну и прочие, редкие события. Причем к скринкасту доверия больше, чем с скриншоту, который совсем легко подделать.<br />
<br />
=== Зачем нужен ''еще один'' скринкастер? ===<br />
<br />
Ведь тысячи их! Платных и бесплатных!<br />
C веселым GUI! И даже предлагающие загрузку в интернет на свои сервисы!<br />
<br />
И мы пробовали многие из них. Платные и бесплатные.<br />
У нас в компании есть site license на один из неплохих вариантов, в доводке которого я принимал активное участие<br />
(слал авторам кучу баг-репортов и фича-реквестов).<br />
<br />
И все же сел делать собственный велосипед.<br />
<br />
Во-первых, законы Гейзенберга и Паркинсона-Мерфи неумолимы — все интересное/опасное, баги, сбои, измены, ДТП, и прочий криминал, обычно происходят ровно тогда, когда на это никто не смотрит и не снимает.<br />
Записывать надо начать до! Т.е. по-уму, надо писать постоянно.<br />
<br />
Если писать непрерывно в один файл, как делают почти все отсмотренные скринкастеры, то<br />
* либо получается большой жирный файл, который никуда не переслать, не приаттачить к багу и т.п., если не занятся видеомонтажем — вырезанием и т.п. А надо то быстро! Не выходя из режима «exploratory testing»! Баг репорт должен быть мгновенным и убедительным!<br />
* либо не получается ничего — падает не только софтина, но и скринкастер (или система целиком, BSOD), и все накрывается ра<s>к</s>ом.<br />
<br />
Плюс:<br />
* Скринкастер может существенно тормозить вашу нормальную работу. Да, регистрация это неплохо, но работа-то важнее.<br />
* Записывать экран надо с точностью до пискеля, в мутной картике нет смысла. Это можно настроить почти во всех скринкастерах выбором правильного кодека. Но не всегда. И не во всех. И это отдельный геморрой.<br />
* Лень. Лень изучать интерфейсы какой-то дополнительной софтины. Удивительно, но факт, сейчас это один из основных тормозов использования чего-бы то ни было.<br />
* Нужна некоторая автоматическое структурирование базы записей, ибо часто то, что это проблема, осознается гораздо позже, и нужно иметь эффективный доступ к записям, без перебора файлов («screencast-1.avi», «ыsometesting-12.avi» и т.п.)<br />
<br />
=== Решение ===<br />
Предлагаемое решение: скринкастер без интерфейса:<br />
* только кнопка «Вкл» — запуск программы<br />
* и «Выкл» — закрыть окно крестиком, по Ctrl-C, или просто убив процесс любым способом.<br />
<br />
Будучи запущенным, он пишет в рабочий каталог (откуда его запустили), экран:<br />
* непрерывно<br />
* нарезая на куски заданного размера (разумные варианты где-то: 30сек, 1мин), это будет весить от 400K в разрешении 1280×800×5fps, до 5MB в 1920×1200×12fps, в любом случае, это вполне нормальный уровень аттачмента к письму или багу, можно быстро передать по Skype и т.п.<br />
* автоматически создавая временную структуру каталогов и файлов:<br />
yyyy-mm-dd\hh\yyyy-mm-dd-hh-mm-ss.avi<br />
* работает с самым низким приоритетом, понижая записываемый fps (для большинства программ, если вы только не тестируете шустрые игры или видеоплееры — это не очень критично), лишь бы не мешать.<br />
<br />
Доступ же к базе записанных скринкастов:<br />
* автоматический, по hotkey, или вызову ярлыка — работает, даже когда скринкастер выключен.<br />
* вообще говоря, просто открывается стандартный интерфейс просмотра папок с видео, который, в Windows 7, с выставленным размером Extra Large Icon, суперудобен, для того, чтобы даже не запуская видео, найти нужный слот-отрывок — достаточно вспомнить «примерно когда это было?» и проскроллировать каталог этого часа с крупными Thumbnailами — прекрасно видно, где и что происходило.<br />
* После нахождения нужного отрывка (или несколько), их можно<br />
** простой пользователь — обычным drag-and-drop-ом перетащить в форму аттачмента письма или бага.<br />
** продвинутый пользователь зажмет «Shift», и в контекстном меню объекта в Explorere появится пункт «Copy as path»…<br />
<br />
== Инсталляция ==<br />
<br />
=== x264vfw ===<br />
Установите кодек x264, 32 битную версию (даже, если у вас Win764bit):<br />
* http://sourceforge.net/projects/x264vfw/files/x264vfw/<br />
<br />
Это нужно для кодирования видео.<br />
<br />
=== K-Lite Codec Pack ===<br />
Теоретически, можно использовать другой pack кодеков, включающих ffdshow, или поставить ffdshow отдельно, но пока этот вопрос плотно не исследовал.<br />
<br />
Скачать K-Lite Codec Pack в соответствии с битностью ваших виндов. [http://www.codecguide.com/klcp_64bit.htm 64bit] или [http://www.codecguide.com/download_k-lite_codec_pack_standard.htm 32bit].<br />
<br />
При инсталляции выберите для надежности Advanced Mode (теоретически, все настройки должны и так правильно выставится, но мало ли что):<br />
[[File:K-Lite Codec Pack installation. Advanced Mode.png|center]]<br />
<br />
Выберите ffdshow для декодирования H264:<br />
[[File:K-Lite Codec Pack installation. FFDSHOW 4 H264.png|center]]<br />
<br />
Убедитесь, что ему разрешено генерировать thumnailы для AVI-видео (остальное по вкусу):<br />
[[File:K-Lite Codec Pack installation. thumnailы для AVI-видео.png|center]]<br />
<br />
=== Screen2Log ===<br />
Опционально, но очень рекомендую (особенно, если у вас большой монитор, по крайней мере не маленький 10" нетбук):<br />
* Скачать http://bazaar.launchpad.net/~stanislav-fomin/screen2log/trunk/view/head:/install/install.reg<br />
* Запустить его (загрузить в реестр) дабл-кликом через explorer или командой:<br />
<tt>regedit install.reg</tt><br />
<br />
Это сделает большие иконки, для папок с типом видео. Выберите папку для хранения скринкастов, и очень рекомендую, зайти в ее свойства и выставить ей тип видео (если вы запускали install.reg, то у видео будут большие иконки, это очень удобно), и выставить также тип видео для подпапок:<br />
<br />
[[File:Customize Folder for Video.png|center]]<br />
<br />
<br />
Ну и затем,<br />
* скачайте http://bazaar.launchpad.net/~stanislav-fomin/screen2log/trunk/view/head:/bin/screen2log.exe<br />
* и положите его куда вам угодно <tt>screen2log.exe</tt><br />
<br />
Запускайте его с консоли, из той папки, в которую надо писать скрин-логи.<br />
Ну или сделайте ярлык.<br />
<br />
На самом деле, при каждом запуске, Screen2Log проверяет, что на рабочем столе есть ярлык для него, и создает его, устанавливая рабочий каталог в соответствии с тем, с которым его запустили, и также создает или обновляет ярлык «screenlogs», в который прописывает текущий каталог для скринкастов.<br />
<br />
Т.е. если вы хотите сменить место записи скринкастов — вам просто нужно запустить Screen2Log из другого рабочего каталога.<br />
<br />
Остановить утилиту просто — закройте окно с ним крестиком или нажмите «CTRL-C»<br />
<br />
Ну и в любое время, даже, когда Screen2Log не запущен, вы можете хоткеем (или ярлыком «screenlogs»)<br />
открыть папку, где структурировано по времени («Дата→Час→Нарезанные интервалы») разложены экранные ролики,<br />
и если вы установили тип видео и большие иконки, как мы рекомендовали выше, то вы увидите что-то вроде:<br />
<br />
[[File:Screen2Log ScreenLogs.png|center]]<br />
<br />
Т.е. элементарным скроллингом внутри папки-часа легко найти нужный момент (когда произошела проблема), а далее, либо <br />
drag-and-dropом, либо (как показано на рисунке) «SHIFT+правая клавиша мыши» и через контекстное меню «Скопировать как путь»,<br />
приаттачиваем нужный файл, к почте, или баг-трекеру.<br />
<br />
Да, хоткей по умолчанию немного дикий — «CTRL-ALT-SHIFT-L», но его можно поменять в настройках ярлыка «screenlogs».<br />
<br />
Успехов!<br />
<br />
=== Настройки ===<br />
<br />
Если запустить утилиту, она вам перечислит вам доступные опции:<br />
Usage: screen2log.exe [fps=fps] [slotsecs=slotsecs] [x1=x1] [x2=x2] [y1=y1] [y2=y2] [width=width] [install_shortcuts=<on/off>]<br />
fps=fps wanted FPS<br />
slotsecs=slotsecs Seconds per timeslot<br />
x1=x1 x1-coord of recorded area<br />
x2=x2 x2-coord of recorded area<br />
y1=y1 y1-coord of recorded area<br />
y2=y2 y2-coord of recorded area<br />
width=width Target width of screen log<br />
install_shortcuts=<on/off> Install shortcuts to desktop<br />
<br />
Разберем их подробней.<br />
<br />
По умолчанию, утилита записывает все доступные экраны (лучше захватить все, чем пропустить важное).<br />
Но если вы специально тестируете на втором (или наоборот) первом мониторе, то можно задать область записи,<br />
параметрами<br />
;x1, y1: координаты верхнего левого угла<br />
;x2, y2: координаты нижнего правого угла<br />
Если опустить какой-то параметр или задать его равным нулю, то он не будет ограничивать тот «полный экран». Т.е. (допустим, разрешение основного монитора 1920x1200)<br />
* при x2=0, y2=0 будет записан весь экран<br />
* при x1=1920 будет записываться то, что «справа» от вашего 24" монитора, например второй монитор.<br />
* при x2=1920 — только основной экран.<br />
<br />
<br />
;width: Если вы хотите сделать грубый рескейлинг при записи. Например, у вас большой монитор 1920×1200, можно задать width=960, и уменьшить размер экрана в 4 раза. Height вычисляется автоматически, чтобы сохранить aspect ratio.<br />
Это может быть полезно:<br />
* Уменьшить размер роликов:<br />
** Экономия места<br />
** Удобней просматривать их тем, у кого мониторы меньше<br />
** Т.е. при багрепортах и т.п., когда scale качества достаточно.<br />
* Запись видео — когда точность пикселей не важна, а вот FPS нужно побольше.<br />
<br />
Но алгоритм scalingа грубый, для терпимых искажений желательно чтобы он был как-то кратен исходному размеру (т.е. уменьшать ровно в 2/3/4 раза).<br />
<br />
<br />
;fps: Целевое число фреймов в секунду. Больший FPS не значит, что FPS будет гарантировано больше — реальный FPS утилита пишет в процессе работы. В целом, для записи работы с софтом обычно достаточно 4-5fps, если надо записывать видео → 12fps.<br />
<br />
;slotsecs: Сколько секунд на слот (отдельный файл). Все это зависит от удобства — меньше секунд → меньше файлы, возможно удобней аттачить к баг-репорту. Но при этом возможно придется аттачить несколько файлов. Ну и наоборот.<br />
<br />
;install_shortcuts: По умолчанию, при каждом запуске, screen2log создает shortcut на рабочем столе,<br />
* указывающий на ту версию, которой его вызвали (например, если вы вызвали новую версию, или куда-то переложили утилиту)<br />
* с теми параметрами, с которыми его вызвали (геометрия, fps, и т.п.). Таким образом запоминаются последние настройки.<br />
Но если указать «install_shortcuts=off», то этого не будет.<br />
<br />
=== Проблемы? ===<br />
Проблемы с использованием → mailto:stas-fomin@yandex.ru<br />
<br />
== Исходники ==<br />
* https://launchpad.net/screen2log<br />
<br />
== FAQ ==<br />
* Если запустить Screen2Log на машине, на которую зашли по RDP-сессии, а потом минимизировать окно, то ничего не записывается. WTF?<br />
<br />
Это свойство RDP-протокола, подающаяся как фича (экономия трафика).<br />
Есть хак над компом, с которого вы запускаете RDP-сессию: создать в его реестре DWORD параметр <tt>RemoteDesktop_SuppressWhenMinimized</tt> равный <tt>2</tt><br />
под веткой<br />
HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client<br />
или соответственно<br />
HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server Client</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B_%D0%93%D0%B0%D0%BD%D1%82%D0%B0_%D0%B2_Wiki&diff=7928
Диаграммы Ганта в Wiki
2020-12-01T15:50:14Z
<p>VitaliyFilippov: </p>
<hr />
<div>Есть поддержка простых диаграмм типа Ганта. Синтаксис:<br />
<br />
<pre><br />
<gantt [width=ширина height=высота]><br />
ресурс дата_начала число_дней название задачи<br />
...<br />
</gantt><br />
</pre><br />
<br />
Ресурс — без пробелов, дата_начала — в формате YYYY-MM-DD. Примеры:<br />
<br />
<gantt width="800" height="201"><br />
Разработка 2014-01-28 2 Баг 1<br />
Тестирование 2014-01-29 6 Баг 1<br />
Разработка 2014-02-03 4 Баг 2<br />
Тестирование 2014-02-06 2 Баг 3<br />
</gantt><br />
<br />
<gantt width="800" height="201"><br />
3.6.3 2014-01-28 14 Разработка<br />
3.6.3 2014-02-11 7 Тестирование<br />
3.6.3 2014-02-18 20 Верификация<br />
3.6.4 2014-02-11 10 Разработка<br />
3.6.4 2014-02-21 5 Тестирование<br />
3.6.4 2014-02-26 14 Верификация<br />
</gantt><br />
<br />
<noinclude>[[Category:Справка]]</noinclude></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Help:%D0%9E%D1%80%D0%B3%D0%B0%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%BD%D1%82%D0%B0_%D0%B2_MediaWiki&diff=7822
Help:Организация контента в MediaWiki
2018-07-24T16:49:32Z
<p>VitaliyFilippov: </p>
<hr />
<div>Кратко об организации контента в MediaWiki. Основные понятия:<br />
<br />
* Страницы и файлы:<br />
** Весь текст лежит в '''статьях''' (page). Они же '''страницы'''.<br />
** Статья = название + текст.<br />
** Текст пишется в собственном языке разметки MediaWiki.<br />
** Кроме статей есть '''файлы''' — картинки и т. п. У каждого файла есть парная страница с названием '''<nowiki>Файл:Название_Файла.jpg</nowiki>'''.<br />
** '''Пространство имён''' (namespace) — часть названия статьи до <nowiki>":"</nowiki><ref>На самом деле не любой префикс является неймспейсом, а только один из предопределённых в коде Wiki или расширений. Например, <nowiki>Файл:Тест.jpg</nowiki> — статья в пространстве имён Файл, а <nowiki>НашПроект:Описание</nowiki> — статья в «нулевом» пространстве имён (namespace Main) с названием, включающим двоеточие. Перечень пространств имён можно увидеть, например, в выпадающем списке тут: [[Служебная:Все страницы]]</ref>. Например, «Файл». Пространства имён служат для технических целей (например, чтобы отличать статьи от категорий).<br />
* Для группировки статей служат '''категории''':<br />
** '''Категория''' — это тоже статья, но в пространстве имён «Категория». Всё, название чего начинается с <nowiki>"Категория:"</nowiki> — категория. :-)<br />
** Категория — это НЕ папка, а «тег» (метка). То есть, каждая статья может включаться в любое число категорий.<br />
** Чтобы включить статью в категорию, в текст статьи надо добавить строчку «<nowiki>[[Категория:Название Вашей Категории]]</nowiki>».<br />
** Так как категория — это тоже статья, категория тоже может включаться в другие категории (или даже сама в себя — правда, непонятно, зачем).<br />
** Категория, включённая в другую — называется её '''подкатегорией'''.<br />
* Все пространства имён «плоские», '''иерархии нет'''. То есть, пара (Пространство имён, Название статьи) — это уникальный идентификатор статьи.<br />
** Это означает, что нельзя создать две статьи с одинаковыми названиями, даже в разных категориях.<br />
** А ещё это означает, что название статьи должно быть полностью детализированным.<br />
** {{Warning}} То есть, если в вики вы не одни — то правильное название не «Инструкция по развёртыванию стенда», а «Инструкция по развёртыванию стенда Проекта СуперТелефон», не «Описание версии», а «Описание версии SuperTelefon 2.1.2».<br />
* Частично иерархия эмулируется символом /. '''Подстраница''' — это страница с именем вида A/B/C/D. Однако:<br />
** Суммарная длина названия со всеми A/B/C/D всё равно не должна превышать 255 символов<br />
** В пространстве имён Файл иерархия запрещена<br />
** MediaWiki в целом не рассчитана на работу с иерархиями, поэтому удобных интерфейсов для этого нет<br />
* '''Спецстраницы''' / '''Служебные страницы''':<br />
** Это страницы, которые не содержат текста, а дают доступ к какой-то функции кода системы MediaWiki.<br />
** Они имеют имена вида '''<nowiki>Служебная:XXX</nowiki>'''. То есть, находятся в namespace Служебная (Special). Например: [[Служебная:Версия]].<br />
** Список доступных служебных страниц можно увидеть, нажав на ссылку «Спецстраницы» в левой панели интерфейса.<br />
* '''Шаблоны''':<br />
** Статьи можно включать друг в друга, при этом доступна возможность подстановки параметров. Ещё есть функции парсера, теги расширений, Semantic и прочая ерунда и на этом даже можно кое-как программировать. Но лучше не нужно.<br />
** Статьи, предназначенные только для включения в другие, принято размещать в namespace Шаблон (Template). Например [[Шаблон:Bug]].<br />
<br />
И наконец…<br />
<br />
<blockquote>Wiki — это Wiki! Правьте свободно! Вы ничего не сломаете — всё остаётся в истории.<br />
<br />
Если вы видите опечатку — возьмите и поправьте.<br />
<br />
Если вы видите, что какой-то информации не хватает — возьмите и допишите.<br />
<br />
Если вы видите, что какая-то статья сильно устарела и уже никому не нужна — не ругайтесь, что бардак, а возьмите и удалите.</blockquote><br />
<br />
[[Категория:Справка]]</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Category:%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0&diff=7821
Category:Справка
2018-07-24T16:36:58Z
<p>VitaliyFilippov: </p>
<hr />
<div>{{Box|[[File:Wiki4intranet-logo.svg|100px|left]] Вы читаете справку '''Mediawiki4Intranet''' — сборки [http://mediawiki.org/ MediaWiki], движка [http://wikipedia.org Wikipedia], созданную для корпоративного использования.<br />Сайт нашей сборки: http://wiki.4intra.net/Mediawiki4Intranet.}}<br />
<br />
Для начала: та Wiki, которую вы сейчас читаете, работает на MediaWiki. MediaWiki — это Wiki-движок ([[WikiWiki|что такое «Wiki»]]), используемый [https://ru.wikipedia.org/wiki/ Википедией]. У них есть достаточно подробная документация: https://www.mediawiki.org/wiki/Help:Contents, плюс многое можно «нагуглить». Кроме самой MediaWiki наша сборка включает кучу (100 с лишним) расширений, часть из которых нами же и создана.<br />
<br />
== Начало работы ==<br />
<br />
* [[Help:Регистрация|Регистрация]]<br />
* [[Help:Настройки|Настройки]]<br />
* [[WikiWiki|Что такое "Wiki"]]<br />
* [[Help:Организация контента в MediaWiki|Что такое статьи, файлы, категории, подкатегории, подстраницы]]<br />
* [[Help:Создание новых статей|Создание и редактирование статей]]<br />
** [https://www.mediawiki.org/wiki/Help:Signatures/ru Подписи]<br />
** [[Help:Перенаправления|Перенаправления]]<br />
** [[Help:Возврат к ранней версии|Возврат к ранней версии]]<br />
* [[Help:Поиск|Поиск статей]]<br />
<br />
== Разметка ==<br />
<br />
* Простая разметка<br />
** [[Help:Форматирование|Работа с текстом]]<br />
** [[Help:Викификатор|Викификатор]] (использовать всегда!)<br />
** [[WikiHelpContent:Цвета|Цвет]] ([[WikiHelpContent:Таблица цветов (фон)|таблица цветов]])<br />
** [[Help:Форматирование#Ссылки, URL|Гиперссылки]]<br />
** [[Help:Коды|Подсветка синтаксиса]]<br />
** [[Help:Специальные символы|Специальные символы]]<br />
** [[Help:Советы#Пиктограммы|Пиктограммы]]<br />
** [[Help:Формулы|Формулы]]<br />
** [[Help:Форматирование#nowiki|Подавление разметки]]<br />
** [[Help:Таблицы|Таблицы]]<br />
* Мультимедиа<br />
** [[Help:Изображения|Изображения]]<br />
** [[Blog:TechTools/2011-12-30_Lightbox_в_вики|Фотогалерея]]<br />
** [[Help:Изображения#Видео|Видео]]<br />
** [[Help:Изображения#Остальные типы файлов|Произвольные файлы]]<br />
** [[Graphviz|Графы]]<br />
** [[Gnuplot|Графики функций]]<br />
** [[Help:Изображения#SVG-графика|Векторная графика]], [[Blog:TechTools/SVGEditor_—_инфографика_и_схематизация_не_выходя_из_броузера|редактирование SVG в браузере]]<br />
** [[Диаграммы_Ганта_в_Wiki|Диаграммы Ганта]]<br />
** [[Help:UML|Диаграммы UML]]<br />
** [[Help:Ленточная_диаграмма|Ленточные диаграммы]]<br />
* Структура документа<br />
** [[Help:Форматирование#sections|Разделы]]<br />
** [[Help:Форматирование#lists|Списки]]<br />
** [[Help:Форматирование#dl|Определения]]<br />
** [[Help:Форматирование#paragraphs|Абзацы]]<br />
** [[Help:Форматирование#refs|Сноски]]<br />
* Расширенная разметка<br />
** [[Help:Форматирование#Включение других статей|Включение статей]]<br />
** [[Help:Edittools|Edittools — быстрая вставка конструкций при редактировании]]<br />
** [[Help:Шаблоны|Шаблоны]], [[Быстрое создание статей по шаблону]]<br />
** [[Help:Магические слова|Магические слова и функции парсера]], [[Blog:TechTools/2013-11-13 Автокомплит в вики :-)|Автодополнение]]<br />
** [[Help:Экспорт_в_текстовые_процессоры|Экспорт в текстовые процессоры]]<br />
** [[Blog:TechTools/2014-10-31 Копипаст документов (и даже картинок) из Word'а|Вставка текстов с картинками из Word-документов через LibreOffice]]<br />
<br />
== Продвинутые возможности ==<br />
<br />
* [[4intranet:IntraACL|Права доступа]]<br />
* Социальные темы<br />
** [[Help:Блоги|Блоги]]<br />
** [[Help:Опросы и голосования|Опросы и голосования]]<br />
** [[Blog:TechTools/Встречайте: лайки, рейтинги и pagerank-и! Теперь и в вики.|Лайки и рейтинги]]<br />
* Разное<br />
** [[4intranet:BatchEditor/ru|Массовое редактирование]]<br />
** [[4intranet:S5SlideShow/ru|Вики-презентации]]<br />
** [[4intranet:ListFeed/ru|Генерация RSS]]<br />
А ниже — алфавитный список статей в категории «Справка».<br />
{{replicate-from-custiswiki-to-4intranet}}</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Template:Extension4info&diff=7813
Template:Extension4info
2017-11-15T16:52:06Z
<p>VitaliyFilippov: </p>
<hr />
<div><noinclude>{{note}} Эта страница — шаблон страницы семантической информации расширения, включённого в MediaWiki4Intranet. Используйте так:<br />
<pre><br />
{{Extension4info<br />
|name=ExtensionName<br />
|mediawiki=1.14+ <!-- необязательно --><br />
|description ru=Краткое назначение по-русски<br />
|description en=Short english description<br />
|repo=Ссылка на репозиторий <!-- по умолчанию будет ссылка на наш github, либо на gerrit wikimedia если status=orig --><br />
|url=Домашняя страница, кроме mediawiki.org <!-- наша, если status=our --><br />
|url mw=Домашняя страница на mediawiki.org<br />
|mirror=1 <!-- если status=our и mirror=1, то url mw автоматически = странице на mediawiki.org --><br />
|license=Лицензия <!-- если пропустить, будет GPLv2 или новее --><br />
|authors=Авторы <!-- необязательно --><br />
|created=Дата создания<br />
|version=Последняя версия<br />
|included=Дата включения в MediaWiki4Intranet<br />
|disabled=1 <!-- если расширение не включено в конфигах по умолчанию --><br />
|included version=Включённая в сборку версия, если не "последняя"<br />
|contrib=1 <!-- если в апстримном расширении есть наш вклад --><br />
|status=our|fork|fixed|backport|orig <!-- доработки: создано нами / форкнуто нами / исправлено нами / бэкпорт / без изменений --><br />
|useful=definitely|likely|maybe <!-- полезность: очень полезно / вероятно полезно / возможно полезно --><br />
<!-- Если было ранее включено в сборку, но ныне удалено: --><br />
|deleted date=Дата удаления из сборки<br />
|deleted ru=Краткая причина удаления по-русски<br />
|deleted en=Short deletion reason in english<br />
}}<br />
</pre></noinclude><includeonly>{{#set:<br />
|name={{{name}}}<br />
|mediawiki={{{mediawiki|}}}<br />
|description ru={{{description ru|}}}<br />
|description en={{{description en|}}}<br />
|description page ru={{{name}}}/ru<br />
|description page en={{{name}}}/en<br />
|repo={{{repo|{{#ifeq:{{{status}}}|orig|https://gerrit.wikimedia.org/r/gitweb?p=mediawiki/extensions/{{{name}}}.git|https://github.com/mediawiki4intranet/{{{name}}}}}}}}<br />
|license={{{license|GPLv2.0+}}}<br />
|authors={{{authors|}}}<br />
|version={{{version|}}}<br />
|included={{{included|}}}<br />
|disabled={{{disabled|0}}}<br />
|status={{{status|}}}<br />
|useful={{{useful|unspecified}}}<br />
}}{{#if:{{{url mw|{{#ifeq:{{{status}}}|our|{{#if:{{{mirror|}}}|http://www.mediawiki.org/wiki/Extension:{{{name}}}|}}|http://www.mediawiki.org/wiki/Extension:{{{name}}}}}}}}|{{#set:<br />
|url mw={{{url mw|{{#ifeq:{{{status}}}|our|{{#if:{{{mirror|}}}|http://www.mediawiki.org/wiki/Extension:{{{name}}}|}}|http://www.mediawiki.org/wiki/Extension:{{{name}}}}}}}}<br />
}}}}{{#if:{{#ifeq:{{{status}}}|our|1|{{{url|}}}}}|{{#set:<br />
|url={{{url|{{#ifeq:{{{status}}}|our|http://wiki.4intra.net/{{{name}}}|}}}}}<br />
}}}}{{#if:{{{created|}}}|{{#set:<br />
|created={{{created|}}}<br />
}}}}{{#if:{{{included version|}}}|{{#set:<br />
|included version={{{included version|}}}<br />
}}}}{{#if:{{{deleted date|}}}|{{#set:<br />
|deleted date={{{deleted date|}}}<br />
|deleted ru={{{deleted ru|}}}<br />
|deleted en={{{deleted en|}}}<br />
}}|{{#set:still included=yes}}}}{{#if:{{{mwonly|}}}|{{#set:mwonly=1}}<br />
}}{{#if:{{{mirror|}}}|{{#set:mirror=1}}<br />
}}{{#if:{{{contrib|}}}|{{#set:contrib=1}}<br />
}}</includeonly></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Mediawiki4Intranet/1.26&diff=7812
Mediawiki4Intranet/1.26
2017-10-27T17:05:30Z
<p>VitaliyFilippov: </p>
<hr />
<div>* Ядро обновлено до версии 1.26.4<br />
* Удалены патчи: detailed-badtitle (принят в апстрим), lcstore-accel-shared (некорректная реализация, сначала принят в апстрим, потом удалён), skins-in-subdirs (скины в 1.26 подключаются явно), а также исправления, более не нужные для нового ядра: fix-l10n, relative-inclusions-in-main, allow-moving-categories, fix-broken-upload-form, fix-ie-searchsuggest, do-not-cut-debug-sql, fix-cologneblue-print, remove-slow-messagecache-locking, parser-debug-doblocklevels<br />
* Добавлены патчи: search-rm-slashn (исправление опечатки), ymd-hms-date-format (был частью fix-l10n), unlock-session (отключение блокировки сессий), allow-scripted-svg-if-raw-html (разрешение скриптованных SVG, если разрешён голый HTML), fix-specialupload-charinsert (исправление работы CharInsert на странице загрузки файла), limit-thumb-names (ограничение длины имён thumbnail’ов, чтобы работал PdfHandler)<br />
* Изменены патчи: fix-vector-skin (перемещено в скин Vector), debug-categorized-specialrecentchanges (оставлена только новая фича), fix-head-and-editsection (заменён на fix-noeditsection), html-emails (заменён на функционал EnotifDiff)<br />
* Импорт/экспорт: исправлена работа консольных скриптов импорта/экспорта (maintenance/importDump.php и maintenance/dumpBackup.php), исправлена поддержка оригинального формата экспорта изображений MediaWiki (XML с содержимым файлов в Base64)<br />
* Cite, CharInsert, ConfirmEdit, Interwiki, PagedTiffHandler, ParserFunctions: переведены на оригинальную версию без наших изменений (в частности, в оригинальном Cite появились аналогичные нашим доработки)<br />
* Добавлен VisualEditor и необходимый ему сервис Parsoid (опционально, по умолчанию не включен)<br />
* SlimboxThumbs: исправлены баги в библиотеке slimbox (несовместимость с новым jquery, некорректное экранирование адресов)<br />
* PdfHandler: осуществлён переход с GhostScript на Poppler (pdftocairo) — производительность растеризации PDF улучшена на порядок, качество отрисовки шрифтов также сильно улучшено<br />
* Ядро, MarkupBabel: осуществлён переход с Inkscape на rsvg-convert для растеризации SVG — производительность и количество зависимостей опять-таки уменьшено<br />
* SemanticMediaWiki: обновлено до 2.3, наши доработки перенесены и обновлены:<br />
** перенесены: оператор отрицания, оптимизатор запросов, поддержка прав доступа<br />
** добавлена поддержка цепочек свойств в выводе (?Prop1.Prop2) и в сортировке (sort = Prop1.Prop2)<br />
** удалены патчи: исправление некорректного выполнения коньюнкции дизьюнкций, отключение форсированных типов для свойств с названиями, равными названиям типов (баги исправлены в оригинальной версии), сброс кэша всех запросов при изменении любого свойства в вики (в оригинальной версии появилась фича QueryDependentLinksStore, отслеживающая конкретные зависимости запросов)<br />
** исправлены баги: некорректная обработка нескольких отрицаний в одной конъюнкции; ошибки SQL, возникающие при повторе частей запросов в определённых условиях (баги прошлой версии наших патчей); поддержка PostgreSQL была сломана; локализованные boolean’ы не распознавались с большой буквы (баги оригинала)<br />
* Добавлено расширение MsUpload: даёт возможность загрузки файлов прямо со страницы редактирования — выбором, drag&drop и даже вставкой из буфера обмена (наш патч)<br />
* Добавлены расширения Semantic Forms, Semantic Forms Inputs, Semantic Forms Select, Semantic Result Formats, Arrays, Loops<br />
* Добавлена корректная поддержка WikiEditor в Semantic Forms и Semantic Forms в CategoryTemplate<br />
* Добавлено расширение CategoryWatch (e-mail уведомления о добавлении страниц в категории)<br />
* Добавлено расширение AjaxLoader (асинхронно подгружаемые панельки)<br />
* Добавлено расширение RequestMagic (получение параметра запроса, в том числе допускающее использованием с кэшем парсера)<br />
* Удалены скины: chick, simple (были совсем примитивные, неиспользуемые)<br />
* Удалены расширения: ErrorMail (логгирование ошибок теперь есть в ядре), EnotifDiff (перемещено в ядро в виде патчей), SphinxSearch, SpecialForm и Workflow (устаревшие и неиспользуемые), SWFUpload и SupaMW (массовая загрузка файлов и загрузка файлов из буфера обмена, заменены на MsUpload), SimpleForms (устаревшее и неиспользуемое, кроме функции, перенесённой в RequestMagic)<br />
* Обеспечена поддержка PostgreSQL во всех включённых расширениях<br />
* Все расширения обновлены до актуальных версий<br />
<br />
TODO:<br />
* Заменить UserMessage, скорее всего, на патч ядра (так как расширение — всё равно огромный костыль)<br />
* WhoIsWatching: Добавить возможность открытия списка наблюдающих пользователей через ввод имени страницы на спецстранице, а не только по ссылке из подвала<br />
* CustisScripts: Сделать уже загрузку wikEd пользовательской настройкой<br />
* AllowGetParamsInWikilinks: почистить код и/или заменить на что-то другое<br />
* Возможно, заменить DeleteBatch на Nuke<br />
* Добавить CKEditor и обеспечить его поддержку в Semantic Forms (не факт, код расширения CKEditor сильно устаревший)<br />
* Добавить MobileFrontend и обеспечить его поддержку во всех расширениях<br />
* В DocExport добавить аналогичный S5SlideShow хак для рендера изображений в полном размере<br />
* Можно добавить расширение «safe html», выводящее HTML-код с вырезанными javascript-ами и разрешающее вставку js только из пространства имён MediaWiki<br />
* Исправить отключение кэша парсера в PageSnapshots<br />
* Исправить показ CAPTCHA на странице входа</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Mediawiki4Intranet/en&diff=7800
Mediawiki4Intranet/en
2017-05-29T09:43:18Z
<p>VitaliyFilippov: </p>
<hr />
<div>[[ru:Mediawiki4Intranet]]<br />
[http://mediawiki.org/ MediaWiki] is a popular [[wikipedia:Wiki|«Wiki»-system]], written in PHP and originally created as the [http://wikipedia.org/ Wikipedia]'s engine. MediaWiki is very extensible — there is more than 1700 useful extensions, and it’s very easy to write a new one.<br />
<br />
<big>'''Mediawiki4Intranet'''</big> is a MediaWiki distribution containing many extensions and patches useful for intranet (and not only for intranet). It is important to mention that all these extensions are improved and tested to work together — integrations bugs are fixed and some features are added.<br />
<br />
This page (english documentation) just contains the basic information. For more information see [[Mediawiki4Intranet/|russian documentation]].<br />
<br />
Installation information: see [[#Installation]].<br />
<br />
= Overview =<br />
<br />
Mediawiki4Intranet is a MediaWiki distribution suited for corporate («intranet») usage. It was created just as a bundle that we use in our company; it includes 89 extensions, patched core and some maintenance tools and configs.<br />
<br />
Notable features available in the basic configuration are:<br />
* Media features: [[PDFHandler|PDF]], [[PagedTiffHandler|TIFF]], [[Dia]], [[FLVHandler|FLV/MP4]], [[Mp3Handler|MP3]], [[MMHandler|FreeMind/FreePlane mindmaps]], [[MarkupBabel|LaTeX, Graphviz, Gnuplot, UMLGraph, UMLet]], [[PlantUML]]; SVG rendering of Dia, LaTeX, Graphviz, Gnuplot; JavaScript editor for uploaded SVG files ([[SVGEdit]]);<br />
* Wiki-anything: [[Wikilog|Wiki-blogs, Wiki-forums]], [[Polls|Wiki-polls]], [[MediawikiQuizzer|Wiki-quizzes]], [[S5SlideShow|Wiki-presentations]] and even [[WikiBookmarks|Wiki-bookmarks]] :)<br />
* Built-in permission system ([[IntraACL]]);<br />
* Versioning features: [[Duplicator]], [[PageSnapshots]], [[MW Import&Export|massively improved import/export engine]];<br />
* Screenshort upload ([[SupaMW]]); batch file upload ([[SWFUpload]]); [[SphinxSearchEngine|Sphinx search]]; [[TikaMW]] for indexing binary (msword, etc) file contents;<br />
* Editing experience: [[WikiEditor]], [[CustisScripts|wikEd, wikifikator (mainly for russian)]], [[LinkAutocomplete|autocomplete for page links and templates]], [[WikiEditorInplace|in-place editing of page sections]], [[SimpleTable]];<br />
* Optimized [[SemanticMediaWiki]];<br />
* Many other features and parser extensions.<br />
<br />
Mediawiki4Intranet is a «rolling-release»; [[repo.php]] script is used for the updatable deployment (faster than git submodules or composer, allows simple creation of «derived» distributions).<br />
<br />
= Bundle contents =<br />
<br />
* Original MediaWiki code.<br />
* Extensions.<br />
* Patches.<br />
* Base configuration files for easily creating your <tt>LocalSettings.php</tt>.<br />
<br />
Most of these is distributed under the GPLv2 license, like the MediaWiki itself. /* I hope the tivoisation isn’t a threat for us :) */ Some extensions are under GPLv3.<br />
<br />
== MediaWiki ==<br />
<br />
The primary source code repositories are under [https://github.com/mediawiki4intranet/ Mediawiki4Intranet] github organisation. 'configs' repository contains bundle index and configuration files, 'core' is the patched MediaWiki, other repositories are for extensions and skins.<br />
<br />
Some of the extensions are taken directly from Wikimedia Git repositories, like for XXX extension: <tt><nowiki>https://</nowiki>gerrit.wikimedia.org/r/gitweb?p=mediawiki/extensions/{{red|XXX}}.git</tt>.<br />
<br />
Mediawiki4Intranet version may be less than the last stable release, because the differences between MediaWiki versions are not that big in terms of new features, but newer releases are less stable and patches always need updating.<br />
<br />
MediaWiki used in 4Intranet:<br />
* 2014-06-03 → current: '''1.21.10'''.<br />
* 2014-01-31 → 2014-06-03: '''1.21.5'''.<br />
* 2014-01-14 → 2014-01-31: '''1.21.3'''.<br />
* 2012-11-20 → 2014-01-14: '''1.18.5'''.<br />
* 2012-02-22 → 2012-11-20: '''1.18.1'''.<br />
* 2011-02-08 → 2012-02-22: '''1.16.2'''.<br />
* 2010-10-09 &rarr; 2011-02-08: '''1.14.1'''.<br />
* &rarr; 2010-10-09: '''1.13.1''' (doesn't exist in google code / github).<br />
<br />
== Patches ==<br />
<br />
Minor changes to the base code of MW and basic extensions are split into and maintained as patches.<br />
<br />
[[Mediawiki4Intranet/Патчи|Russian description of all patches]].<br />
<br />
== Extensions ==<br />
<br />
Mediawiki4Intranet contains many useful extensions, and many of them were created specially for it.<br />
<br />
[[:Category:Mediawiki4Intranet extensions|View full list of Mediawiki4Intranet extensions]]<br />
<br />
= Installation =<br />
<br />
The simplest way to try '''MediaWiki4Intranet''' for Windows users is to download [http://wiki.4intra.net/public/mediawiki4intranet-win.7z Windows bundle] (approx. 200 MB). It's rarely updated (now it's {{/WindowsBundleVersion}}), but it's fully standalone and includes ALL needed third-party software, even LaTeX. [[Windows-сборка Mediawiki4Intranet]].<br />
<br />
To install '''MediaWiki4Intranet''' on your site, you need:<br />
<br />
== Get the code ==<br />
<br />
You can use one of the following ways:<br />
# Get the [http://wiki.4intra.net/public/mediawiki4intranet.7z code bundle] (approx. 13 MB)<br />
# Use [[repo.php]] script for automatic download via Git (which of course requires a Git client): <br />
#: {{cmd|git clone https://github.com/mediawiki4intranet/configs mediawiki/configs}}<br />
#: {{cmd|cd mediawiki/configs}}<br />
#: {{cmd|php repo.php install mediawiki4intranet}}<br />
# Download from the Subversion mirror (usually lags behind main repos): {{cmd|svn co http://wiki.4intra.net/svn/mediawiki4intranet/}}<br />
<br />
== Create 'images' and empty DB ==<br />
<br />
* Create <tt>images</tt> folder in the installation directory, grant web server user read and write access there.<br />
* Create an empty MySQL database and a user with full access to it.<br />
<br />
== Initialise the database ==<br />
<br />
First create an empty MediaWiki database:<br />
* Either import <tt>maintenance/tables.sql</tt>:<br />
** ''At first'' create minimal configuration (LocalSettings.php)<br />
** Run {{cmd|php maintenance/patchSql.php maintenance/tables.sql}} from the installation directory.<br />
* Or run the MediaWiki installer from <tt>config</tt> folder — the plus is it also does additional environment checks:<br />
** Go to <tt>http://server/wiki/config/</tt>, answer questions, fix issues, select database type MySQL, InnoDB, 4.1/5.0 utf8 binary. Installer will initialise the DB and create a basic config LocalSettings.php.<br />
** ''Remove'' the generated configuration — it has plenty of options which are already in MediaWiki4Intranet configs.<br />
** ''At last'', create minimal MediaWiki4Intranet configuration (LocalSettings.php)<br />
<br />
And then run {{cmd|php maintenance/update.php}} from the installation directory to add extension tables.<br />
<br />
== Create minimal configuration ==<br />
<br />
Minimal configuration (LocalSettings.php):<br />
<code-php><br />
<?php<br />
require_once 'configs/ServerSettings.php'; # use this under UNIX, use BaseSettings.php under Windows<br />
$wgDBname = 'wiki'; # database name<br />
$wgDBuser = ''; # login and password for database user<br />
$wgDBpassword = '';<br />
$wgDBadminuser = $wgDBuser;<br />
$wgDBadminpassword = $wgDBpassword;<br />
$wgScriptPath = '/wiki';<br />
</code-php><br />
<br />
== System requirements ==<br />
<br />
Minimal requirements:<br />
* PHP 5.3 or later.<br />
* <span style="color: red">Notice: now there are Notice errors in the MW4Intranet, we'll fix them all, but now, use <tt>error_reporting = E_ALL & ~E_NOTICE</tt> in <tt>php.ini</tt>.</span><br />
* Web server. The simplest is to use [http://httpd.apache.org/ Apache], but [http://iis.net/ IIS], [http://nginx.ru/ nginx] + [http://php-fpm.org/ php_fpm] and others are also supported in theory.<br />
* MySQL DBMS, preferably version 5 or later.<br />
* UNIX system is preferred.<br />
<br />
PHP extensions:<br />
* php5-mysql! :-)<br />
* php5-gd for images.<br />
* php5-curl for uploading files via URL.<br />
<br />
PHP configuration (php.ini):<br />
* <tt>error_reporting = E_ALL & ~E_NOTICE</tt><br />
* If your PHP is &lt; 5.3: <tt>short_open_tag = Off</tt><br />
* <tt>magic_quotes_gpc = Off</tt> (should be Off on every web server which respects itself)<br />
* For [http://supa.sourceforge.net SUPA] screenshot upload: either ''disabled'' [http://www.hardened-php.net/suhosin/ Suhosin], or {{Cmd|1=suhosin.post.max_value_length = 8000000}} and {{Cmd|1=suhosin.request.max_value_length = 8000000}}. 8000000 is an example, you can set a bigger value.<br />
<br />
Optional extensions:<br />
* php5-xcache for overall performance.<br />
* [[Mediawiki4Intranet#php5-fss|php5-fss]] for string operations.<br />
* Mail и Net_SMTP PEAR packages for e-mail.<br />
<br />
Third-party software is also required — there are many of them, but Linux users usually may 'apt-get' them, and Windows users may use our standalone bundle (see above).<br />
* PDF: [http://pages.cs.wisc.edu/~ghost/ GhostScript], [http://poppler.freedesktop.org/ Poppler] — бывший [http://www.foolabs.com/xpdf/ Xpdf] ([http://gnuwin32.sourceforge.net/packages/xpdf.htm windows)]<br />
* DJVU: [http://djvu.sourceforge.net/ djvulibre], [http://netpbm.sourceforge.net/ netpbm] ([http://gnuwin32.sourceforge.net/packages/netpbm.htm windows]).<br />
* LaTeX (формулы &lt;m>…&lt;/m>): a TeX distribution, usually [http://www.tug.org/texlive/debian.html TeXLive] in Debian, usually [http://miktex.org/ MiKTeX] on Windows; also [http://dvisvgm.sourceforge.net/ dvisvgm] is needed.<br />
* FLV/MP4-video: [http://www.ffmpeg.org/ ffmpeg] ([http://ffmpeg.arrozcru.org/wiki/index.php?title=Main_Page для windows]).<br />
* [http://www.graphviz.org/ Graphviz], preferably 2.27 or later.<br />
* [http://www.gnuplot.info/ GNUPlot].<br />
* [http://www.umlgraph.org/ UMLGraph].<br />
* [http://www.umlet.com/ UMLet].<br />
* [http://java.sun.com Java] for UMLGraph, UMLet, PlantUML.<br />
* Sphinx search: [http://sphinxsearch.com/ Sphinx].</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Mediawiki4Intranet&diff=7799
Mediawiki4Intranet
2017-05-29T09:26:39Z
<p>VitaliyFilippov: </p>
<hr />
<div>[[en:Mediawiki4Intranet/en]]<br />
[http://mediawiki.org/ MediaWiki] — популярная [[WikiWiki|«вики»-система]], написанная на PHP и изначально создававшаяся в качестве «движка» [http://wikipedia.org/ Википедии]. Отличается отличной расширяемостью — существует более 1700 расширений к ней.<br />
<br />
<big>'''Mediawiki4Intranet'''</big> — сборка MediaWiki, содержащая в себе довольно большой набор расширений, полезных для внутрикорпоративной среды и, что очень важно, исправленных и «подруженных» между собой — большая часть ошибок, возникающих при интеграции, исправлена.<br />
<br />
Об установке см. [[#Установка]].<br />
<br />
= Содержимое =<br />
<br />
Сборка состоит из:<br />
* Доработанного ядра MediaWiki (оригинал + набор патчей).<br />
* Расширений MediaWiki:<br />
** Оригинальных, то есть, нетронутых.<br />
** Доработанных незначительно, в виде «оригинал + набор патчей» для каждого.<br />
** Форкнутых, то есть, доработанных значительно, в простом виде гитхаб-репозитория.<br />
** Новых, созданных нами.<br />
* Скрипта установки «[[repo.php]]».<br />
* Нескольких готовых конфигураций типа <tt>LocalSettings.php</tt> для быстрой установки.<br />
* Нескольких дополнительных утилит обслуживания.<br />
<br />
Лицензия на сборку — GNU GPLv3 или новее. Почему? Потому, что:<br />
* MediaWiki и большинство расширений распространяются под GPLv2+.<br />
* Часть расширений — под Permissive лицензиями.<br />
* Часть расширений — под GPLv3+.<br />
Соответственно, на сборку целиком распространяется наиболее жёсткая из этих свободных лицензий, а именно, GPLv3.<br />
<br />
== MediaWiki ==<br />
<br />
Код доработанного ядра и расширений MediaWiki, а также расширений, созданных нами, живёт на Github у организации «mediawiki4intranet»: https://github.com/mediawiki4intranet/. Там есть репозиторий с ядром MediaWiki, репозиторий с конфигурациями и скриптами деплоя и обслуживания, а также по репозиторию на каждое расширение и тему оформления MediaWiki.<br />
<br />
Код оригинальной MediaWiki, кстати, раньше жил в Subversion, а теперь живёт в [[rupedia:Git]]-репозиториях Wikimedia, по адресам вида:<br />
* Ядро: https://gerrit.wikimedia.org/r/gitweb?p=mediawiki/core.git<br />
* Расширение {{red|XXX}}: <nowiki>https://</nowiki>gerrit.wikimedia.org/r/gitweb?p=mediawiki/extensions/{{red|XXX}}.git<br />
<br />
Версия Mediawiki4Intranet несколько отстаёт от наиболее свежей стабильной, ибо внешние различия между версиями MediaWiki не так уж и велики, но при этом в новых могут вылезать баги (вроде [https://bugzilla.wikimedia.org/show_bug.cgi?id=37209 Bug 37209]), и на обновление всех доработок сборки приходится тратить некоторое время.<br />
<br />
Историй версий MediaWiki в основе Mediawiki4Intranet:<br />
* 2016-09-14 &rarr; текущая: '''1.26.4'''<br />
* 2016-07-04 &rarr; 2016-09-14: '''1.26.3'''<br />
* 2015-12-21 &rarr; 2016-07-04: '''1.26.2'''<br />
* 2015-10-15 &rarr; 2015-12-21: '''1.26 beta'''.<br />
* 2014-06-03 &rarr; 2015-10-15: '''1.21.10'''.<br />
* 2014-01-31 &rarr; 2014-06-03: '''1.21.5'''.<br />
* 2014-01-14 &rarr; 2014-01-31: '''1.21.3'''.<br />
* 2012-11-20 &rarr; 2014-01-14: '''1.18.5'''.<br />
* 2012-02-22 &rarr; 2012-11-20: '''1.18.1'''.<br />
* 2011-02-08 &rarr; 2012-02-22: '''1.16.2'''.<br />
* 2010-10-09 &rarr; 2011-02-08: '''1.14.1'''.<br />
* &rarr; 2010-10-09: '''1.13.1''' (в репозиториях отсутствует).<br />
<br />
== Патчи ==<br />
<br />
В виде патчей оформляются либо мелкие доработки расширений, либо любые доработки ядра MediaWiki. Сами патчи хранятся в Git-репозитории в виде обычных коммитов, организованных в серию, по принципу 1 коммит = 1 патч.<br />
<br />
{{warning}} При внесении изменений в уже существующий патч вместо добавления новых коммитов происходит {{red|переписывание истории}}! Это приводит к некоторым неудобствам при обновлении веток (нужно руками делать git reset), но зато, по крайней мере, каждый патч достаточно легко выделить и отправить авторам.<br />
<br />
Описание всех патчей, входящих в сборку MediaWiki4Intranet, читайте на странице: [[Mediawiki4Intranet/Патчи]].<br />
<br />
== Расширения ==<br />
<br />
Отличная расширяемость без использования патчей — важнейшая фишка MediaWiki. Расширения используют заранее заданные в коде точки интеграции («Hooks») и добавляют в MediaWiki новый функционал без необходимости вносить изменения в ядро.<br />
<br />
Описание всех расширений, входящих в сборку MediaWiki4Intranet, читайте на странице: [[Mediawiki4Intranet/Расширения]].<br />
<br />
== Список изменений ==<br />
<br />
Изменения в версии Mediawiki4Intranet 1.26 (по сравнению с 1.21): [[Mediawiki4Intranet/1.26]]<br />
<br />
= Установка =<br />
<br />
== Установка через Docker ==<br />
<br />
Простейший способ установить Mediawiki4Intranet — использовать [https://www.docker.com/ Docker]. Наш репозиторий с образом Docker:<br />
<br />
https://github.com/mediawiki4intranet/docker<br />
<br />
Чтобы установить Mediawiki4Intranet через Docker, установите себе в систему Docker, склонируйте данный репозиторий, зайдите в склонированную директорию и запустите команду:<br />
<br />
<pre><br />
docker build -t mediawiki4intranet .<br />
</pre><br />
<br />
Это соберёт образ системы Mediawiki4Intranet. Чтобы запустить на основе этого образа контейнер, запустите:<br />
<br />
<pre><br />
docker run --name mw4i -p 8077:80 -v /home/wiki4intranet/data -t -d mediawiki4intranet<br />
</pre><br />
<br />
После чего откройте в браузере адрес http://localhost:8077 и заходите в wiki с логином-паролем WikiSysop/MediaWiki4Intranet.<br />
<br />
{{Box|{{Warning}} В Docker образе не сконфигурирована отправка почты, так как она требует либо настроенного MTA, либо SMTP подключения, а это зависит от окружения, в котором вы запускаете контейнер. Чтобы это исправить, либо пропишите в LocalSettings.php конфигурацию [https://www.mediawiki.org/wiki/Manual:$wgSMTP $wgSMTP] (для использования внешнего SMTP-сервера), либо установите внутрь контейнера sendmail/postfix и настройте его (это, к сожалению, пока надо делать вручную).}}<br />
<br />
=== Сборка с VisualEditor ===<br />
<br />
В репозитории есть два Dockerfile'а: базовый без VisualEditor и отдельный с оным. Соответственно, чтобы использовать сборку с VisualEditor, вместо одной команды build нужно запустить две:<br />
<br />
<pre><br />
docker build -t mediawiki4intranet .<br />
docker build -t mediawiki4intranet/ve -f ve.Dockerfile .<br />
</pre><br />
<br />
После чего запускать полученный образ аналогично:<br />
<br />
<pre><br />
docker run --name mw4i -p 8077:80 -v /home/wiki4intranet/data -t -d mediawiki4intranet/ve<br />
</pre><br />
<br />
== Ручная установка ==<br />
<br />
=== Скачать код ===<br />
<br />
Варианты:<br />
<br />
# Можно скачать [http://wiki.4intra.net/public/mediawiki4intranet.7z архив с исходниками] (примерно 25 МБ)<br />
# Можно использовать [[repo.php]] для автоматизированного скачивания с помощью системы контроля версий [[rupedia:Git|Git]] (что, разумеется, требует установленного git-клиента):<br />
#: {{cmd|git clone https://github.com/mediawiki4intranet/configs mediawiki/configs}}<br />
#: {{cmd|cd mediawiki/configs}}<br />
#: {{cmd|php repo.php install mediawiki4intranet}}<br />
<br />
=== Установить зависимости ===<br />
<br />
==== В Debian ====<br />
<br />
В Debian почти всё (кроме UMLGraph и [[#TikaMW|Tika]]) ставится 1 командой:<br />
<br />
<pre><br />
apt-get install zip unzip poppler-utils \<br />
netpbm librsvg2-bin djvulibre-bin texlive-base texlive-extra-utils ffmpeg \<br />
dia graphviz gnuplot plotutils umlet default-jre diffutils imagemagick sphinxsearch \<br />
nginx php7.0-fpm php7.0-cli php7.0-json php7.0-opcache php7.0-mbstring php7.0-curl php7.0-gd \<br />
php7.0-intl php7.0-mysql php7.0-xml php7.0-zip php-imagick php-apcu php-apcu-bc php-mail php-net-smtp<br />
</pre><br />
<br />
UMLGraph, если хочется, нужно скачать [http://www.umlgraph.org/ с сайта] и подложить в системные пути.<br />
<br />
Apache Tika — скачать отсюда: http://wiki.4intra.net/public/tika-app-1.2-fix-TIKA709-TIKA964.jar и добавить в /etc/rc.local:<br />
<br />
<pre><br />
start-stop-daemon -S -b --pidfile /var/run/tika.pid -m -x /usr/bin/java -- -jar /root/tika-app.jar -p 127.0.0.1:8072 -t -eutf-8<br />
</pre><br />
<br />
==== В других ОС ====<br />
<br />
Минимальные требования:<br />
* PHP >= 5.3. Можно (лучше) PHP 7.<br />
* Веб-сервер и сервер приложений PHP. Например, [http://nginx.ru/ nginx] + [http://php-fpm.org/ php_fpm] или [http://httpd.apache.org/ Apache]. Другие варианты (IIS?) тоже, вероятно, поддерживаются.<br />
* СУБД MySQL или MariaDB >= 5.1, либо PostgreSQL >= 9.0.<br />
* Желателен Debian/Ubuntu Linux. Сборка, разумеется, будет работать под любым Linux’ом или ****BSD (и даже под виндой с некоторыми оговорками), но установить весь необходимый софт проще всего в Debian.<br />
<br />
Также нужны следующие расширения PHP:<br />
* '''php-mysql''' или '''php-pgsql'''<br />
* Обязательно наличие '''DOM'''. Расширение базовое и обычно встроено в PHP, но в дурацких RPM-дистрибутивах выделено в отдельный пакет типа '''php-dom'''.<br />
* '''php-gd''' для обработки картинок.<br />
* '''php-curl''' для загрузки файлов по URL.<br />
* Любой кэшер, например '''php-opcache''', '''php-apc''' или '''php-xcache'''<br />
* Для PHP < 5.6 — [[php5-fss]]. Для 5.6 или 7 — не нужно.<br />
* Для отправки почты — PEAR-пакеты Mail и Net_SMTP, см. подробнее [[#Отправка E-mail]].<br />
<br />
Требования конфигурации PHP (директивы php.ini):<br />
* <tt>post_max_size</tt>, <tt>upload_max_filesize</tt> — в зависимости от того, какого размера файлы планируете загружать<br />
* В боевой конфигурации: <tt>error_reporting = E_ALL & ~E_NOTICE</tt><br />
* Если PHP < 5.4: <tt>magic_quotes_gpc = Off, register_globals = Off</tt><br />
<br />
Дополнительно нужны сторонние программы — их список внушительный, но почти всё обычно ставится менеджером пакетов:<br />
* Импорт-экспорт в ZIP-архивах: утилиты [http://gnuwin32.sourceforge.net/packages/zip.htm zip] и [http://gnuwin32.sourceforge.net/packages/unzip.htm unzip] (windows). Под UNIX обычно либо уже есть, либо ставится из пакетов.<br />
* PDF: [http://pages.cs.wisc.edu/~ghost/ GhostScript], [http://poppler.freedesktop.org/ Poppler] — бывший [http://www.foolabs.com/xpdf/ Xpdf] ([http://gnuwin32.sourceforge.net/packages/xpdf.htm windows)]<br />
* DJVU: [http://djvu.sourceforge.net/ djvulibre], [http://netpbm.sourceforge.net/ netpbm] ([http://gnuwin32.sourceforge.net/packages/netpbm.htm windows]).<br />
* LaTeX (формулы &lt;m>…&lt;/m>): любой дистрибутив TeX’а, например, в Debian обычно [http://www.tug.org/texlive/debian.html TeXLive], под Windows — [http://miktex.org/ MiKTeX]; утилита [http://dvisvgm.sourceforge.net/ dvisvgm].<br />
* [http://dia-installer.de/ Dia]<br />
* FLV/MP4-видео: [http://www.ffmpeg.org/ ffmpeg] ([http://ffmpeg.arrozcru.org/wiki/index.php?title=Main_Page для windows]).<br />
* [http://www.imagemagick.org/ ImageMagick]<br />
* [http://www.graphviz.org/ Graphviz] желателен версии не меньше 2.27, так как в предыдущих есть различные мелкие баги.<br />
* [http://www.gnuplot.info/ GNUPlot].<br />
* [http://www.umlgraph.org/ UMLGraph].<br />
* [http://www.umlet.com/ UMLet].<br />
* UMLGraph, UMLet, PlantUML требуют наличия [http://java.sun.com Java].<br />
* Sphinx-поиск по вики: [http://sphinxsearch.com/ Sphinx], [[#TikaMW|Tika]]<br />
<br />
=== Создать папку images и пустую БД ===<br />
<br />
В директории для установки нужно создать папку <tt>images</tt>, читаемую и записываемую веб-сервером.<br />
<br />
Также нужно создать для вики MySQL базу данных и пользователя с полным доступом к ней.<br />
<br />
=== Инициализировать БД ===<br />
<br />
Сначала нужно создать структуру БД для «голой» MediaWiki:<br />
<br />
# Либо просто накатить дамп <tt>maintenance/tables.sql</tt>:<br />
#* ''Сначала'' создать минимальный конфиг MediaWiki4Intranet (LocalSettings.php, см. ниже)<br />
#* Выполнить команду {{cmd|php maintenance/patchSql.php maintenance/tables.sql}} из директории установки вики.<br />
# Либо запустить вики-установщик из папки <tt>mw-config</tt> — плюс в том, что он ещё проводит дополнительные проверки версии PHP, расширений и т. п.:<br />
#* Зайти на <tt>http://server/wiki/mw-config/</tt>, ответить на вопросы, исправить недоразумения (если таковые возникнут), выбрать базу MySQL, InnoDB, 4.1/5.0 utf8 binary. Установщик создаст пустую БД и конфиг.<br />
#* ''Удалить'' конфиг, сгенерированный установщиком — в нём куча опций, которые все уже прописаны в правильные значения в конфигах MediaWiki4Intranet.<br />
#* ''Потом'' создать минимальный конфиг MediaWiki4Intranet (см. ниже)<br />
<br />
Потом нужно дополнить созданную БД таблицами расширений. Для этого нужно:<br />
* Запустить {{cmd|php maintenance/update.php}} из директории установки вики.<br />
<br />
=== Создать минимальный конфиг ===<br />
<br />
Содержимое минимального конфига (LocalSettings.php):<br />
<br />
<code-php><br />
<?php<br />
require_once 'configs/ServerSettings.php'; # это под UNIX, либо BaseSettings.php для винды<br />
$wgDBname = 'wiki'; # имя БД<br />
$wgDBuser = ''; # логин и пароль с полным доступом к этой БД<br />
$wgDBpassword = '';<br />
$wgDBadminuser = $wgDBuser;<br />
$wgDBadminpassword = $wgDBpassword;<br />
$wgScriptPath = '/wiki';<br />
</code-php><br />
<br />
== Старый Windows-образ ==<br />
<br />
Для того, чтобы быстро попробовать '''MediaWiki4Intranet''' на локальной Windows-машине, также есть '''старая''' Windows-сборка. Фичи там есть не все, обновляться она скорее всего больше не будет (на данный момент версия {{/WindowsBundleVersion}}), настроена кривовато (ибо Windows) и не очень безопасно (ибо XAMPP). Раньше это был простейший способ попробовать Mediawiki4Intranet. Подробнее: [[Windows-сборка Mediawiki4Intranet]].<br />
<br />
{{Box|<br />
{{Warning}} Под Windows не работает следующий функционал MediaWiki4Intranet:<br />
* Отправка почты в формате HTML<br />
* По умолчанию отключён Sphinx-поиск<br />
* По умолчанию отключена поддержка PDF и Djvu<br />
* По умолчанию отключено слияние при конфликтах редактирования — чтобы включить, нужно установить Windows-версию утилиты diff3, и прописать в LocalSettings.php:<br />
<code-php>$wgDiff3 = 'путь к diff3';</code-php><br />
}}<br />
<br />
= Дополнительная настройка =<br />
<br />
== Отправка E-mail ==<br />
<br />
Для отправки электронной почты нужна рабочая локальная команда sendmail.<br />
<br />
По умолчанию она включается только под UNIX’ами, потому что под виндой sendmail’а обычно нет. Однако когда включается, нужно поменять две следующие переменные в <tt>LocalSettings.php</tt>, иначе почта из вики так и будет приходить от Стаса Фомина:<br />
<br />
<code-php><br />
$wgEmergencyContact = 'admin@your.wiki'; # e-mail<br />
$wgPasswordSender = $wgEmergencyContact;<br />
</code-php><br />
<br />
Также, для отправки почты в формате HTML (а не plaintext) нужны PEAR-пакеты Mail и Net_SMTP:<br />
* {{cmd|pear install Mail; pear install Net_SMTP}}, либо<br />
* {{cmd|apt-get install php-mail php-net-smtp}} (Debian, Ubuntu).<br />
<br />
== Короткие URL ==<br />
<br />
Под «короткими URL» в вики понимаются адреса статей без <tt>index.php/</tt> и тем более без <tt>index.php?title=</tt>, например, такой URL — «короткий»: '''<tt>http://wiki.4intra.net/Mediawiki4Intranet</tt>'''.<br />
<br />
Настраиваются с помощью конфигурации вики + конфигурации веб-сервера.<br />
<br />
=== LocalSettings.php ===<br />
<br />
<code-php><br />
$wgUsePathInfo = true;<br />
$wgArticlePath = '/$1';<br />
</code-php><br />
<br />
Если вы при этом хотите использовать API (<tt>api.php</tt>), то нужно исхитриться следующим образом: {{cmd|1 = $wgUsePathInfo = substr($_SERVER['PHP_SELF'], 0, 10) == '/index.php';}}. Дело в том, что в MediaWiki принято обычно располагать Script Path в месте, отличном от Rewrite Path. То есть, скрипты класть в <tt>yourdomain.com/w/</tt> (index.php, api.php и т. п.), а путь для статей делать <tt>yourdomain.com/wiki/</tt>. И API рассчитывает на это, и в итоге переданное значение параметра <tt>title=</tt> в случае равенства путей заменяется на «api.php», что мешает нормально использовать API.<br />
<br />
=== nginx + php-fpm ===<br />
<br />
<pre><br />
root /path/to/wiki;<br />
location ~ /\.svn\/|\.bzr\/|\.hg\/|\.git\// {<br />
deny all;<br />
}<br />
location / {<br />
index index.php;<br />
try_files $uri @index;<br />
}<br />
location ~ \.php$ {<br />
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;<br />
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;<br />
fastcgi_param PATH_INFO $fastcgi_path_info;<br />
include fastcgi_params;<br />
}<br />
location @index {<br />
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;<br />
fastcgi_param SCRIPT_FILENAME $document_root/index.php;<br />
fastcgi_param PATH_INFO $fastcgi_path_info;<br />
include fastcgi_params;<br />
}<br />
</pre><br />
<br />
=== Apache 2 ===<br />
<br />
Через директивы mod_rewrite:<br />
<br />
<pre><br />
RewriteCond %{THE_REQUEST} ^\S+\s*/*index.php/<br />
RewriteRule ^index.php/(.*)$ /$1 [R=301,L,NE]<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d<br />
RewriteRule ^(.*)$ index.php?title=$1 [L,B,QSA]<br />
</pre><br />
<br />
Всё относительно очевидно, но есть нюансы:<br />
* В последней строчке обязательно писать именно <tt>index.php?title=$1</tt>, а не <tt>index.php/$1</tt>, так как во втором случае при использовании [B] подстраницы (страницы с / в названии) становятся недоступны.<br />
* Флаг [B] в последней строчке важен. Ибо без [B] mod_rewrite при переписи URL разэкранирует и не экранирует обратно спецсимволы (все, кроме латинских букв и цифр), из-за чего статьи с названиями, содержащими процент (%), становятся недоступны, потому что % в URL-кодировке — спецсимвол, и обязательно должен быть заменён на %25.<br />
* Флаг [QSA] тоже нужен, ибо без него к ?title=$1 не дописываются остальные параметры URL.<br />
* Первые две строчки нужны, чтобы с адресов, содержащих в себе <tt>index.php/</tt>, перенаправить пользователя на «короткие» — это убирает дублирование страниц, которое не любят поисковики.<br />
<br />
== Sphinx-поиск по вики ==<br />
<br />
Во-первых, нужно установить [http://sphinxsearch.com/ Sphinx].<br />
<br />
Mediawiki4Intranet использует «realtime» индексы Sphinx, то есть, обновляемые индексы. Ответственное расширение - [[SphinxSearchEngine]]. Для конфигурирования есть авто-конфигуратор <tt>configs/maintenance/configure-sphinx.php</tt>. Использовать так:<br />
<br />
* Создаём рядом с ним файл <tt>sphinx.wikis.php</tt>, в который прописываем что-то вроде:<br />
<code-php><br />
$wikis = array('HOST' => array(<br />
array(<br />
'name' => 'wiki', // имя индекса - должны быть разные для сожительствующих в одном sphinx'е вик<br />
'user' => '', // имя пользователя БД<br />
'pass' => '', // пароль к БД<br />
'db' => '', // имя БД<br />
),<br />
));<br />
</code-php><br />
* Вызываем <tt>php configure-sphinx.php --hostname HOST --style rt</tt>. Под UNIX вместо HOST можно использовать имя из <tt>/etc/hostname</tt>, и тогда можно будет держать один конфиг на несколько серверов, и вызывать без опции <tt>--hostname</tt>.<br />
* Будет создан файл '''<tt>sphinx.conf</tt>''', который нужно скормить Sphinx’у — под UNIX это обычно означает положить его в <tt>/etc/sphinxsearch/</tt>.<br />
* Если конфигуратор предложит инициализировать какие-то индексы и выведет для этого команды — делайте, что говорит.<br />
<br />
После чего прописываем в <tt>LocalSettings.php</tt> (раскомментируйте и подставьте адрес и порт, если у вас он в итоге отличается):<br />
<br />
<code-php><br />
require_once "$IP/extensions/SphinxSearch/SphinxSearch.php";<br />
$wgSphinxQL_index = 'wiki';<br />
//$wgSphinxQL_host = '';<br />
//$wgSphinxQL_port = '/var/run/searchd.sock'; // UNIX сокет, либо номер TCP-порта SphinxQL<br />
</code-php><br />
<br />
{{Warning}} На самом деле старые версии документов при обновлениях в индексе остаются, просто прописываются в «Kill-List» — список ID устаревших документов, которые удаляются из результатов поиска. Поэтому при большом количестве обновлений страниц могут пойти тормоза. И хотя сфинкс ''очень быстрый'' и тормоза пойдут не скоро, это всё-таки может случиться. Поэтому время от времени полезно делать оптимизацию индекса, подсоединяясь к Sphinx MySQL-клиентом и отправляя ему SQL-запрос '''OPTIMIZE INDEX index_name'''.<br />
<br />
=== [[TikaMW]] ===<br />
<br />
[http://tika.apache.org/ Apache Tika] - библиотека, позволяющая извлекать текст из бинарных файлов (pdf, офисных и т.п). Она используется для индексации содержимого загруженных файлов.<br />
* Брать тут: http://code.google.com/p/mediawiki4intranet/downloads/detail?name=tika-app-1.2-fix-TIKA709-TIKA964.jar<br />
* Или тут: http://wiki.4intra.net/public/tika-app-1.2-fix-TIKA709-TIKA964.jar<br />
<br />
Тику нужно прописать в автозапуск на сервере как-то так:<br />
<br />
<pre>java -jar tika-app-1.2-fix-TIKA709-TIKA964.jar -p 127.0.0.1:8072 -t -eutf-8</pre><br />
<br />
Более подробная информация в статье расширения: [[TikaMW]].<br />
<br />
== Антиспам для публичных Wiki ==<br />
<br />
В публичных Wiki имеют свойство заводиться спамеры, потому что можно легко зарегистрироваться и создать статью.<br />
<br />
Поэтому если ваша Wiki «смотрит» в Интернет и не закрыта от него ПОЛНОСТЬЮ (правами, например, или по IP, или базовой авторизацией), используйте наш конфиг <tt>ExternalServerSettings.php</tt>. В нём изначально включены [[ConfirmEdit]] и [[WikiKCaptcha]], а также прописан 30-дневный срок жизни Cookie и необходимость подтверждения e-mail адреса перед редактированием.<br />
<br />
…И ещё один нюанс — спамеры любят регистрироваться и сразу создавать статьи, поэтому можно запретить создавать статьи после регистрации на какой-то период времени (в тяжёлых случаях можно, например, на 4 суток):<br />
<br />
<code-php><br />
// Время, в течение которого запрещено создавать статьи (например, 4 суток * 86400 секунд в сутках)<br />
$wgAutoConfirmAge = 86400 * 4;<br />
</code-php><br />
<br />
== OpenID ==<br />
<br />
В MediaWiki4Intranet есть поддержка OpenID, хотя и глючная, как и вообще любая реализация OpenID. Это не наша вина, и даже не вина авторов [[mediawikiwiki:Extension:OpenID|расширения OpenID]] — виноваты здесь авторы библиотеки [http://www.janrain.com/openid-enabled OpenID для PHP].<br />
<br />
Чтобы включить её, нужно прописать следующее в <tt>LocalSettings.php</tt>:<br />
<code-php><br />
require_once("$IP/extensions/OpenID/OpenID.setup.php");<br />
</code-php></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Template:Replicate-from-custiswiki-to-all&diff=7820
Template:Replicate-from-custiswiki-to-all
2017-05-22T10:21:06Z
<p>VitaliyFilippov: </p>
<hr />
<div><noinclude>Шаблон для задания репликации статьи/шаблона/изображения во ВСЕ наши Wiki-системы.<br />
<br />
Включать следует '''только''' на действительно полезные везде вещи, типа пиктограмм, макросов интеграции с Bugzilla и т.п. На справку включать НЕ надо.</noinclude><div class="replication-info"><br />
----<br />
<small><i>Статья реплицируется в [[SMWiki]], [[SBWiki]], [[RDWiki]], [[GZWiki]], [[DPWiki]], [[HRWiki]], [[CBWiki]], [[ORWiki]], [[RAWiki]], [[ITWiki]], [[CRMWiki]], [[NordeaWiki]], [[EvolWiki]], [[TMSWiki]]</i></small>.</div><br />
<includeonly>[[Category:Джентльменский набор вики]]</includeonly></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Template:Cmd&diff=7922
Template:Cmd
2017-05-19T12:39:13Z
<p>VitaliyFilippov: </p>
<hr />
<div><tt style="border: 1px gray dashed; padding: 4px; background: #f8f8f8">{{{1|}}}</tt><noinclude>[[Категория:Джентльменский набор вики]]</noinclude></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Talk:Mediawiki4Intranet/en&diff=7791
Talk:Mediawiki4Intranet/en
2017-03-01T21:05:21Z
<p>VitaliyFilippov: </p>
<hr />
<div><!-- blank page created by Wikilog --><br />
<br />
== Broken download for mediawiki4intranet.7z ==<br />
<br />
The link for the Code bundle @ http://wiki.4intra.net/public/mediawiki4intranet.7z does work, but the file seems to be corrupt. Tried opening it from both Windows and Linux box and I get an error.<br />
<br />
: [[User:VitaliyFilippov|VitaliyFilippov]] ([[User talk:VitaliyFilippov|talk]]) 16:31, 27 December 2016 (MSK) Reuploaded, seems fine now<br />
<br />
== Where do I change language to English for "Layout Style Item Category etc in the Editor? ==<br />
<br />
[[File:Intra.jpg|Intra.jpg]]<br />
<br />
: [[User:VitaliyFilippov|VitaliyFilippov]] ([[User talk:VitaliyFilippov|talk]]) 00:05, 2 March 2017 (MSK) Thanks for the note, here we have an uglily hardcoded part :) it comes from some of the russian wikipedia scripts and misses i18n. I’ll add i18n for this part, I think in several days.</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=File:06c7824083211aa33673011a503a0d80.jpg&diff=7767
File:06c7824083211aa33673011a503a0d80.jpg
2017-02-07T15:51:31Z
<p>VitaliyFilippov: </p>
<hr />
<div></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Mediawiki4Intranet/1.26&diff=7762
Mediawiki4Intranet/1.26
2017-01-20T12:29:25Z
<p>VitaliyFilippov: </p>
<hr />
<div>* Ядро обновлено до версии 1.26.4<br />
* Удалены патчи: detailed-badtitle (принят в апстрим), lcstore-accel-shared (некорректная реализация, сначала принят в апстрим, потом удалён), skins-in-subdirs (скины в 1.26 подключаются явно), а также исправления, более не нужные для нового ядра: fix-l10n, relative-inclusions-in-main, allow-moving-categories, fix-broken-upload-form, fix-ie-searchsuggest, do-not-cut-debug-sql, fix-cologneblue-print, remove-slow-messagecache-locking, parser-debug-doblocklevels<br />
* Добавлены патчи: search-rm-slashn (исправление опечатки), ymd-hms-date-format (был частью fix-l10n), unlock-session (отключение блокировки сессий), allow-scripted-svg-if-raw-html (разрешение скриптованных SVG, если разрешён голый HTML), fix-specialupload-charinsert (исправление работы CharInsert на странице загрузки файла), limit-thumb-names (ограничение длины имён thumbnail'ов, чтобы работал PdfHandler)<br />
* Изменены патчи: fix-vector-skin (перемещено в скин Vector), debug-categorized-specialrecentchanges (оставлена только новая фича), fix-head-and-editsection (заменён на fix-noeditsection), html-emails (заменён на функционал EnotifDiff)<br />
* Импорт/экспорт: исправлена работа консольных скриптов импорта/экспорта (maintenance/importDump.php и maintenance/dumpBackup.php), исправлена поддержка оригинального формата экспорта изображений MediaWiki (XML с содержимым файлов в Base64)<br />
* Cite, CharInsert, ConfirmEdit, Interwiki, PagedTiffHandler, ParserFunctions: переведены на оригинальную версию без наших изменений (в частности, в оригинальном Cite появились аналогичные нашим доработки)<br />
* Добавлен VisualEditor и необходимый ему сервис Parsoid (опционально, по умолчанию не включен)<br />
* SlimboxThumbs: исправлены баги в библиотеке slimbox (несовместимость с новым jquery, некорректное экранирование адресов)<br />
* PdfHandler: осуществлён переход с GhostScript на Poppler (pdftocairo) — производительность растеризации PDF улучшена на порядок, качество отрисовки шрифтов также сильно улучшено<br />
* SemanticMediaWiki: обновлено до 2.3, наши доработки перенесены и обновлены:<br />
** перенесены: оператор отрицания, оптимизатор запросов, поддержка прав доступа<br />
** добавлена поддержка цепочек свойств в выводе (?Prop1.Prop2) и в сортировке (sort = Prop1.Prop2)<br />
** удалены патчи: исправление некорректного выполнения коньюнкции дизьюнкций, отключение форсированных типов для свойств с названиями, равными названиям типов (баги исправлены в оригинальной версии), сброс кэша всех запросов при изменении любого свойства в вики (в оригинальной версии появилась фича QueryDependentLinksStore, отслеживающая конкретные зависимости запросов)<br />
** исправлены баги: некорректная обработка нескольких отрицаний в одной конъюнкции; ошибки SQL, возникающие при повторе частей запросов в определённых условиях (баги прошлой версии наших патчей); поддержка PostgreSQL была сломана; локализованные boolean’ы не распознавались с большой буквы (баги оригинала)<br />
* Добавлено расширение MsUpload: даёт возможность загрузки файлов прямо со страницы редактирования — выбором, drag&drop и даже вставкой из буфера обмена (наш патч)<br />
* Добавлены расширения Semantic Forms, Semantic Forms Inputs, Semantic Forms Select, Semantic Result Formats, Arrays, Loops<br />
* Добавлена корректная поддержка WikiEditor в Semantic Forms и Semantic Forms в CategoryTemplate<br />
* Добавлено расширение CategoryWatch (e-mail уведомления о добавлении страниц в категории)<br />
* Добавлено расширение AjaxLoader (асинхронно подгружаемые панельки)<br />
* Добавлено расширение RequestMagic (получение параметра запроса, в том числе допускающее использованием с кэшем парсера)<br />
* Удалены скины: chick, simple (были совсем примитивные, неиспользуемые)<br />
* Удалены расширения: ErrorMail (логгирование ошибок теперь есть в ядре), EnotifDiff (перемещено в ядро в виде патчей), SphinxSearch, SpecialForm и Workflow (устаревшие и неиспользуемые), SWFUpload и SupaMW (массовая загрузка файлов и загрузка файлов из буфера обмена, заменены на MsUpload), SimpleForms (устаревшее и неиспользуемое, кроме функции, перенесённой в RequestMagic)<br />
* Обеспечена поддержка PostgreSQL во всех включённых расширениях<br />
* Все расширения обновлены до актуальных версий<br />
<br />
TODO:<br />
* Заменить UserMessage, скорее всего, на патч ядра (так как расширение — всё равно огромный костыль)<br />
* WhoIsWatching: Добавить возможность открытия списка наблюдающих пользователей через ввод имени страницы на спецстранице, а не только по ссылке из подвала<br />
* CustisScripts: Сделать уже загрузку wikEd пользовательской настройкой<br />
* AllowGetParamsInWikilinks: почистить код и/или заменить на что-то другое<br />
* Возможно, заменить DeleteBatch на Nuke<br />
* Добавить CKEditor и обеспечить его поддержку в Semantic Forms (не факт, код расширения CKEditor сильно устаревший)<br />
* Добавить MobileFrontend и обеспечить его поддержку во всех расширениях<br />
* В DocExport добавить аналогичный S5SlideShow хак для рендера изображений в полном размере<br />
* Можно добавить расширение "safe html", выводящее HTML-код с вырезанными javascript-ами и разрешающее вставку js только из пространства имён MediaWiki<br />
* Убрать запуск inkscape из MarkupBabel<br />
* Исправить отключение кэша парсера в PageSnapshots<br />
* Исправить показ CAPTCHA на странице входа</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Talk:Mediawiki4Intranet/en&diff=7756
Talk:Mediawiki4Intranet/en
2016-12-27T13:31:46Z
<p>VitaliyFilippov: /* Broken download for mediawiki4intranet.7z */</p>
<hr />
<div><!-- blank page created by Wikilog --><br />
<br />
== Broken download for mediawiki4intranet.7z ==<br />
<br />
The link for the Code bundle @ http://wiki.4intra.net/public/mediawiki4intranet.7z does work, but the file seems to be corrupt. Tried opening it from both Windows and Linux box and I get an error.<br />
<br />
: [[User:VitaliyFilippov|VitaliyFilippov]] ([[User talk:VitaliyFilippov|talk]]) 16:31, 27 December 2016 (MSK) Reuploaded, seems fine now</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Category:%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0&diff=7738
Category:Справка
2016-10-13T10:01:19Z
<p>VitaliyFilippov: </p>
<hr />
<div>{{Box|[[File:Wiki4intranet-logo.svg|100px|left]] Вы читаете справку '''Mediawiki4Intranet''' — сборки [http://mediawiki.org/ MediaWiki] (движка [http://wikipedia.org Wikipedia]), созданной для корпоративного использования.<br />Описание сборки: http://wiki.4intra.net/Mediawiki4Intranet.}}<br />
<div style="clear:both"></div><br />
<br />
== Начало работы ==<br />
<br />
* [[Help:Регистрация|Регистрация]]<br />
* [[Help:Настройки|Настройки]]<br />
* [[WikiWiki|Wiki — что, как и почему]]<br />
* [[Help:Создание новых статей|Создание и редактирование статей]]<br />
** [https://www.mediawiki.org/wiki/Help:Signatures/ru Подписи]<br />
** [[Help:Перенаправления|Перенаправления]]<br />
** [[Help:Возврат к ранней версии|Возврат к ранней версии]]<br />
* [[Help:Поиск|Поиск статей]]<br />
<br />
== Разметка ==<br />
<br />
* Простая разметка<br />
** [[Help:Форматирование|Работа с текстом]]<br />
** [[Help:Викификатор|Викификатор]] (использовать всегда!)<br />
** [[WikiHelpContent:Цвета|Цвет]] ([[WikiHelpContent:Таблица цветов (фон)|таблица цветов]])<br />
** [[Help:Форматирование#Ссылки, URL|Гиперссылки]]<br />
** [[Help:Коды|Подсветка синтаксиса]]<br />
** [[Help:Специальные символы|Специальные символы]]<br />
** [[Help:Советы#Пиктограммы|Пиктограммы]]<br />
** [[Help:Формулы|Формулы]]<br />
** [[Help:Форматирование#nowiki|Подавление разметки]]<br />
** [[Help:Таблицы|Таблицы]]<br />
* Мультимедиа<br />
** [[Help:Изображения|Изображения]]<br />
** [[Blog:TechTools/2011-12-30_Lightbox_в_вики|Фотогалерея]]<br />
** [[Help:Изображения#Видео|Видео]]<br />
** [[Help:Изображения#Остальные типы файлов|Произвольные файлы]]<br />
** [[Graphviz|Графы]]<br />
** [[Gnuplot|Графики функций]]<br />
** [[Help:Изображения#SVG-графика|Векторная графика]], [[Blog:TechTools/SVGEditor_—_инфографика_и_схематизация_не_выходя_из_броузера|редактирование SVG в браузере]]<br />
** [[Диаграммы_Ганта_в_Wiki|Диаграммы Ганта]]<br />
** [[Help:UML|Диаграммы UML]]<br />
** [[Help:Ленточная_диаграмма|Ленточные диаграммы]]<br />
* Структура документа<br />
** [[Help:Форматирование#sections|Разделы]]<br />
** [[Help:Форматирование#lists|Списки]]<br />
** [[Help:Форматирование#dl|Определения]]<br />
** [[Help:Форматирование#paragraphs|Абзацы]]<br />
** [[Help:Форматирование#refs|Сноски]]<br />
* Расширенная разметка<br />
** [[Help:Форматирование#Включение других статей|Включение статей]]<br />
** [[Help:Edittools|Edittools — быстрая вставка конструкций при редактировании]]<br />
** [[Help:Шаблоны|Шаблоны]], [[Быстрое создание статей по шаблону]]<br />
** [[Help:Магические слова|Магические слова и функции парсера]], [[Blog:TechTools/2013-11-13 Автокомплит в вики :-)|Автодополнение]]<br />
** [[Help:Экспорт_в_текстовые_процессоры|Экспорт в текстовые процессоры]]<br />
** [[Blog:TechTools/2014-10-31 Копипаст документов (и даже картинок) из Word'а|Вставка текстов с картинками из Word-документов через LibreOffice]]<br />
<br />
== Продвинутые возможности ==<br />
<br />
* [[4intranet:IntraACL|Права доступа]]<br />
* Социальные темы<br />
** [[Help:Блоги|Блоги]]<br />
** [[Help:Опросы и голосования|Опросы и голосования]]<br />
** [[Blog:TechTools/Встречайте: лайки, рейтинги и pagerank-и! Теперь и в вики.|Лайки и рейтинги]]<br />
* Разное<br />
** [[4intranet:BatchEditor/ru|Массовое редактирование]]<br />
** [[4intranet:S5SlideShow/ru|Вики-презентации]]<br />
** [[4intranet:ListFeed/ru|Генерация RSS]]<br />
А ниже — алфавитный список статей в категории «Справка».<br />
{{replicate-from-custiswiki-to-4intranet}}</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Category:%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0&diff=7737
Category:Справка
2016-10-13T10:01:08Z
<p>VitaliyFilippov: </p>
<hr />
<div>{{Box|[[File:Wiki4intranet-logo.svg|100px|left]] Вы читаете справку '''Mediawiki4Intranet''' — сборки [http://mediawiki.org/ MediaWiki] (движка [http://wikipedia.org Wikipedia]), созданной для корпоративного использования.<br />Сайт нашей сборки: http://wiki.4intra.net/Mediawiki4Intranet.}}<br />
<div style="clear:both"></div><br />
<br />
== Начало работы ==<br />
<br />
* [[Help:Регистрация|Регистрация]]<br />
* [[Help:Настройки|Настройки]]<br />
* [[WikiWiki|Wiki — что, как и почему]]<br />
* [[Help:Создание новых статей|Создание и редактирование статей]]<br />
** [https://www.mediawiki.org/wiki/Help:Signatures/ru Подписи]<br />
** [[Help:Перенаправления|Перенаправления]]<br />
** [[Help:Возврат к ранней версии|Возврат к ранней версии]]<br />
* [[Help:Поиск|Поиск статей]]<br />
<br />
== Разметка ==<br />
<br />
* Простая разметка<br />
** [[Help:Форматирование|Работа с текстом]]<br />
** [[Help:Викификатор|Викификатор]] (использовать всегда!)<br />
** [[WikiHelpContent:Цвета|Цвет]] ([[WikiHelpContent:Таблица цветов (фон)|таблица цветов]])<br />
** [[Help:Форматирование#Ссылки, URL|Гиперссылки]]<br />
** [[Help:Коды|Подсветка синтаксиса]]<br />
** [[Help:Специальные символы|Специальные символы]]<br />
** [[Help:Советы#Пиктограммы|Пиктограммы]]<br />
** [[Help:Формулы|Формулы]]<br />
** [[Help:Форматирование#nowiki|Подавление разметки]]<br />
** [[Help:Таблицы|Таблицы]]<br />
* Мультимедиа<br />
** [[Help:Изображения|Изображения]]<br />
** [[Blog:TechTools/2011-12-30_Lightbox_в_вики|Фотогалерея]]<br />
** [[Help:Изображения#Видео|Видео]]<br />
** [[Help:Изображения#Остальные типы файлов|Произвольные файлы]]<br />
** [[Graphviz|Графы]]<br />
** [[Gnuplot|Графики функций]]<br />
** [[Help:Изображения#SVG-графика|Векторная графика]], [[Blog:TechTools/SVGEditor_—_инфографика_и_схематизация_не_выходя_из_броузера|редактирование SVG в браузере]]<br />
** [[Диаграммы_Ганта_в_Wiki|Диаграммы Ганта]]<br />
** [[Help:UML|Диаграммы UML]]<br />
** [[Help:Ленточная_диаграмма|Ленточные диаграммы]]<br />
* Структура документа<br />
** [[Help:Форматирование#sections|Разделы]]<br />
** [[Help:Форматирование#lists|Списки]]<br />
** [[Help:Форматирование#dl|Определения]]<br />
** [[Help:Форматирование#paragraphs|Абзацы]]<br />
** [[Help:Форматирование#refs|Сноски]]<br />
* Расширенная разметка<br />
** [[Help:Форматирование#Включение других статей|Включение статей]]<br />
** [[Help:Edittools|Edittools — быстрая вставка конструкций при редактировании]]<br />
** [[Help:Шаблоны|Шаблоны]], [[Быстрое создание статей по шаблону]]<br />
** [[Help:Магические слова|Магические слова и функции парсера]], [[Blog:TechTools/2013-11-13 Автокомплит в вики :-)|Автодополнение]]<br />
** [[Help:Экспорт_в_текстовые_процессоры|Экспорт в текстовые процессоры]]<br />
** [[Blog:TechTools/2014-10-31 Копипаст документов (и даже картинок) из Word'а|Вставка текстов с картинками из Word-документов через LibreOffice]]<br />
<br />
== Продвинутые возможности ==<br />
<br />
* [[4intranet:IntraACL|Права доступа]]<br />
* Социальные темы<br />
** [[Help:Блоги|Блоги]]<br />
** [[Help:Опросы и голосования|Опросы и голосования]]<br />
** [[Blog:TechTools/Встречайте: лайки, рейтинги и pagerank-и! Теперь и в вики.|Лайки и рейтинги]]<br />
* Разное<br />
** [[4intranet:BatchEditor/ru|Массовое редактирование]]<br />
** [[4intranet:S5SlideShow/ru|Вики-презентации]]<br />
** [[4intranet:ListFeed/ru|Генерация RSS]]<br />
А ниже — алфавитный список статей в категории «Справка».<br />
{{replicate-from-custiswiki-to-4intranet}}</div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Mediawiki4Intranet&diff=7734
Mediawiki4Intranet
2016-10-05T12:19:47Z
<p>VitaliyFilippov: </p>
<hr />
<div>[[en:Mediawiki4Intranet/en]]<br />
[http://mediawiki.org/ MediaWiki] — популярная [[WikiWiki|«вики»-система]], написанная на PHP и изначально создававшаяся в качестве «движка» [http://wikipedia.org/ Википедии]. Отличается отличной расширяемостью — существует более 1700 расширений к ней.<br />
<br />
<big>'''Mediawiki4Intranet'''</big> — сборка MediaWiki, содержащая в себе довольно большой набор расширений, полезных для внутрикорпоративной среды и, что очень важно, исправленных и «подруженных» между собой — большая часть ошибок, возникающих при интеграции, исправлена.<br />
<br />
Об установке см. [[#Установка]].<br />
<br />
= Содержимое =<br />
<br />
Сборка состоит из:<br />
* Доработанного ядра MediaWiki (оригинал + набор патчей).<br />
* Расширений MediaWiki:<br />
** Оригинальных, то есть, нетронутых.<br />
** Доработанных незначительно, в виде «оригинал + набор патчей» для каждого.<br />
** Форкнутых, то есть, доработанных значительно, в простом виде гитхаб-репозитория.<br />
** Новых, созданных нами.<br />
* Скрипта установки «[[repo.php]]».<br />
* Нескольких готовых конфигураций типа <tt>LocalSettings.php</tt> для быстрой установки.<br />
* Нескольких дополнительных утилит обслуживания.<br />
<br />
Лицензия на сборку — GNU GPLv3 или новее. Почему? Потому, что:<br />
* MediaWiki и большинство расширений распространяются под GPLv2+.<br />
* Часть расширений — под Permissive лицензиями.<br />
* Часть расширений — под GPLv3+.<br />
Соответственно, на сборку целиком распространяется наиболее жёсткая из этих свободных лицензий, а именно, GPLv3.<br />
<br />
== MediaWiki ==<br />
<br />
Код доработанного ядра и расширений MediaWiki, а также расширений, созданных нами, живёт на Github у организации «mediawiki4intranet»: https://github.com/mediawiki4intranet/. Там есть репозиторий с ядром MediaWiki, репозиторий с конфигурациями и скриптами деплоя и обслуживания, а также по репозиторию на каждое расширение и тему оформления MediaWiki.<br />
<br />
Код оригинальной MediaWiki, кстати, раньше жил в Subversion, а теперь живёт в [[rupedia:Git]]-репозиториях Wikimedia, по адресам вида:<br />
* Ядро: https://gerrit.wikimedia.org/r/gitweb?p=mediawiki/core.git<br />
* Расширение {{red|XXX}}: <nowiki>https://</nowiki>gerrit.wikimedia.org/r/gitweb?p=mediawiki/extensions/{{red|XXX}}.git<br />
<br />
Версия Mediawiki4Intranet несколько отстаёт от наиболее свежей стабильной, ибо внешние различия между версиями MediaWiki не так уж и велики, но при этом в новых могут вылезать баги (вроде [https://bugzilla.wikimedia.org/show_bug.cgi?id=37209 Bug 37209]), и на обновление всех доработок сборки приходится тратить некоторое время.<br />
<br />
Историй версий MediaWiki в основе Mediawiki4Intranet:<br />
* 2016-09-14 &rarr; текущая: '''1.26.4'''<br />
* 2016-07-04 &rarr; 2016-09-14: '''1.26.3'''<br />
* 2015-12-21 &rarr; 2016-07-04: '''1.26.2'''<br />
* 2015-10-15 &rarr; 2015-12-21: '''1.26 beta'''.<br />
* 2014-06-03 &rarr; 2015-10-15: '''1.21.10'''.<br />
* 2014-01-31 &rarr; 2014-06-03: '''1.21.5'''.<br />
* 2014-01-14 &rarr; 2014-01-31: '''1.21.3'''.<br />
* 2012-11-20 &rarr; 2014-01-14: '''1.18.5'''.<br />
* 2012-02-22 &rarr; 2012-11-20: '''1.18.1'''.<br />
* 2011-02-08 &rarr; 2012-02-22: '''1.16.2'''.<br />
* 2010-10-09 &rarr; 2011-02-08: '''1.14.1'''.<br />
* &rarr; 2010-10-09: '''1.13.1''' (в репозиториях отсутствует).<br />
<br />
== Патчи ==<br />
<br />
В виде патчей оформляются либо мелкие доработки расширений, либо любые доработки ядра MediaWiki. Сами патчи хранятся в Git-репозитории в виде обычных коммитов, организованных в серию, по принципу 1 коммит = 1 патч.<br />
<br />
{{warning}} При внесении изменений в уже существующий патч вместо добавления новых коммитов происходит {{red|переписывание истории}}! Это приводит к некоторым неудобствам при обновлении веток (нужно руками делать git reset), но зато, по крайней мере, каждый патч достаточно легко выделить и отправить авторам.<br />
<br />
Описание всех патчей, входящих в сборку MediaWiki4Intranet, читайте на странице: [[Mediawiki4Intranet/Патчи]].<br />
<br />
== Расширения ==<br />
<br />
Отличная расширяемость без использования патчей — важнейшая фишка MediaWiki. Расширения используют заранее заданные в коде точки интеграции («Hooks») и добавляют в MediaWiki новый функционал без необходимости вносить изменения в ядро.<br />
<br />
Описание всех расширений, входящих в сборку MediaWiki4Intranet, читайте на странице: [[Mediawiki4Intranet/Расширения]].<br />
<br />
== Список изменений ==<br />
<br />
Изменения в версии Mediawiki4Intranet 1.26 (по сравнению с 1.21): [[Mediawiki4Intranet/1.26]]<br />
<br />
= Установка =<br />
<br />
== Установка через Docker ==<br />
<br />
Простейший способ установить Mediawiki4Intranet — использовать [https://www.docker.com/ Docker]. Наш репозиторий с образом Docker:<br />
<br />
https://github.com/mediawiki4intranet/docker<br />
<br />
Чтобы установить Mediawiki4Intranet через Docker, установите себе в систему Docker, склонируйте данный репозиторий, зайдите в склонированную директорию и запустите команду:<br />
<br />
<pre><br />
docker build -t mediawiki4intranet .<br />
</pre><br />
<br />
Это соберёт образ системы Mediawiki4Intranet. Чтобы запустить на основе этого образа контейнер, запустите:<br />
<br />
<pre><br />
docker run --name mw4i -p 8077:80 -v /home/wiki4intranet/data -t -d mediawiki4intranet<br />
</pre><br />
<br />
После чего откройте в браузере адрес http://localhost:8077 и заходите в wiki с логином-паролем WikiSysop/MediaWiki4Intranet.<br />
<br />
{{Box|{{Warning}} В Docker образе не сконфигурирована отправка почты, так как она требует либо настроенного MTA, либо SMTP подключения, а это зависит от окружения, в котором вы запускаете контейнер. Чтобы это исправить, либо пропишите в LocalSettings.php конфигурацию [https://www.mediawiki.org/wiki/Manual:$wgSMTP $wgSMTP] (для использования внешнего SMTP-сервера), либо установите внутрь контейнера sendmail/postfix и настройте его (это, к сожалению, пока надо делать вручную).}}<br />
<br />
=== Сборка с VisualEditor ===<br />
<br />
В репозитории есть два Dockerfile'а: базовый без VisualEditor и отдельный с оным. Соответственно, чтобы использовать сборку с VisualEditor, вместо одной команды build нужно запустить две:<br />
<br />
<pre><br />
docker build -t mediawiki4intranet .<br />
docker build -t mediawiki4intranet/ve -f ve.Dockerfile .<br />
</pre><br />
<br />
После чего запускать полученный образ аналогично:<br />
<br />
<pre><br />
docker run --name mw4i -p 8077:80 -v /home/wiki4intranet/data -t -d mediawiki4intranet/ve<br />
</pre><br />
<br />
== Ручная установка ==<br />
<br />
=== Скачать код ===<br />
<br />
Варианты:<br />
<br />
# Можно скачать [http://wiki.4intra.net/public/mediawiki4intranet.7z архив с исходниками] (примерно 25 МБ)<br />
# Можно использовать [[repo.php]] для автоматизированного скачивания с помощью системы контроля версий [[rupedia:Git|Git]] (что, разумеется, требует установленного git-клиента):<br />
#: {{cmd|git clone https://github.com/mediawiki4intranet/configs mediawiki/configs}}<br />
#: {{cmd|cd mediawiki/configs}}<br />
#: {{cmd|php repo.php install mediawiki4intranet}}<br />
<br />
=== Установить зависимости ===<br />
<br />
==== В Debian ====<br />
<br />
В Debian почти всё (кроме UMLGraph и [[#TikaMW|Tika]]) ставится 1 командой:<br />
<br />
<pre><br />
apt-get install zip unzip poppler-utils \<br />
netpbm librsvg2-bin djvulibre-bin texlive-base texlive-extra-utils ffmpeg \<br />
dia graphviz gnuplot plotutils umlet default-jre diffutils imagemagick sphinxsearch \<br />
nginx php7.0-fpm php7.0-cli php7.0-json php7.0-opcache php7.0-mbstring php7.0-curl php7.0-gd \<br />
php7.0-intl php7.0-mysql php7.0-xml php7.0-zip php-imagick php-apcu php-apcu-bc php-mail php-net-smtp<br />
</pre><br />
<br />
UMLGraph, если хочется, нужно скачать [http://www.umlgraph.org/ с сайта] и подложить в системные пути.<br />
<br />
Apache Tika — скачать отсюда: http://wiki.4intra.net/public/tika-app-1.2-fix-TIKA709-TIKA964.jar и добавить в /etc/rc.local:<br />
<br />
<pre><br />
start-stop-daemon -S -b --pidfile /var/run/tika.pid -m -x /usr/bin/java -- -jar /root/tika-app.jar -p 127.0.0.1:8072 -t -eutf-8<br />
</pre><br />
<br />
==== В других ОС ====<br />
<br />
Минимальные требования:<br />
* PHP >= 5.3. Можно PHP 7.<br />
* Веб-сервер и сервер приложений PHP. Например, [http://nginx.ru/ nginx] + [http://php-fpm.org/ php_fpm] или [http://httpd.apache.org/ Apache]. Другие варианты (IIS?) тоже, вероятно, поддерживаются.<br />
* СУБД MySQL или MariaDB >= 5.1, либо PostgreSQL >= 9.0.<br />
* Желателен Debian/Ubuntu Linux. Сборка, разумеется, будет работать под любым Linux’ом или ****BSD (и даже под виндой с некоторыми оговорками), но установить весь необходимый софт проще всего в Debian.<br />
<br />
Также нужны следующие расширения PHP:<br />
* '''php-mysql''' или '''php-pgsql'''<br />
* Обязательно наличие '''DOM'''. Расширение базовое и обычно встроено в PHP, но в дурацких RPM-дистрибутивах выделено в отдельный пакет типа '''php-dom'''.<br />
* '''php-gd''' для обработки картинок.<br />
* '''php-curl''' для загрузки файлов по URL.<br />
* Любой кэшер, например '''php-opcache''', '''php-apc''' или '''php-xcache'''<br />
* Для PHP < 5.6 — [[php5-fss]]. Для 5.6 или 7 — не нужно.<br />
* Для отправки почты — PEAR-пакеты Mail и Net_SMTP, см. подробнее [[#Отправка E-mail]].<br />
<br />
Требования конфигурации PHP (директивы php.ini):<br />
* <tt>post_max_size</tt>, <tt>upload_max_filesize</tt> — в зависимости от того, какого размера файлы планируете загружать<br />
* В боевой конфигурации: <tt>error_reporting = E_ALL & ~E_NOTICE</tt><br />
* Если PHP < 5.4: <tt>magic_quotes_gpc = Off, register_globals = Off</tt><br />
<br />
Дополнительно нужны сторонние программы — их список внушительный, но почти всё обычно ставится менеджером пакетов:<br />
* Импорт-экспорт в ZIP-архивах: утилиты [http://gnuwin32.sourceforge.net/packages/zip.htm zip] и [http://gnuwin32.sourceforge.net/packages/unzip.htm unzip] (windows). Под UNIX обычно либо уже есть, либо ставится из пакетов.<br />
* PDF: [http://pages.cs.wisc.edu/~ghost/ GhostScript], [http://poppler.freedesktop.org/ Poppler] — бывший [http://www.foolabs.com/xpdf/ Xpdf] ([http://gnuwin32.sourceforge.net/packages/xpdf.htm windows)]<br />
* DJVU: [http://djvu.sourceforge.net/ djvulibre], [http://netpbm.sourceforge.net/ netpbm] ([http://gnuwin32.sourceforge.net/packages/netpbm.htm windows]).<br />
* LaTeX (формулы &lt;m>…&lt;/m>): любой дистрибутив TeX’а, например, в Debian обычно [http://www.tug.org/texlive/debian.html TeXLive], под Windows — [http://miktex.org/ MiKTeX]; утилита [http://dvisvgm.sourceforge.net/ dvisvgm].<br />
* [http://dia-installer.de/ Dia]<br />
* FLV/MP4-видео: [http://www.ffmpeg.org/ ffmpeg] ([http://ffmpeg.arrozcru.org/wiki/index.php?title=Main_Page для windows]).<br />
* [http://www.imagemagick.org/ ImageMagick]<br />
* [http://www.graphviz.org/ Graphviz] желателен версии не меньше 2.27, так как в предыдущих есть различные мелкие баги.<br />
* [http://www.gnuplot.info/ GNUPlot].<br />
* [http://www.umlgraph.org/ UMLGraph].<br />
* [http://www.umlet.com/ UMLet].<br />
* UMLGraph, UMLet, PlantUML требуют наличия [http://java.sun.com Java].<br />
* Sphinx-поиск по вики: [http://sphinxsearch.com/ Sphinx], [[#TikaMW|Tika]]<br />
<br />
=== Создать папку images и пустую БД ===<br />
<br />
В директории для установки нужно создать папку <tt>images</tt>, читаемую и записываемую веб-сервером.<br />
<br />
Также нужно создать для вики MySQL базу данных и пользователя с полным доступом к ней.<br />
<br />
=== Инициализировать БД ===<br />
<br />
Сначала нужно создать структуру БД для «голой» MediaWiki:<br />
<br />
# Либо просто накатить дамп <tt>maintenance/tables.sql</tt>:<br />
#* ''Сначала'' создать минимальный конфиг MediaWiki4Intranet (LocalSettings.php, см. ниже)<br />
#* Выполнить команду {{cmd|php maintenance/patchSql.php maintenance/tables.sql}} из директории установки вики.<br />
# Либо запустить вики-установщик из папки <tt>mw-config</tt> — плюс в том, что он ещё проводит дополнительные проверки версии PHP, расширений и т. п.:<br />
#* Зайти на <tt>http://server/wiki/mw-config/</tt>, ответить на вопросы, исправить недоразумения (если таковые возникнут), выбрать базу MySQL, InnoDB, 4.1/5.0 utf8 binary. Установщик создаст пустую БД и конфиг.<br />
#* ''Удалить'' конфиг, сгенерированный установщиком — в нём куча опций, которые все уже прописаны в правильные значения в конфигах MediaWiki4Intranet.<br />
#* ''Потом'' создать минимальный конфиг MediaWiki4Intranet (см. ниже)<br />
<br />
Потом нужно дополнить созданную БД таблицами расширений. Для этого нужно:<br />
* Запустить {{cmd|php maintenance/update.php}} из директории установки вики.<br />
<br />
=== Создать минимальный конфиг ===<br />
<br />
Содержимое минимального конфига (LocalSettings.php):<br />
<br />
<code-php><br />
<?php<br />
require_once 'configs/ServerSettings.php'; # это под UNIX, либо BaseSettings.php для винды<br />
$wgDBname = 'wiki'; # имя БД<br />
$wgDBuser = ''; # логин и пароль с полным доступом к этой БД<br />
$wgDBpassword = '';<br />
$wgDBadminuser = $wgDBuser;<br />
$wgDBadminpassword = $wgDBpassword;<br />
$wgScriptPath = '/wiki';<br />
</code-php><br />
<br />
== Старый Windows-образ ==<br />
<br />
Для того, чтобы быстро попробовать '''MediaWiki4Intranet''' на локальной Windows-машине, также есть '''старая''' Windows-сборка. Фичи там есть не все, обновляться она скорее всего больше не будет (на данный момент версия {{/WindowsBundleVersion}}), настроена кривовато (ибо Windows) и не очень безопасно (ибо XAMPP). Раньше это был простейший способ попробовать Mediawiki4Intranet. Подробнее: [[Windows-сборка Mediawiki4Intranet]].<br />
<br />
{{Box|<br />
{{Warning}} Под Windows не работает следующий функционал MediaWiki4Intranet:<br />
* Отправка почты в формате HTML<br />
* По умолчанию отключён Sphinx-поиск<br />
* По умолчанию отключена поддержка PDF и Djvu<br />
* По умолчанию отключено слияние при конфликтах редактирования — чтобы включить, нужно установить Windows-версию утилиты diff3, и прописать в LocalSettings.php:<br />
<code-php>$wgDiff3 = 'путь к diff3';</code-php><br />
}}<br />
<br />
= Дополнительная настройка =<br />
<br />
== Отправка E-mail ==<br />
<br />
Для отправки электронной почты нужна рабочая локальная команда sendmail.<br />
<br />
По умолчанию она включается только под UNIX’ами, потому что под виндой sendmail’а обычно нет. Однако когда включается, нужно поменять две следующие переменные в <tt>LocalSettings.php</tt>, иначе почта из вики так и будет приходить от Стаса Фомина:<br />
<br />
<code-php><br />
$wgEmergencyContact = 'admin@your.wiki'; # e-mail<br />
$wgPasswordSender = $wgEmergencyContact;<br />
</code-php><br />
<br />
Также, для отправки почты в формате HTML (а не plaintext) нужны PEAR-пакеты Mail и Net_SMTP:<br />
* {{cmd|pear install Mail; pear install Net_SMTP}}, либо<br />
* {{cmd|apt-get install php-mail php-net-smtp}} (Debian, Ubuntu).<br />
<br />
== Короткие URL ==<br />
<br />
Под «короткими URL» в вики понимаются адреса статей без <tt>index.php/</tt> и тем более без <tt>index.php?title=</tt>, например, такой URL — «короткий»: '''<tt>http://wiki.4intra.net/Mediawiki4Intranet</tt>'''.<br />
<br />
Настраиваются с помощью конфигурации вики + конфигурации веб-сервера.<br />
<br />
=== LocalSettings.php ===<br />
<br />
<code-php><br />
$wgUsePathInfo = true;<br />
$wgArticlePath = '/$1';<br />
</code-php><br />
<br />
Если вы при этом хотите использовать API (<tt>api.php</tt>), то нужно исхитриться следующим образом: {{cmd|1 = $wgUsePathInfo = substr($_SERVER['PHP_SELF'], 0, 10) == '/index.php';}}. Дело в том, что в MediaWiki принято обычно располагать Script Path в месте, отличном от Rewrite Path. То есть, скрипты класть в <tt>yourdomain.com/w/</tt> (index.php, api.php и т. п.), а путь для статей делать <tt>yourdomain.com/wiki/</tt>. И API рассчитывает на это, и в итоге переданное значение параметра <tt>title=</tt> в случае равенства путей заменяется на «api.php», что мешает нормально использовать API.<br />
<br />
=== nginx + php-fpm ===<br />
<br />
<pre><br />
root /path/to/wiki;<br />
location ~ /\.svn\/|\.bzr\/|\.hg\/|\.git\// {<br />
deny all;<br />
}<br />
location / {<br />
index index.php;<br />
try_files $uri @index;<br />
}<br />
location ~ \.php$ {<br />
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;<br />
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;<br />
fastcgi_param PATH_INFO $fastcgi_path_info;<br />
include fastcgi_params;<br />
}<br />
location @index {<br />
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;<br />
fastcgi_param SCRIPT_FILENAME $document_root/index.php;<br />
fastcgi_param PATH_INFO $fastcgi_path_info;<br />
include fastcgi_params;<br />
}<br />
</pre><br />
<br />
=== Apache 2 ===<br />
<br />
Через директивы mod_rewrite:<br />
<br />
<pre><br />
RewriteCond %{THE_REQUEST} ^\S+\s*/*index.php/<br />
RewriteRule ^index.php/(.*)$ /$1 [R=301,L,NE]<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d<br />
RewriteRule ^(.*)$ index.php?title=$1 [L,B,QSA]<br />
</pre><br />
<br />
Всё относительно очевидно, но есть нюансы:<br />
* В последней строчке обязательно писать именно <tt>index.php?title=$1</tt>, а не <tt>index.php/$1</tt>, так как во втором случае при использовании [B] подстраницы (страницы с / в названии) становятся недоступны.<br />
* Флаг [B] в последней строчке важен. Ибо без [B] mod_rewrite при переписи URL разэкранирует и не экранирует обратно спецсимволы (все, кроме латинских букв и цифр), из-за чего статьи с названиями, содержащими процент (%), становятся недоступны, потому что % в URL-кодировке — спецсимвол, и обязательно должен быть заменён на %25.<br />
* Флаг [QSA] тоже нужен, ибо без него к ?title=$1 не дописываются остальные параметры URL.<br />
* Первые две строчки нужны, чтобы с адресов, содержащих в себе <tt>index.php/</tt>, перенаправить пользователя на «короткие» — это убирает дублирование страниц, которое не любят поисковики.<br />
<br />
== Sphinx-поиск по вики ==<br />
<br />
Во-первых, нужно установить [http://sphinxsearch.com/ Sphinx].<br />
<br />
Mediawiki4Intranet использует «realtime» индексы Sphinx, то есть, обновляемые индексы. Ответственное расширение - [[SphinxSearchEngine]]. Для конфигурирования есть авто-конфигуратор <tt>configs/maintenance/configure-sphinx.php</tt>. Использовать так:<br />
<br />
* Создаём рядом с ним файл <tt>sphinx.wikis.php</tt>, в который прописываем что-то вроде:<br />
<code-php><br />
$wikis = array('HOST' => array(<br />
array(<br />
'name' => 'wiki', // имя индекса - должны быть разные для сожительствующих в одном sphinx'е вик<br />
'user' => '', // имя пользователя БД<br />
'pass' => '', // пароль к БД<br />
'db' => '', // имя БД<br />
),<br />
));<br />
</code-php><br />
* Вызываем <tt>php configure-sphinx.php --hostname HOST --style rt</tt>. Под UNIX вместо HOST можно использовать имя из <tt>/etc/hostname</tt>, и тогда можно будет держать один конфиг на несколько серверов, и вызывать без опции <tt>--hostname</tt>.<br />
* Будет создан файл '''<tt>sphinx.conf</tt>''', который нужно скормить Sphinx’у — под UNIX это обычно означает положить его в <tt>/etc/sphinxsearch/</tt>.<br />
* Если конфигуратор предложит инициализировать какие-то индексы и выведет для этого команды — делайте, что говорит.<br />
<br />
После чего прописываем в <tt>LocalSettings.php</tt> (раскомментируйте и подставьте адрес и порт, если у вас он в итоге отличается):<br />
<br />
<code-php><br />
require_once "$IP/extensions/SphinxSearch/SphinxSearch.php";<br />
$wgSphinxQL_index = 'wiki';<br />
//$wgSphinxQL_host = '';<br />
//$wgSphinxQL_port = '/var/run/searchd.sock'; // UNIX сокет, либо номер TCP-порта SphinxQL<br />
</code-php><br />
<br />
{{Warning}} На самом деле старые версии документов при обновлениях в индексе остаются, просто прописываются в «Kill-List» — список ID устаревших документов, которые удаляются из результатов поиска. Поэтому при большом количестве обновлений страниц могут пойти тормоза. И хотя сфинкс ''очень быстрый'' и тормоза пойдут не скоро, это всё-таки может случиться. Поэтому время от времени полезно делать оптимизацию индекса, подсоединяясь к Sphinx MySQL-клиентом и отправляя ему SQL-запрос '''OPTIMIZE INDEX index_name'''.<br />
<br />
=== [[TikaMW]] ===<br />
<br />
[http://tika.apache.org/ Apache Tika] - библиотека, позволяющая извлекать текст из бинарных файлов (pdf, офисных и т.п). Она используется для индексации содержимого загруженных файлов.<br />
* Брать тут: http://code.google.com/p/mediawiki4intranet/downloads/detail?name=tika-app-1.2-fix-TIKA709-TIKA964.jar<br />
* Или тут: http://wiki.4intra.net/public/tika-app-1.2-fix-TIKA709-TIKA964.jar<br />
<br />
Тику нужно прописать в автозапуск на сервере как-то так:<br />
<br />
<pre>java -jar tika-app-1.2-fix-TIKA709-TIKA964.jar -p 127.0.0.1:8072 -t -eutf-8</pre><br />
<br />
Более подробная информация в статье расширения: [[TikaMW]].<br />
<br />
== Антиспам для публичных Wiki ==<br />
<br />
В публичных Wiki имеют свойство заводиться спамеры, потому что можно легко зарегистрироваться и создать статью.<br />
<br />
Поэтому если ваша Wiki «смотрит» в Интернет и не закрыта от него ПОЛНОСТЬЮ (правами, например, или по IP, или базовой авторизацией), используйте наш конфиг <tt>ExternalServerSettings.php</tt>. В нём изначально включены [[ConfirmEdit]] и [[WikiKCaptcha]], а также прописан 30-дневный срок жизни Cookie и необходимость подтверждения e-mail адреса перед редактированием.<br />
<br />
…И ещё один нюанс — спамеры любят регистрироваться и сразу создавать статьи, поэтому можно запретить создавать статьи после регистрации на какой-то период времени (в тяжёлых случаях можно, например, на 4 суток):<br />
<br />
<code-php><br />
// Время, в течение которого запрещено создавать статьи (например, 4 суток * 86400 секунд в сутках)<br />
$wgAutoConfirmAge = 86400 * 4;<br />
</code-php><br />
<br />
== OpenID ==<br />
<br />
В MediaWiki4Intranet есть поддержка OpenID, хотя и глючная, как и вообще любая реализация OpenID. Это не наша вина, и даже не вина авторов [[mediawikiwiki:Extension:OpenID|расширения OpenID]] — виноваты здесь авторы библиотеки [http://www.janrain.com/openid-enabled OpenID для PHP].<br />
<br />
Чтобы включить её, нужно прописать следующее в <tt>LocalSettings.php</tt>:<br />
<code-php><br />
require_once("$IP/extensions/OpenID/OpenID.setup.php");<br />
</code-php></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Mediawiki4Intranet&diff=7733
Mediawiki4Intranet
2016-10-05T12:18:05Z
<p>VitaliyFilippov: </p>
<hr />
<div>[[en:Mediawiki4Intranet/en]]<br />
[http://mediawiki.org/ MediaWiki] — популярная [[WikiWiki|«вики»-система]], написанная на PHP и изначально создававшаяся в качестве «движка» [http://wikipedia.org/ Википедии]. Отличается отличной расширяемостью — существует более 1700 расширений к ней.<br />
<br />
<big>'''Mediawiki4Intranet'''</big> — сборка MediaWiki, содержащая в себе довольно большой набор расширений, полезных для внутрикорпоративной среды и, что очень важно, исправленных и «подруженных» между собой — большая часть ошибок, возникающих при интеграции, исправлена.<br />
<br />
Об установке см. [[#Установка]].<br />
<br />
= Содержимое =<br />
<br />
Сборка состоит из:<br />
* Доработанного ядра MediaWiki (оригинал + набор патчей).<br />
* Расширений MediaWiki:<br />
** Оригинальных, то есть, нетронутых.<br />
** Доработанных незначительно, в виде «оригинал + набор патчей» для каждого.<br />
** Форкнутых, то есть, доработанных значительно, в простом виде гитхаб-репозитория.<br />
** Новых, созданных нами.<br />
* Скрипта установки «[[repo.php]]».<br />
* Нескольких готовых конфигураций типа <tt>LocalSettings.php</tt> для быстрой установки.<br />
* Нескольких дополнительных утилит обслуживания.<br />
<br />
Лицензия на сборку — GNU GPLv3 или новее. Почему? Потому, что:<br />
* MediaWiki и большинство расширений распространяются под GPLv2+.<br />
* Часть расширений — под Permissive лицензиями.<br />
* Часть расширений — под GPLv3+.<br />
Соответственно, на сборку целиком распространяется наиболее жёсткая из этих свободных лицензий, а именно, GPLv3.<br />
<br />
== MediaWiki ==<br />
<br />
Код доработанного ядра и расширений MediaWiki, а также расширений, созданных нами, живёт на Github у организации «mediawiki4intranet»: https://github.com/mediawiki4intranet/. Там есть репозиторий с ядром MediaWiki, репозиторий с конфигурациями и скриптами деплоя и обслуживания, а также по репозиторию на каждое расширение и тему оформления MediaWiki.<br />
<br />
Код оригинальной MediaWiki, кстати, раньше жил в Subversion, а теперь живёт в [[rupedia:Git]]-репозиториях Wikimedia, по адресам вида:<br />
* Ядро: https://gerrit.wikimedia.org/r/gitweb?p=mediawiki/core.git<br />
* Расширение {{red|XXX}}: <nowiki>https://</nowiki>gerrit.wikimedia.org/r/gitweb?p=mediawiki/extensions/{{red|XXX}}.git<br />
<br />
Версия Mediawiki4Intranet несколько отстаёт от наиболее свежей стабильной, ибо внешние различия между версиями MediaWiki не так уж и велики, но при этом в новых могут вылезать баги (вроде [https://bugzilla.wikimedia.org/show_bug.cgi?id=37209 Bug 37209]), и на обновление всех доработок сборки приходится тратить некоторое время.<br />
<br />
Историй версий MediaWiki в основе Mediawiki4Intranet:<br />
* 2016-09-14 &rarr; текущая: '''1.26.4'''<br />
* 2016-07-04 &rarr; 2016-09-14: '''1.26.3'''<br />
* 2015-12-21 &rarr; 2016-07-04: '''1.26.2'''<br />
* 2015-10-15 &rarr; 2015-12-21: '''1.26 beta'''.<br />
* 2014-06-03 &rarr; 2015-10-15: '''1.21.10'''.<br />
* 2014-01-31 &rarr; 2014-06-03: '''1.21.5'''.<br />
* 2014-01-14 &rarr; 2014-01-31: '''1.21.3'''.<br />
* 2012-11-20 &rarr; 2014-01-14: '''1.18.5'''.<br />
* 2012-02-22 &rarr; 2012-11-20: '''1.18.1'''.<br />
* 2011-02-08 &rarr; 2012-02-22: '''1.16.2'''.<br />
* 2010-10-09 &rarr; 2011-02-08: '''1.14.1'''.<br />
* &rarr; 2010-10-09: '''1.13.1''' (в репозиториях отсутствует).<br />
<br />
== Патчи ==<br />
<br />
В виде патчей оформляются либо мелкие доработки расширений, либо любые доработки ядра MediaWiki. Сами патчи хранятся в Git-репозитории в виде обычных коммитов, организованных в серию, по принципу 1 коммит = 1 патч.<br />
<br />
{{warning}} При внесении изменений в уже существующий патч вместо добавления новых коммитов происходит {{red|переписывание истории}}! Это приводит к некоторым неудобствам при обновлении веток (нужно руками делать git reset), но зато, по крайней мере, каждый патч достаточно легко выделить и отправить авторам.<br />
<br />
Описание всех патчей, входящих в сборку MediaWiki4Intranet, читайте на странице: [[Mediawiki4Intranet/Патчи]].<br />
<br />
== Расширения ==<br />
<br />
Отличная расширяемость без использования патчей — важнейшая фишка MediaWiki. Расширения используют заранее заданные в коде точки интеграции («Hooks») и добавляют в MediaWiki новый функционал без необходимости вносить изменения в ядро.<br />
<br />
Описание всех расширений, входящих в сборку MediaWiki4Intranet, читайте на странице: [[Mediawiki4Intranet/Расширения]].<br />
<br />
== Список изменений ==<br />
<br />
Изменения в версии Mediawiki4Intranet 1.26 (по сравнению с 1.21): [[Mediawiki4Intranet/1.26]]<br />
<br />
= Установка =<br />
<br />
== Установка через Docker ==<br />
<br />
Простейший способ установить Mediawiki4Intranet — использовать [https://www.docker.com/ Docker]. Наш репозиторий с образом Docker:<br />
<br />
https://github.com/mediawiki4intranet/docker<br />
<br />
Чтобы установить Mediawiki4Intranet через Docker, установите себе в систему Docker, склонируйте данный репозиторий, зайдите в склонированную директорию и запустите команду:<br />
<br />
<pre><br />
docker build -t mediawiki4intranet .<br />
</pre><br />
<br />
Это соберёт образ системы Mediawiki4Intranet. Чтобы запустить на основе этого образа контейнер, запустите:<br />
<br />
<pre><br />
docker run --name mw4i -p 8077:80 -v /home/wiki4intranet/data -t -d mediawiki4intranet<br />
</pre><br />
<br />
После чего откройте в браузере адрес http://localhost:8077 и заходите в wiki с логином-паролем WikiSysop/MediaWiki4Intranet.<br />
<br />
{{Warning}} В Docker образе не сконфигурирована отправка почты, так как она требует либо настроенного MTA, либо SMTP подключения, а это зависит от окружения, в котором вы запускаете контейнер.<br />
<br />
=== Сборка с VisualEditor ===<br />
<br />
В репозитории есть два Dockerfile'а: базовый без VisualEditor и отдельный с оным. Соответственно, чтобы использовать сборку с VisualEditor, вместо одной команды build нужно запустить две:<br />
<br />
<pre><br />
docker build -t mediawiki4intranet .<br />
docker build -t mediawiki4intranet/ve -f ve.Dockerfile .<br />
</pre><br />
<br />
После чего запускать полученный образ аналогично:<br />
<br />
<pre><br />
docker run --name mw4i -p 8077:80 -v /home/wiki4intranet/data -t -d mediawiki4intranet/ve<br />
</pre><br />
<br />
== Ручная установка ==<br />
<br />
=== Скачать код ===<br />
<br />
Варианты:<br />
<br />
# Можно скачать [http://wiki.4intra.net/public/mediawiki4intranet.7z архив с исходниками] (примерно 25 МБ)<br />
# Можно использовать [[repo.php]] для автоматизированного скачивания с помощью системы контроля версий [[rupedia:Git|Git]] (что, разумеется, требует установленного git-клиента):<br />
#: {{cmd|git clone https://github.com/mediawiki4intranet/configs mediawiki/configs}}<br />
#: {{cmd|cd mediawiki/configs}}<br />
#: {{cmd|php repo.php install mediawiki4intranet}}<br />
<br />
=== Установить зависимости ===<br />
<br />
==== В Debian ====<br />
<br />
В Debian почти всё (кроме UMLGraph и [[#TikaMW|Tika]]) ставится 1 командой:<br />
<br />
<pre><br />
apt-get install zip unzip poppler-utils \<br />
netpbm librsvg2-bin djvulibre-bin texlive-base texlive-extra-utils ffmpeg \<br />
dia graphviz gnuplot plotutils umlet default-jre diffutils imagemagick sphinxsearch \<br />
nginx php7.0-fpm php7.0-cli php7.0-json php7.0-opcache php7.0-mbstring php7.0-curl php7.0-gd \<br />
php7.0-intl php7.0-mysql php7.0-xml php7.0-zip php-imagick php-apcu php-apcu-bc php-mail php-net-smtp<br />
</pre><br />
<br />
UMLGraph, если хочется, нужно скачать [http://www.umlgraph.org/ с сайта] и подложить в системные пути.<br />
<br />
Apache Tika — скачать отсюда: http://wiki.4intra.net/public/tika-app-1.2-fix-TIKA709-TIKA964.jar и добавить в /etc/rc.local:<br />
<br />
<pre><br />
start-stop-daemon -S -b --pidfile /var/run/tika.pid -m -x /usr/bin/java -- -jar /root/tika-app.jar -p 127.0.0.1:8072 -t -eutf-8<br />
</pre><br />
<br />
==== В других ОС ====<br />
<br />
Минимальные требования:<br />
* PHP >= 5.3. Можно PHP 7.<br />
* Веб-сервер и сервер приложений PHP. Например, [http://nginx.ru/ nginx] + [http://php-fpm.org/ php_fpm] или [http://httpd.apache.org/ Apache]. Другие варианты (IIS?) тоже, вероятно, поддерживаются.<br />
* СУБД MySQL или MariaDB >= 5.1, либо PostgreSQL >= 9.0.<br />
* Желателен Debian/Ubuntu Linux. Сборка, разумеется, будет работать под любым Linux’ом или ****BSD (и даже под виндой с некоторыми оговорками), но установить весь необходимый софт проще всего в Debian.<br />
<br />
Также нужны следующие расширения PHP:<br />
* '''php-mysql''' или '''php-pgsql'''<br />
* Обязательно наличие '''DOM'''. Расширение базовое и обычно встроено в PHP, но в дурацких RPM-дистрибутивах выделено в отдельный пакет типа '''php-dom'''.<br />
* '''php-gd''' для обработки картинок.<br />
* '''php-curl''' для загрузки файлов по URL.<br />
* Любой кэшер, например '''php-opcache''', '''php-apc''' или '''php-xcache'''<br />
* Для PHP < 5.6 — [[php5-fss]]. Для 5.6 или 7 — не нужно.<br />
* Для отправки почты — PEAR-пакеты Mail и Net_SMTP, см. подробнее [[#Отправка E-mail]].<br />
<br />
Требования конфигурации PHP (директивы php.ini):<br />
* <tt>post_max_size</tt>, <tt>upload_max_filesize</tt> — в зависимости от того, какого размера файлы планируете загружать<br />
* В боевой конфигурации: <tt>error_reporting = E_ALL & ~E_NOTICE</tt><br />
* Если PHP < 5.4: <tt>magic_quotes_gpc = Off, register_globals = Off</tt><br />
<br />
Дополнительно нужны сторонние программы — их список внушительный, но почти всё обычно ставится менеджером пакетов:<br />
* Импорт-экспорт в ZIP-архивах: утилиты [http://gnuwin32.sourceforge.net/packages/zip.htm zip] и [http://gnuwin32.sourceforge.net/packages/unzip.htm unzip] (windows). Под UNIX обычно либо уже есть, либо ставится из пакетов.<br />
* PDF: [http://pages.cs.wisc.edu/~ghost/ GhostScript], [http://poppler.freedesktop.org/ Poppler] — бывший [http://www.foolabs.com/xpdf/ Xpdf] ([http://gnuwin32.sourceforge.net/packages/xpdf.htm windows)]<br />
* DJVU: [http://djvu.sourceforge.net/ djvulibre], [http://netpbm.sourceforge.net/ netpbm] ([http://gnuwin32.sourceforge.net/packages/netpbm.htm windows]).<br />
* LaTeX (формулы &lt;m>…&lt;/m>): любой дистрибутив TeX’а, например, в Debian обычно [http://www.tug.org/texlive/debian.html TeXLive], под Windows — [http://miktex.org/ MiKTeX]; утилита [http://dvisvgm.sourceforge.net/ dvisvgm].<br />
* [http://dia-installer.de/ Dia]<br />
* FLV/MP4-видео: [http://www.ffmpeg.org/ ffmpeg] ([http://ffmpeg.arrozcru.org/wiki/index.php?title=Main_Page для windows]).<br />
* [http://www.imagemagick.org/ ImageMagick]<br />
* [http://www.graphviz.org/ Graphviz] желателен версии не меньше 2.27, так как в предыдущих есть различные мелкие баги.<br />
* [http://www.gnuplot.info/ GNUPlot].<br />
* [http://www.umlgraph.org/ UMLGraph].<br />
* [http://www.umlet.com/ UMLet].<br />
* UMLGraph, UMLet, PlantUML требуют наличия [http://java.sun.com Java].<br />
* Sphinx-поиск по вики: [http://sphinxsearch.com/ Sphinx], [[#TikaMW|Tika]]<br />
<br />
=== Создать папку images и пустую БД ===<br />
<br />
В директории для установки нужно создать папку <tt>images</tt>, читаемую и записываемую веб-сервером.<br />
<br />
Также нужно создать для вики MySQL базу данных и пользователя с полным доступом к ней.<br />
<br />
=== Инициализировать БД ===<br />
<br />
Сначала нужно создать структуру БД для «голой» MediaWiki:<br />
<br />
# Либо просто накатить дамп <tt>maintenance/tables.sql</tt>:<br />
#* ''Сначала'' создать минимальный конфиг MediaWiki4Intranet (LocalSettings.php, см. ниже)<br />
#* Выполнить команду {{cmd|php maintenance/patchSql.php maintenance/tables.sql}} из директории установки вики.<br />
# Либо запустить вики-установщик из папки <tt>mw-config</tt> — плюс в том, что он ещё проводит дополнительные проверки версии PHP, расширений и т. п.:<br />
#* Зайти на <tt>http://server/wiki/mw-config/</tt>, ответить на вопросы, исправить недоразумения (если таковые возникнут), выбрать базу MySQL, InnoDB, 4.1/5.0 utf8 binary. Установщик создаст пустую БД и конфиг.<br />
#* ''Удалить'' конфиг, сгенерированный установщиком — в нём куча опций, которые все уже прописаны в правильные значения в конфигах MediaWiki4Intranet.<br />
#* ''Потом'' создать минимальный конфиг MediaWiki4Intranet (см. ниже)<br />
<br />
Потом нужно дополнить созданную БД таблицами расширений. Для этого нужно:<br />
* Запустить {{cmd|php maintenance/update.php}} из директории установки вики.<br />
<br />
=== Создать минимальный конфиг ===<br />
<br />
Содержимое минимального конфига (LocalSettings.php):<br />
<br />
<code-php><br />
<?php<br />
require_once 'configs/ServerSettings.php'; # это под UNIX, либо BaseSettings.php для винды<br />
$wgDBname = 'wiki'; # имя БД<br />
$wgDBuser = ''; # логин и пароль с полным доступом к этой БД<br />
$wgDBpassword = '';<br />
$wgDBadminuser = $wgDBuser;<br />
$wgDBadminpassword = $wgDBpassword;<br />
$wgScriptPath = '/wiki';<br />
</code-php><br />
<br />
== Старый Windows-образ ==<br />
<br />
Для того, чтобы быстро попробовать '''MediaWiki4Intranet''' на локальной Windows-машине, также есть '''старая''' Windows-сборка. Фичи там есть не все, обновляться она скорее всего больше не будет (на данный момент версия {{/WindowsBundleVersion}}), настроена кривовато (ибо Windows) и не очень безопасно (ибо XAMPP). Раньше это был простейший способ попробовать Mediawiki4Intranet. Подробнее: [[Windows-сборка Mediawiki4Intranet]].<br />
<br />
{{Box|<br />
{{Warning}} Под Windows не работает следующий функционал MediaWiki4Intranet:<br />
* Отправка почты в формате HTML<br />
* По умолчанию отключён Sphinx-поиск<br />
* По умолчанию отключена поддержка PDF и Djvu<br />
* По умолчанию отключено слияние при конфликтах редактирования — чтобы включить, нужно установить Windows-версию утилиты diff3, и прописать в LocalSettings.php:<br />
<code-php>$wgDiff3 = 'путь к diff3';</code-php><br />
}}<br />
<br />
= Дополнительная настройка =<br />
<br />
== Отправка E-mail ==<br />
<br />
Для отправки электронной почты нужна рабочая локальная команда sendmail.<br />
<br />
По умолчанию она включается только под UNIX’ами, потому что под виндой sendmail’а обычно нет. Однако когда включается, нужно поменять две следующие переменные в <tt>LocalSettings.php</tt>, иначе почта из вики так и будет приходить от Стаса Фомина:<br />
<br />
<code-php><br />
$wgEmergencyContact = 'admin@your.wiki'; # e-mail<br />
$wgPasswordSender = $wgEmergencyContact;<br />
</code-php><br />
<br />
Также, для отправки почты в формате HTML (а не plaintext) нужны PEAR-пакеты Mail и Net_SMTP:<br />
* {{cmd|pear install Mail; pear install Net_SMTP}}, либо<br />
* {{cmd|apt-get install php-mail php-net-smtp}} (Debian, Ubuntu).<br />
<br />
== Короткие URL ==<br />
<br />
Под «короткими URL» в вики понимаются адреса статей без <tt>index.php/</tt> и тем более без <tt>index.php?title=</tt>, например, такой URL — «короткий»: '''<tt>http://wiki.4intra.net/Mediawiki4Intranet</tt>'''.<br />
<br />
Настраиваются с помощью конфигурации вики + конфигурации веб-сервера.<br />
<br />
=== LocalSettings.php ===<br />
<br />
<code-php><br />
$wgUsePathInfo = true;<br />
$wgArticlePath = '/$1';<br />
</code-php><br />
<br />
Если вы при этом хотите использовать API (<tt>api.php</tt>), то нужно исхитриться следующим образом: {{cmd|1 = $wgUsePathInfo = substr($_SERVER['PHP_SELF'], 0, 10) == '/index.php';}}. Дело в том, что в MediaWiki принято обычно располагать Script Path в месте, отличном от Rewrite Path. То есть, скрипты класть в <tt>yourdomain.com/w/</tt> (index.php, api.php и т. п.), а путь для статей делать <tt>yourdomain.com/wiki/</tt>. И API рассчитывает на это, и в итоге переданное значение параметра <tt>title=</tt> в случае равенства путей заменяется на «api.php», что мешает нормально использовать API.<br />
<br />
=== nginx + php-fpm ===<br />
<br />
<pre><br />
root /path/to/wiki;<br />
location ~ /\.svn\/|\.bzr\/|\.hg\/|\.git\// {<br />
deny all;<br />
}<br />
location / {<br />
index index.php;<br />
try_files $uri @index;<br />
}<br />
location ~ \.php$ {<br />
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;<br />
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;<br />
fastcgi_param PATH_INFO $fastcgi_path_info;<br />
include fastcgi_params;<br />
}<br />
location @index {<br />
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;<br />
fastcgi_param SCRIPT_FILENAME $document_root/index.php;<br />
fastcgi_param PATH_INFO $fastcgi_path_info;<br />
include fastcgi_params;<br />
}<br />
</pre><br />
<br />
=== Apache 2 ===<br />
<br />
Через директивы mod_rewrite:<br />
<br />
<pre><br />
RewriteCond %{THE_REQUEST} ^\S+\s*/*index.php/<br />
RewriteRule ^index.php/(.*)$ /$1 [R=301,L,NE]<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d<br />
RewriteRule ^(.*)$ index.php?title=$1 [L,B,QSA]<br />
</pre><br />
<br />
Всё относительно очевидно, но есть нюансы:<br />
* В последней строчке обязательно писать именно <tt>index.php?title=$1</tt>, а не <tt>index.php/$1</tt>, так как во втором случае при использовании [B] подстраницы (страницы с / в названии) становятся недоступны.<br />
* Флаг [B] в последней строчке важен. Ибо без [B] mod_rewrite при переписи URL разэкранирует и не экранирует обратно спецсимволы (все, кроме латинских букв и цифр), из-за чего статьи с названиями, содержащими процент (%), становятся недоступны, потому что % в URL-кодировке — спецсимвол, и обязательно должен быть заменён на %25.<br />
* Флаг [QSA] тоже нужен, ибо без него к ?title=$1 не дописываются остальные параметры URL.<br />
* Первые две строчки нужны, чтобы с адресов, содержащих в себе <tt>index.php/</tt>, перенаправить пользователя на «короткие» — это убирает дублирование страниц, которое не любят поисковики.<br />
<br />
== Sphinx-поиск по вики ==<br />
<br />
Во-первых, нужно установить [http://sphinxsearch.com/ Sphinx].<br />
<br />
Mediawiki4Intranet использует «realtime» индексы Sphinx, то есть, обновляемые индексы. Ответственное расширение - [[SphinxSearchEngine]]. Для конфигурирования есть авто-конфигуратор <tt>configs/maintenance/configure-sphinx.php</tt>. Использовать так:<br />
<br />
* Создаём рядом с ним файл <tt>sphinx.wikis.php</tt>, в который прописываем что-то вроде:<br />
<code-php><br />
$wikis = array('HOST' => array(<br />
array(<br />
'name' => 'wiki', // имя индекса - должны быть разные для сожительствующих в одном sphinx'е вик<br />
'user' => '', // имя пользователя БД<br />
'pass' => '', // пароль к БД<br />
'db' => '', // имя БД<br />
),<br />
));<br />
</code-php><br />
* Вызываем <tt>php configure-sphinx.php --hostname HOST --style rt</tt>. Под UNIX вместо HOST можно использовать имя из <tt>/etc/hostname</tt>, и тогда можно будет держать один конфиг на несколько серверов, и вызывать без опции <tt>--hostname</tt>.<br />
* Будет создан файл '''<tt>sphinx.conf</tt>''', который нужно скормить Sphinx’у — под UNIX это обычно означает положить его в <tt>/etc/sphinxsearch/</tt>.<br />
* Если конфигуратор предложит инициализировать какие-то индексы и выведет для этого команды — делайте, что говорит.<br />
<br />
После чего прописываем в <tt>LocalSettings.php</tt> (раскомментируйте и подставьте адрес и порт, если у вас он в итоге отличается):<br />
<br />
<code-php><br />
require_once "$IP/extensions/SphinxSearch/SphinxSearch.php";<br />
$wgSphinxQL_index = 'wiki';<br />
//$wgSphinxQL_host = '';<br />
//$wgSphinxQL_port = '/var/run/searchd.sock'; // UNIX сокет, либо номер TCP-порта SphinxQL<br />
</code-php><br />
<br />
{{Warning}} На самом деле старые версии документов при обновлениях в индексе остаются, просто прописываются в «Kill-List» — список ID устаревших документов, которые удаляются из результатов поиска. Поэтому при большом количестве обновлений страниц могут пойти тормоза. И хотя сфинкс ''очень быстрый'' и тормоза пойдут не скоро, это всё-таки может случиться. Поэтому время от времени полезно делать оптимизацию индекса, подсоединяясь к Sphinx MySQL-клиентом и отправляя ему SQL-запрос '''OPTIMIZE INDEX index_name'''.<br />
<br />
=== [[TikaMW]] ===<br />
<br />
[http://tika.apache.org/ Apache Tika] - библиотека, позволяющая извлекать текст из бинарных файлов (pdf, офисных и т.п). Она используется для индексации содержимого загруженных файлов.<br />
* Брать тут: http://code.google.com/p/mediawiki4intranet/downloads/detail?name=tika-app-1.2-fix-TIKA709-TIKA964.jar<br />
* Или тут: http://wiki.4intra.net/public/tika-app-1.2-fix-TIKA709-TIKA964.jar<br />
<br />
Тику нужно прописать в автозапуск на сервере как-то так:<br />
<br />
<pre>java -jar tika-app-1.2-fix-TIKA709-TIKA964.jar -p 127.0.0.1:8072 -t -eutf-8</pre><br />
<br />
Более подробная информация в статье расширения: [[TikaMW]].<br />
<br />
== Антиспам для публичных Wiki ==<br />
<br />
В публичных Wiki имеют свойство заводиться спамеры, потому что можно легко зарегистрироваться и создать статью.<br />
<br />
Поэтому если ваша Wiki «смотрит» в Интернет и не закрыта от него ПОЛНОСТЬЮ (правами, например, или по IP, или базовой авторизацией), используйте наш конфиг <tt>ExternalServerSettings.php</tt>. В нём изначально включены [[ConfirmEdit]] и [[WikiKCaptcha]], а также прописан 30-дневный срок жизни Cookie и необходимость подтверждения e-mail адреса перед редактированием.<br />
<br />
…И ещё один нюанс — спамеры любят регистрироваться и сразу создавать статьи, поэтому можно запретить создавать статьи после регистрации на какой-то период времени (в тяжёлых случаях можно, например, на 4 суток):<br />
<br />
<code-php><br />
// Время, в течение которого запрещено создавать статьи (например, 4 суток * 86400 секунд в сутках)<br />
$wgAutoConfirmAge = 86400 * 4;<br />
</code-php><br />
<br />
== OpenID ==<br />
<br />
В MediaWiki4Intranet есть поддержка OpenID, хотя и глючная, как и вообще любая реализация OpenID. Это не наша вина, и даже не вина авторов [[mediawikiwiki:Extension:OpenID|расширения OpenID]] — виноваты здесь авторы библиотеки [http://www.janrain.com/openid-enabled OpenID для PHP].<br />
<br />
Чтобы включить её, нужно прописать следующее в <tt>LocalSettings.php</tt>:<br />
<code-php><br />
require_once("$IP/extensions/OpenID/OpenID.setup.php");<br />
</code-php></div>
VitaliyFilippov
https://wiki.4intra.net/index.php?title=Mediawiki4Intranet/1.26&diff=7732
Mediawiki4Intranet/1.26
2016-10-04T10:32:27Z
<p>VitaliyFilippov: </p>
<hr />
<div>* Ядро обновлено до версии 1.26.4<br />
* Удалены патчи: detailed-badtitle (принят в апстрим), lcstore-accel-shared (некорректная реализация, сначала принят в апстрим, потом удалён), skins-in-subdirs (скины в 1.26 подключаются явно), а также исправления, более не нужные для нового ядра: fix-l10n, relative-inclusions-in-main, allow-moving-categories, fix-broken-upload-form, fix-ie-searchsuggest, do-not-cut-debug-sql, fix-cologneblue-print, remove-slow-messagecache-locking, parser-debug-doblocklevels<br />
* Добавлены патчи: search-rm-slashn (исправление опечатки), ymd-hms-date-format (был частью fix-l10n), unlock-session (отключение блокировки сессий), allow-scripted-svg-if-raw-html (разрешение скриптованных SVG, если разрешён голый HTML), fix-specialupload-charinsert (исправление работы CharInsert на странице загрузки файла), limit-thumb-names (ограничение длины имён thumbnail'ов, чтобы работал PdfHandler)<br />
* Изменены патчи: fix-vector-skin (перемещено в скин Vector), debug-categorized-specialrecentchanges (оставлена только новая фича), fix-head-and-editsection (заменён на fix-noeditsection), html-emails (заменён на функционал EnotifDiff)<br />
* Импорт/экспорт: исправлена работа консольных скриптов импорта/экспорта (maintenance/importDump.php и maintenance/dumpBackup.php), исправлена поддержка оригинального формата экспорта изображений MediaWiki (XML с содержимым файлов в Base64)<br />
* Cite, CharInsert, ConfirmEdit, Interwiki, PagedTiffHandler, ParserFunctions: переведены на оригинальную версию без наших изменений (в частности, в оригинальном Cite появились аналогичные нашим доработки)<br />
* Добавлен VisualEditor и необходимый ему сервис Parsoid (опционально, по умолчанию не включен)<br />
* SlimboxThumbs: исправлены баги в библиотеке slimbox (несовместимость с новым jquery, некорректное экранирование адресов)<br />
* PdfHandler: осуществлён переход с GhostScript на Poppler (pdftocairo) — производительность растеризации PDF улучшена на порядок, качество отрисовки шрифтов также сильно улучшено<br />
* SemanticMediaWiki: обновлено до 2.3, наши доработки перенесены и обновлены:<br />
** перенесены: оператор отрицания, оптимизатор запросов, поддержка прав доступа<br />
** добавлена поддержка цепочек свойств в выводе (?Prop1.Prop2) и в сортировке (sort = Prop1.Prop2)<br />
** удалены патчи: исправление некорректного выполнения коньюнкции дизьюнкций, отключение форсированных типов для свойств с названиями, равными названиям типов (баги исправлены в оригинальной версии), сброс кэша всех запросов при изменении любого свойства в вики (в оригинальной версии появилась фича QueryDependentLinksStore, отслеживающая конкретные зависимости запросов)<br />
** исправлены баги: некорректная обработка нескольких отрицаний в одной конъюнкции; ошибки SQL, возникающие при повторе частей запросов в определённых условиях (баги прошлой версии наших патчей); поддержка PostgreSQL была сломана; локализованные boolean’ы не распознавались с большой буквы (баги оригинала)<br />
* Добавлено расширение MsUpload: даёт возможность загрузки файлов прямо со страницы редактирования — выбором, drag&drop и даже вставкой из буфера обмена (наш патч)<br />
* Добавлены расширения Semantic Forms, Semantic Forms Inputs, Semantic Forms Select, Semantic Result Formats, Arrays, Loops<br />
* Добавлена корректная поддержка WikiEditor в Semantic Forms и Semantic Forms в CategoryTemplate<br />
* Добавлено расширение CategoryWatch (e-mail уведомления о добавлении страниц в категории)<br />
* Добавлено расширение AjaxLoader (асинхронно подгружаемые панельки)<br />
* Удалены скины: chick, simple (были совсем примитивные, неиспользуемые)<br />
* Удалены расширения: ErrorMail (логгирование ошибок теперь есть в ядре), EnotifDiff (перемещено в ядро в виде патчей), SphinxSearch, SpecialForm и Workflow (устаревшие и неиспользуемые), SWFUpload и SupaMW (массовая загрузка файлов и загрузка файлов из буфера обмена, заменены на MsUpload)<br />
* Обеспечена поддержка PostgreSQL во всех включённых расширениях<br />
* Все расширения обновлены до актуальных версий<br />
<br />
TODO:<br />
* Заменить UserMessage, скорее всего, на патч ядра (так как расширение — всё равно огромный костыль)<br />
* WhoIsWatching: Добавить возможность открытия списка наблюдающих пользователей через ввод имени страницы на спецстранице, а не только по ссылке из подвала<br />
* CustisScripts: Сделать уже загрузку wikEd пользовательской настройкой<br />
* AllowGetParamsInWikilinks: почистить код и/или заменить на что-то другое<br />
* Возможно, заменить DeleteBatch на Nuke<br />
* Вероятно, выпилить SimpleForms. Из него, однако, нужно сохранить функцию <nowiki>{{#request: }}</nowiki> (получение значения параметра URL), попутно сделав её более безопасной для использования в вики-тексте, а также добавить функцию, которая тоже возвращает значение параметра, но не отключает кэш парсера, а добавляет значение параметра в ключ кэша.<br />
* Добавить CKEditor и обеспечить его поддержку в Semantic Forms (не факт, код расширения CKEditor сильно устаревший)<br />
* Добавить MobileFrontend и обеспечить его поддержку во всех расширениях<br />
* В DocExport добавить аналогичный S5SlideShow хак для рендера изображений в полном размере<br />
* Можно добавить расширение "safe html", выводящее HTML-код с вырезанными javascript-ами и разрешающее вставку js только из пространства имён MediaWiki<br />
* Убрать запуск inkscape из MarkupBabel<br />
* Исправить отключение кэша парсера в PageSnapshots<br />
* Исправить показ CAPTCHA на странице входа</div>
VitaliyFilippov