Удобные bat-ники

Почти все манипуляции с папками и файлами я делаю в FAR’е. И несмотря на то, что «сложную» автоматизацию стараюсь делать с помощью WSH, старым добрым BAT-файлам всегда найдется место.

Обычно, для автоматизации некоторых часто повторяющихся операций, я создаю bat-файлы с именами, которые можно быстро набрать: qw.bat, qw1.bat и т.д. Разумеется, следует прописать путь к bat-файлам в PATH, ну, или положить их на «видное место», которое уже в PATH.

Вот примеры, которые я чаще всего использую:

qw1 – открываем в Проводнике папку, в которой находимся в FAR’е.

explorer .

qw {имя_файла} – открываем файл в notepad++ (частно приходится открывать неассоциированные с notepad++)

cd "C:\Program Files (x86)\Notepad++\" 
start notepad++.exe %1

qw2 – создаем в текущей папке папку с именем «ГГГГ-ММ-ЧЧ» (текущая дата)

set dirName=%date:~6,4%-%date:~3,2%-%date:~0,2%
mkdir %dirName%

Locallinks. Firefox and Chrome add-ons to open local and shared folders and files with explorer.

Если вы ведете разработку интранет-портала, возможно вам интересно включить в браузерах возможность открывать локальные (и windows shared)
папки в проводнике. И то же самое – с файлами. Было бы неплохо их не скачивать, а открывать по месту нахождения?

Когда у меня возникла такая задача – я нагуглил несколько расширений для Firefox и Chrome. Но ради интереса решил сделать свои.

Пока готово только для Firefox. Кода там совсем чуть-чуть, так что, если будете использовать, сами сможете проверить его на «зловредность» и «закладки».

Проект тут: http://github.com/kityan/locallinks

Ориентировано на Windows, поскольку для открытия папок и файлов используется обращение к проводнику.

Как скрыть TeX до обработки MathJax-ом?

Например, нужно скрывать TeX в элементах и показывать их только после обработки MathJax-ом. Пишем для элементов класс с “display: none” и убираем класс после обработки:

MathJax.Hub.Queue(["Typeset",MathJax.Hub], function(){$(".hideMathJax").removeClass('hideMathJax');});

А с помощью “skipStartupTypeset: true” в конфигурации предотвращаем автозапуск MathJax.

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<style>
		.hideMathJax {display: none;}
	</style>
	<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
	<script type="text/x-mathjax-config">
		MathJax.Hub.Config({
			skipStartupTypeset: true,  
			jax: ["input/TeX","output/HTML-CSS"], 
			extensions: ["tex2jax.js"], 
			tex2jax: {inlineMath: [["$","$"], ["\\(","\\)"]]}, 
			"HTML-CSS": {imageFont: null }, 
			messageStyle: "none", }); 
	</script>
	<script type="text/javascript"  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
	<script type="text/javascript">
		$(document).ready(function(){
			MathJax.Hub.Queue(["Typeset",MathJax.Hub], function(){$(".hideMathJax").removeClass('hideMathJax');});
		});
	</script>
</head>
<body>
	<div class="hideMathJax">$2\frac{1}{2}$</div>
</body>
</html>

Используем ExtendScript Toolkit

Есть в Adobe’овском CS такая замечательная штука как ExtendScript Toolkit. Если вы пользуетесь автоматизацией, например, в Photoshop, то скорее всего пишите Action’ы. Но есть и другой способ!

Для примера, небольшой код, который позволяет сделать пакетное масштабирование изображений таким образом, чтобы вписаться в максимальные значения ширины и высоты.

var sourceFolder = Folder.selectDialog("Укажите папку с исходными файлами");
if (sourceFolder)
{
    var destFolder = Folder.selectDialog("Укажите папку, в которую сохранить файлы.");
}

// если папки указаны, выполняем обработку. Если папка одна и та же - просим подтверждения.
if (destFolder && (sourceFolder.absoluteURI  != destFolder.absoluteURI || confirm ("Файлы в исходной папке будут перезаписаны!", true, "Внимание!")))
{
	// читаем перечень файлов (предполагаем, что у нас там PNG-файлы)
	var files = sourceFolder.getFiles();

	// идем по перечню
	for (var i = 0; i < files.length; i++)
	{
		var f = files[i];

		// проверяем, не является ли файл папкой. Здесь мы также можем проверять имя по маске
		if (f instanceof Folder)
		{
			continue; 
		}

		// читаем файл
		var doc = app.open (f);

		// масштабируем, ставим высоту 270 пикс.
		doc.resizeImage(null,UnitValue(270,"px"), null, ResampleMethod.BICUBIC);

		// проверям, какая стала ширина, если вылезает за 200 - масштабируем еще раз, но уже по ширине
		if (doc.width > 200)
		{
			doc.resizeImage(UnitValue(200,"px"), null, null, ResampleMethod.BICUBIC);  
		}

		// сохраняем PNG-файл
		var options = new PNGSaveOptions();
		var outputFile = new File(destFolder.absoluteURI + "/" + f.name);
		doc.saveAs(outputFile, options, false, Extension.LOWERCASE);
		doc.close();
	}
}

Что с ним делать? Сохранить в файле *.jsx и открыть. В открывшемся окне ExtendScript Toolkit выбрать в качестве целевого приложения Photoshop и запустить выполнение.

Удобно, не так ли?

Подробности: http://www.adobe.com/devnet/scripting.html

Верстка записи сложения/умножения столбиком

Приведенные ниже примеры помогут просто отобразить записи сложения и умножения в столбик. А сами примеры можно генерировать «на лету», например, c помощью JavaSсript у клиента или PHP на сервере.

TeX Результат (MathJax)
\begin{array}{r}
+ 
\begin{array}{r} 
1234\\ 
9343 \end{array}\\
\hline
\begin{array}{r} 
10577 
\end{array}
\end{array} 
\[\begin{array}{r}
+
\begin{array}{r}
1234\\
9343 \end{array}\\
\hline
\begin{array}{r}
10577
\end{array}
\end{array}
\]
\begin{array}{r}
- 
\begin{array}{r} 
34\\ 
1243 \end{array}\\
\hline
\begin{array}{r} 
-1209 
\end{array}
\end{array} 
\[\begin{array}{r}
-
\begin{array}{r}
34\\
1243 \end{array}\\
\hline
\begin{array}{r}
-1209
\end{array}
\end{array}
\]
\begin{array}{r}
\times
\begin{array}{r} 
\ 427\\ 
36 \end{array}\\
\hline
\begin{array}{r}
2562\\
1281\ \ \\
\end{array}\\
\hline
\begin{array}{r}
15372
\end{array} 
\end{array} 

\[
\begin{array}{r}
\times
\begin{array}{r}
\ 427\\
36 \end{array}\\
\hline
\begin{array}{r}
2562\\
1281\ \ \\
\end{array}\\
\hline
\begin{array}{r}
15372
\end{array}
\end{array}
\]

Морфана

Морфана — это свободная JavaScript-библиотека для отображения графических обозначений морфем. Подробности на официальном сайте: morfana.ru, а также на Хабре.

А вот несколько примеров:

HTML-разметка Результат
<span data-morfana-markup="ko:1-4;ok:0;">пять</span>
пять
<span data-morfana-markup="ko:1-5;ok:6-8">лебеде́й</span>
лебеде́й
<span data-morfana-markup="ko:1-4;ko:6-8;ok:0;">Иван-чай</span>
Иван-чай
<span data-morfana-markup="pr:1-2;ko:3-6;su:7-9;ok:10-11;">излюбленный</span>
излюбленный