2

О пользе блогов для блогописателей и о будущем

На прошлой неделе выяснилось, что срочно нужна копия отчета, который я даже не начинал писать. Я никогда не считал себя графоманом, поскольку перспектива излияния объемного текста за заданное время приводит меня в ужас. Вчера начал потихоньку что-то кропать ручкой на листочках :)))) Удивительное дело - до того как я начал вести блог, я из себя выдавливал текст по капле (ну, практически, по букве). Счас стало гораздо легче - похоже, ведение блога стимулирует в человеке какие-то литературные навыки (если можно так выразиться :))) ) И посему, я надеюсь, что напишу-таки этот долбаный отчет к концу недели.
Теперь немного о будущем. Очень надеюсь, что наконец-то напишу о моих мучениях с Java Reflection API, когда я пытался проанализировать внешний по отношению к моей программе класс(т.е. этот класс не являлся частью моей программы). Как оказалось, это непросто, но вполне решаемо. Причем решил я эту проблему очень "криво", совсем не так, как это нужно было делать (как было нужно, я выяснил совершенно "нечаянно" и гораздо позже).
Наверняка те, кто иногда ко мне заходит, заметили что я начал выдавать странные длинные посты, вызывающие законный вопрос - "а на хрена это надо??" (я имею в виду мои последние творения о SmartPointers и исключениях). Вот хочу еще написать и о том, зачем все это мне надо. Глядишь, и еще кто-нибудь заинтересуется.
6

Финансовый аспект фотопечати в домашних условиях (Личный опыт)

Недели на две, а то и на месяц меня лишили фотоаппарат, а это значит, что появилось время обработать и напечатать отснятый материал.
Если с обработкой все ясно, нужно наличие компьютера, графического редактора и желание заниматься обработкой фото, то с печатью дело обстоит иначе. Конечно, есть огромное число фотосалонов, где быстро и относительно недорого напечатают любое количество снимков. Но это только на первый, неискушенный взгляд.
У меня лежит компашка с фотоматериалом с нашей свадьбы, на ней записано порядка 900 кадров, около 700 из них хочу отпечатать. В среднем цена по Казани - 5 рублей за один отпечаток 10х15. Значит, я отдам около 3500 рублей. Пусть даже с 10% скидкой это составит 3150 рублей. отдать такую сумму в раз, тем паче не зная, что я получу на выходе, мне жалко. Сколько бы не уверял меня сотрудник салона, что будет применена ручная коррекция к каждому кадру, не поверю: за час-два 700 кадров ручками не обработаешь КАЧЕСТВЕННО, а именно за это время обещали выполнить мой заказ. Вспоминается по такому поводу анекдот о том, как в Китае снимают цветное кино.
Думаю, каждый, кто периодически отдает в печать цифровые фото, не раз, получив отпечатки, оказывался разочарован в результате.
Вот и я, несколько раз попав в подобную ситуацию, пришла к выводу, что фотопроцесс нужно контролировать самой от начала и до конца. И пару лет назад приобрела бюджетный струйный фотопринтер HP DeskJet 4163.
Вероятно мне возразят, мол, печатать дома на своем принтере дороже, на одних картриджах разоришься. Действительно набор картриджей для фотопечати в моем случае потянет на 2000 рублей, это около 100 отпечатков 10х15 в лучшем случае. Да еще за фото бумагу HP глянцевую 240 г/м 100 карточек 10х15 придется выложить около 800 деревянных. Суммируем расходы и делим их на количество отпечатков на выходе (в идеале 100), получаем: 2000/100+800/100 = 20 рублей (стоимость чернил) + 8 рублей (стоимость бумаги) = 28 рублей за фото. Конечно, это ОЧЕНЬ дорого!!!
Что ж будем думать дальше...

По весне приобретала я в одном фотомагазине нейтральный фотофильтр, разговорилась с продавцом и он, поинтересовавшись моим принтером, предложил мне чернила для заправки картриджей. Тогда мне было, прямо скажу, не до этого и отметив для себя, где и что можно купить, довольная покупкой покинула сие заведение. Но по мере накопления материала и осознания того, что есть кадры, которые достойны вывода на печать, мысли о том, как сделать струйную печать в домашних условиях дешевле, вернулись.
Не мудрствуя лукаво, купила предложенные мне ранее чернила фирмы Skyhorse, получила краткие инструкции по заправке и отправилась на работу ожидать окончания рабочего дня, дабы провести хирургическое вмешательство в самое сердце моего принтера. Вопросы сохранности работоспособности принтера меня не заботитили, поскольку очевидным плюсом HP является сменный картридж, а не только чернильница (убью картридж - выкину, куплю новый), вот такое вот сменное сердце. К тому же срок гарантийного обслуживания принтухи вышел.
Итак, я купила 6 100-миллилитровых пузырьков с чернилами для трех цветного картриджа, фотокартриджа и черного картриджа. Отдала за этот набор около 900 рублей. Прикинем. На одну заправку картриджа № 134 чернил каждого цвета вливаем не более 7 миллилитров, на черный картридж № 129 потратим около 10 миллилитров чернил, тоже с фотокартриджем, проведя несложные арифметические расчеты, получим 9-10 заправок. Соответственно стоимость одной заправки 90-100 рублей. Теперь стоимость заправки поделим на количество отпечатков (100 штук 10х15 с одного набора заправленных картриджей), получаем стоимость чернил необходимых для печати фотографии размера 10х15 равной примерно 1 рубль. По разным данным картридж способен пережить от 5 до нескольких десятков заправок.
Таким образом, по чернилам экономия у меня составила 20 рублей при оригинальном картридже к 1 рублю при заправленном, то есть 95%.
С бумагой стороннеого производителя экономия тоже может получиться приличной, но поскольку мне пока не до экспериментов, что-либо рассказать о стоимости и качестве бумаги не HP не могу. К тому же эксперименты тоже не бывают дешевы.
Но так как отдавать 8 рублей за лист 10х15 меня жаба душит, я попыталась сэкономить, не отказываясь от фирменной фотобумаги. Поскольку передо мной стоит задача распечатать свадебные фото, то выбор мой пал на глянцевую бумагу 240-250 г/м2. В ближайшем магазине "Эльдорадо" я купила пачку глянцевой бумаги НР (А4, 50 листов, 250г/м2) за 779 рублей. С листа формата А4 (297х210 мм, а реально 296х209мм) получаем 4 карточки 148х105мм, это практически 10х15 см, значит, с 50 листов А4 получим 200 листов 10х15. А это в свою очередь получается меньше 4 рублей за 1 фото.
По бумаге экономия у меня составила около 50%.
В итоге отпечаток 10х15 в домашних условиях у меня вышел стоимостью: 1 рубль (цена необходимых чернил) + 3 рубля 90 копеек (цена 1 листа глянцевой фотобумаги НР 250 г/м2) = 4 рубля 90 копеек.
Что ж меня этот вариант вполне устраивает. Это примерно на 80% дешевле, чем при печати с оригинальными картриджами, и это не дороже, чем в салоне (в итоге 3450 рублей), зато ручная коррекция каждого снимка, полный контроль процесса печати и уверенность в результате. Ну, не без риска, конечно,но, по мне, так игра того стоит. К тому же остается множество возможностей еще больше удешевить печать фото в домашних условиях: это, во-первых, эксперименты с бумагой, а во-вторых, у меня появились мысли в дальнейшем попробвать СНПЧ, вот только жаль для НР их почти не бывает.
2

Метки для координатных осей

При рисовании графиков нередко встает такая задача: мы хотим, что бы на координатных осях графика у нас в нужном месте отображались метки, причем метки должны иметь "круглые" значения. Например, по оси X у нас минимальное значение 0.2259, а максимальное 0.2372, тогда метки должны стоять в точках 0.2260, 0.2280, 0.2300, 0.2320, 0.2340 и 0.2360 (шаг 0.002). Я уже давно использую одну функцию, решающую эту задачу. На вход она получает интервал (x1, x2) и приблизительное число меток, а возвращает массив, содержащий значения меток. Реализация следующая:

#include <stdio.h>
#include <vector>
using namespace std;

typedef vector<double> TDoubleArray;
//Вычисление значений, на которых должны проставляться метки на координатных осях.
static TDoubleArray & CalcGridLabels(double xmin, //минимальное значение.
double xmax, //максимальное значение.
int N) //количество меток в указанном интервале +/-2
{
#define MANT_NUM 5
double mant[MANT_NUM] = {0.1, 0.2, 0.25, 0.5, 1.0},
dx = xmax-xmin;
int i;
//Подбираем значение мантиссы, близким к величине dx:
while(dx < mant[0])
for(i=0; i < MANT_NUM; i++)
mant[i] /= 10.0;
while(dx > mant[MANT_NUM-1])
for(i=0; i < MANT_NUM; i++)
mant[i] *= 10.0;
//Если количество меток > 10:
while(1)
{//Первый проход:
for(i=MANT_NUM-1; i >=0 ; i--)
if(dx/mant[i] >= N )
break;
if(i >= 0)
break;//все хорошо, N меток будет.
//Умножаем метки на 2:
for(i=0; i < MANT_NUM; i++)
mant[i] /= 2;
//Второй проход:
for(i=MANT_NUM-1; i >=0 ; i--)
if(dx/mant[i] >= N )
break;
if(i >= 0)
break;//Все хорошо, N меток будет.
//Умножаем метки на 5:
for(i=0; i < MANT_NUM; i++)
mant[i] /= 5;
}
//2)Ищем наименьшую разницу между требуемым количеством меток и
//тем количеством меток, которое можно получить:
int min_diff = (int)(dx/mant[0]), md_ind = 0;
for(i = 0; i < MANT_NUM; i++)
{ int diff = abs((int)(dx*1.00000001/mant[i])-N);
if(diff < min_diff)
{ min_diff = diff;
md_ind = i;
}
}
//Рассчитываем значения меток:
double dm = mant[md_ind];
double start = dm*(int)(xmin*1.00000001/dm);
if(start < xmin)
start += dm;
static TDoubleArray values;
values.resize(1);
values[0] = start;
values.reserve(N+1);
while(start+dm < xmax)
{ start += dm;
values.push_back(start);
}
return values;
#undef MANT_NUM
}