<?xml version="1.0" encoding="utf-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Форум программистов и сисадминов Киберфорум - Блоги - ProCode</title>
		<link>https://www.cyberforum.ru/blogs/923427/</link>
		<description>КиберФорум - форум программистов, системных администраторов, администраторов баз данных, компьютерный форум, форум по электронике и бытовой технике, обсуждение софта. Бесплатная помощь в решении задач по программированию и наукам, решение проблем с компьютером, операционными системам</description>
		<language>ru</language>
		<lastBuildDate>Wed, 02 Sep 2026 10:51:54 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>60</ttl>
		<image>
			<url>https://www.cyberforum.ru//cyberstatic.net/images/misc/rss.jpg</url>
			<title>Форум программистов и сисадминов Киберфорум - Блоги - ProCode</title>
			<link>https://www.cyberforum.ru/blogs/923427/</link>
		</image>
		<item>
			<title>Как быстро посчитать с помощью PHP число строк в большом файле</title>
			<link>https://www.cyberforum.ru/blogs/923427/4563.html</link>
			<pubDate>Fri, 03 Feb 2017 20:32:31 GMT</pubDate>
			<description>Понадобилось сегодня прикинуть число строк в большом CSV файле. Редакторы в системе его открывать...</description>
			<content:encoded><![CDATA[<div>Понадобилось сегодня прикинуть число строк в большом CSV файле. Редакторы в системе его открывать отказались. Использовать fgets() - слишком долго (я ведь понятия не имел сколько там строк). Нашел в сети интересный хак: <br />
<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="153974883"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="153974883" style="height: 190px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
</pre></td><td class="de1"><pre class="de1"><span class="kw2">&lt;?php</span>
<span class="re0">$handle</span> <span class="sy0">=</span> <span class="sy0">@</span><span class="kw3">fopen</span><span class="br0">&#40;</span><span class="st0">&quot;BIGfile.csv&quot;</span><span class="sy0">,</span> <span class="st0">&quot;r&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="re0">$i</span><span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span>
&nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">feof</span><span class="br0">&#40;</span><span class="re0">$handle</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &nbsp; &nbsp;
&nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; <span class="re0">$bufer</span> <span class="sy0">=</span> <span class="kw3">fread</span><span class="br0">&#40;</span><span class="re0">$handle</span><span class="sy0">,</span><span class="nu0">1048576</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; <span class="re0">$i</span><span class="sy0">+=</span><span class="kw3">substr_count</span><span class="br0">&#40;</span><span class="re0">$bufer</span><span class="sy0">,</span><span class="st0">&quot;<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; <span class="br0">&#125;</span>
<span class="kw3">fclose</span><span class="br0">&#40;</span><span class="re0">$handle</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw1">echo</span> <span class="re0">$i</span><span class="sy0">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Насчитал мне 6 миллионов строк за одну секунду :)</div>

]]></content:encoded>
			<dc:creator>ProCode</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/923427/4563.html</guid>
		</item>
		<item>
			<title><![CDATA["Безумный" AUTO_INCREMENT при использовании INSERT IGNORE]]></title>
			<link>https://www.cyberforum.ru/blogs/923427/4558.html</link>
			<pubDate>Wed, 01 Feb 2017 20:56:11 GMT</pubDate>
			<description>Иногда в MySQL удобно использовать связку INSERT IGNORE, чтобы добавить в таблицу только те записи,...</description>
			<content:encoded><![CDATA[<div>Иногда в MySQL удобно использовать связку INSERT IGNORE, чтобы добавить в таблицу только те записи, значения уникального поля в которых, еще не содержится в таблице. То есть, вам не приходится делать лишний запрос к БД, чтобы проверить есть там уже такая запись или ее нет - вы просто инсертите запись и всё, а об уникальности MySQL заботится сам: попытку вставки записей, которые уже есть в таблице он просто игнорирует, не выбрасывая исключение.<br />
<br />
Однако, как выяснилось, здесь есть подводный камень: игнорировать-то он ее игнорирует, но автоинкремент на id увеличивает на единичку, даже если запись в таблицу произведена не была. В результате чего, после нескольких циклов INSERT IGNORE id в моей таблице стали выглядеть примерно так:<br />
<br />
1,2,3,4....98,125,126,127,235,236,301... ну и так далее.  <br />
<br />
Вылечить это на Ubuntu можно, например, так:<br />
<br />
Открываете /etc/mysql/my.cnf <br />
<br />
и добавляете (или меняете значение, если оно там уже есть)<br />
<br />
innodb_autoinc_lock_mode=0<br />
<br />
И да, речь идет именно об InnoDB. В MyISAM, говорят, таких проблем нет.</div>

]]></content:encoded>
			<dc:creator>ProCode</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/923427/4558.html</guid>
		</item>
		<item>
			<title>Пример простейшего калькулятора на PHP без перезагрузки страницы (чистый Ajax, без jQuery и других библиотек)</title>
			<link>https://www.cyberforum.ru/blogs/923427/4553.html</link>
			<pubDate>Mon, 30 Jan 2017 16:05:32 GMT</pubDate>
			<description>Привет. Это, в каком-то смысле, продолжение креатива *Исполнение PHP-скрипта без перезагрузки...</description>
			<content:encoded><![CDATA[<div>Привет. Это, в каком-то смысле, продолжение креатива <a href="https://www.cyberforum.ru/php-beginners/thread1889429.html"><b>Исполнение PHP-скрипта без перезагрузки страницы и без знания JavaScript(!) - Xajax</b></a> но здесь я решил не использовать сторонние библиотеки вовсе, а сделать образец &quot;чистого&quot; Ajax для тех, кто только начинает знакомиться с этой технологией. <br />
<br />
Это наверное самый простой образец применения Ajax из возможных :) Скрипт принимает от пользователя 2 числа, и выводит ему их вычисленную сумму. И всё это - <u>без перезагрузки страницы</u>. Пример работы скрипта можно увидеть здесь: <a rel="nofollow noopener noreferrer" href="http://procode.pw/primer/ajax/ajax.html" target="_blank" title="http://procode.pw/primer/ajax/ajax.html"><b><a rel="nofollow noopener noreferrer" href="http://procode.pw/primer/ajax/ajax.html" target="_blank" title="http://procode.pw/primer/ajax/ajax.html">http://procode.pw/primer/ajax/ajax.html</a></b></a>    <br />
<br />
Скрипт состоит из двух файлов: ajax.php и ajax.html которые лежат в одной папке. Вот содержимое <b>ajax.php</b>:<br />
<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="479370484"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="479370484" style="height: 78px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
</pre></td><td class="de1"><pre class="de1"><span class="kw2">&lt;?php</span>
&nbsp;
<span class="kw1">echo</span> <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st0">&quot;x&quot;</span><span class="br0">&#93;</span> <span class="sy0">+</span> <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st0">&quot;y&quot;</span><span class="br0">&#93;</span><span class="sy0">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Всё более чем просто, не так ли? -) На сервер приходит POST-запрос с данными. Скрипт складывает две переменных из этого запроса, и отправляет полученную сумму обратно, в поток вывода. <br />
<br />
Теперь посмотрим на код, который делает этот самый POST-запрос (файл, <b>ajax.html</b>):<br />
<br />
<div class="codeblock"><table class="javascript"><thead><tr><td colspan="2" id="398965050"  class="head">JavaScript</td></tr></thead><tbody><tr class="li1"><td><div id="398965050" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="de1"><pre class="de1"><span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="sy0">&gt;</span>
&nbsp;
&nbsp; <span class="kw1">function</span> calculate<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">var</span> x <span class="sy0">=</span> document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">'x'</span><span class="br0">&#41;</span>.<span class="me1">value</span><span class="sy0">;</span> <span class="co1">// получить значение поля 'x' из формы</span>
&nbsp; &nbsp; <span class="kw1">var</span> y <span class="sy0">=</span> document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">'y'</span><span class="br0">&#41;</span>.<span class="me1">value</span><span class="sy0">;</span> <span class="co1">// получить значение поля 'y' из формы</span>
&nbsp; &nbsp; <span class="kw1">var</span> ajaxObject <span class="sy0">=</span> <span class="kw1">new</span> XMLHttpRequest<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// создать новый объект XMLHttpRequest</span>
&nbsp; &nbsp; ajaxObject.<span class="me1">open</span><span class="br0">&#40;</span><span class="st0">'POST'</span><span class="sy0">,</span> <span class="st0">'ajax.php'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// открыть соединение</span>
&nbsp; &nbsp; ajaxObject.<span class="me1">setRequestHeader</span><span class="br0">&#40;</span><span class="st0">'Content-Type'</span><span class="sy0">,</span> <span class="st0">'application/x-www-form-urlencoded'</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// установить формат содержимого POST-запроса</span>
&nbsp; &nbsp; ajaxObject.<span class="me1">send</span><span class="br0">&#40;</span><span class="st0">'x='</span> <span class="sy0">+</span> encodeURIComponent<span class="br0">&#40;</span>x<span class="br0">&#41;</span> <span class="sy0">+</span> <span class="st0">'&amp;y='</span> <span class="sy0">+</span> encodeURIComponent<span class="br0">&#40;</span>y<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// отправить POST-запрос</span>
&nbsp; &nbsp; ajaxObject.<span class="me1">onreadystatechange</span> <span class="sy0">=</span> <span class="kw1">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// установить функцию-обработчик изменения свойства readyState</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>ajaxObject.<span class="me1">readyState</span> <span class="sy0">==</span> <span class="nu0">4</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// если readyState стало 4, т.е. ответ от сервера пришел и готов к обработке</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>ajaxObject.<span class="me1">status</span> <span class="sy0">==</span> <span class="nu0">200</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// и если ответ успешен</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">'calculate'</span><span class="br0">&#41;</span>.<span class="me1">innerHTML</span> <span class="sy0">=</span> ajaxObject.<span class="me1">responseText</span><span class="sy0">;</span> <span class="co1">// выводим ответ сервера пользователю в &lt;span id=&quot;calculate&quot;&gt;&lt;/span&gt; &nbsp;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; <span class="br0">&#125;</span>
&nbsp; 
<span class="sy0">&lt;/</span>script<span class="sy0">&gt;</span></pre></td></tr></table></div></td></tr></tbody></table></div><div class="codeblock"><table class="html5"><thead><tr><td colspan="2" id="425007059"  class="head">HTML5</td></tr></thead><tbody><tr class="li1"><td><div id="425007059" style="height: 142px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
</pre></td><td class="de1"><pre class="de1"><span class="sc2">&lt;<span class="kw2">h4</span>&gt;</span>Это образец работы простейшего AJAX-калькулятора<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">h4</span>&gt;</span>
<span class="sc2">&lt;<span class="kw2">form</span>&gt;</span>
&nbsp; введите число X: <span class="sc2">&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;x&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;x&quot;</span> <span class="sy0">/</span>&gt;&lt;<span class="kw2">br</span> <span class="sy0">/</span>&gt;</span>
&nbsp; введите число Y: <span class="sc2">&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;y&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;y&quot;</span> <span class="sy0">/</span>&gt;&lt;<span class="kw2">br</span> <span class="sy0">/</span>&gt;</span>
&nbsp; <span class="sc2">&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;button&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;Вычислить X+Y&quot;</span> <span class="kw3">onclick</span><span class="sy0">=</span><span class="st0">&quot;calculate()&quot;</span> <span class="sy0">/</span>&gt;</span>
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">form</span>&gt;</span> &nbsp;
&nbsp; <span class="sc2">&lt;<span class="kw2">p</span>&gt;</span>Вычисленная сумма X + Y равна: <span class="sc2">&lt;<span class="kw2">span</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;calculate&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">p</span>&gt;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Как видим, <b>ajax.html</b> состоит из двух частей. <br />
<br />
<b>1.</b> Это функция calculate() написанная на JavaScript. Именно она делает всю основную работу по отправке запроса на сервер, принятию ответа от сервера, и выводу этого ответа на экран.  <br />
<br />
<b>2.</b> Обычная веб-форма с двумя полями ввода и одной кнопкой :) при нажатии на которую, вызывается функция calculate();<br />
<br />
Весь код достаточно подробно прокомментирован, поэтому сейчас ничего более расписывать не буду (может если позже, в виде дополнения опишу механику подробнее). Если есть конкретные вопросы по коду - отвечу в топике. <br />
<br />
Код сознательно упрощен за счет небольшой части функциональности (он не будет работать в старых версиях IE).<br />
<br />
Удачи, парни! Да пребудет с вами Сила! :)</div>

]]></content:encoded>
			<dc:creator>ProCode</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/923427/4553.html</guid>
		</item>
		<item>
			<title>Мемуары ветерана фриланса #2 Механика ценообразования</title>
			<link>https://www.cyberforum.ru/blogs/923427/4512.html</link>
			<pubDate>Sat, 17 Dec 2016 10:52:27 GMT</pubDate>
			<description>Первая часть мемуаров - здесь (https://www.cyberforum.ru/blogs/923427/blog4510.html). Вопрос...</description>
			<content:encoded><![CDATA[<div>Первая часть мемуаров - <a href="https://www.cyberforum.ru/blogs/923427/blog4510.html">здесь</a>. Вопрос ценообразования в практике веб-строительства и фриланса – вещь более чем насущная, и во многом – произвольная. Особенно там, где речь заходит о больших проектах с разноплановыми задачами (например: 1) смастерить интернет-магазин, 2) наполнить его товарами, 3) и вывести в Топ-10 Яндекса по ключевым запросам – это, по сути, три разные задачи). <br />
<br />
И сразу по существу:<br />
<br />
<b>- Если вы затрудняетесь с тем, чтобы оценить стоимость проекта хотя бы приблизительно – оцените свое рабочее время.</b><br />
<br />
То есть:<br />
<br />
1.	Прикиньте, сколько стоит час вашего рабочего времени.<br />
2.	Прикиньте, сколько часов рабочего времени потребует проект (включая время, затрачиваемое на общение с заказчиком).<br />
3.	Умножьте первое на второе.<br />
4.	Полученное число – это и будет примерная стоимость проекта. <br />
<br />
Знаю, начинающих фрилэнсов может затруднить даже и оценка своего времени.  В этом случае можете поступить так: <br />
<br />
1.	Посмотрите на сайтах посвященных поиску работы вакансии на полный рабочий день примерно соответствующие вашей квалификации.<br />
2.	Определите среднюю величину предложения по заработной плате для вашего случая. То есть, сколько бы вам платили в месяц, коли вы пошли бы на эту работу в своем регионе, или регионе, где живет заказчик. Впрочем, региональное ценообразование – это отдельная песня, мы ее здесь рассматривать не будем.<br />
3.	Полученную сумму делите на 160(150) – это примерное число рабочих часов в месяце. <br />
4.	Вот вы и получили ориентировочную стоимость часа вашего рабочего времени. <br />
<br />
Разумеется, не стоит применять описанные формулы «втупую». Многое зависит от конъюнктуры рынка, конкретной ситуации, и тыды и тыпы. Но в качестве ориентира определения стоимости проекта, это вполне годный метод.<br />
<br />
Успехов и всяческого процветания!<br />
<br />
Искренне ваш, <b><font color="SeaGreen">ProCode</font></b></div>


<!-- attachments -->
	<div style="margin-top:10px">

		
			<fieldset class="fieldset">
				<legend>Миниатюры</legend>
				<div style="padding:3px">
				
	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4071&amp;d=1481971874" target="attachment" rel="Lightbox" id="attachment4071"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4071&amp;stc=1&amp;thumb=1&amp;d=1481971874" border="0" alt="Нажмите на изображение для увеличения
Название: Ценообразование фриланс.png
Просмотров: 642
Размер:	14.9 Кб
ID:	4071" /></a>
	&nbsp;
	

				</div>
			</fieldset>
		
		
		
		

	</div>
<!-- / attachments -->
]]></content:encoded>
			<dc:creator>ProCode</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/923427/4512.html</guid>
		</item>
		<item>
			<title>Самая частая ошибка новичка в PHP и как легко её избежать</title>
			<link>https://www.cyberforum.ru/blogs/923427/4511.html</link>
			<pubDate>Thu, 15 Dec 2016 15:22:11 GMT</pubDate>
			<description><![CDATA[Уверен, каждый из нас хоть единожды, да писал что-то вроде  
 
<div class="codeblock"><table...]]></description>
			<content:encoded><![CDATA[<div>Уверен, каждый из нас хоть единожды, да писал что-то вроде <br />
<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="325427644"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="325427644" style="height: 62px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
</pre></td><td class="de1"><pre class="de1"><span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$somevar</span> <span class="sy0">=</span> <span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
<span class="co1">//код который почему-то всегда исполняется...</span></pre></td></tr></table></div></td></tr></tbody></table></div>а потом долго ломал голову: почему же код работает так, будто условие всегда верное.<br />
<br />
Это, разумеется, происходит от вольной или невольной путаницы между оператором присваивания &quot;=&quot; и оператором равенства &quot;==&quot;. Такую опечатку, кстати, делают не только новички в программировании. От нее никто не застрахован, особенно с недосыпу :) <br />
<br />
Решение очень простое, <u>взять себе за привычку ставить переменную в правую часть выражения</u>. И тогда даже если вы по-запарке напишете:<br />
<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="215752427"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="215752427" style="height: 78px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
</pre></td><td class="de1"><pre class="de1"><span class="kw1">if</span><span class="br0">&#40;</span><span class="nu0">1</span> <span class="sy0">=</span> <span class="re0">$somevar</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">echo</span> <span class="st0">&quot;somevar is true!&quot;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>компилятор вам скажет:<br />
<br />

<table width="95%"  class="bbcode_maincontainer"><tr><td>
	<div class="bbcode_container">
	  <div class="bbcode_quote">
	    <div class="btbtbt">
		<div class="quote_container">
	      	<div class="bbcode_quote_container"></div>
	       	<div class="bbcode_postedby">
	         	
	        </div>
	        <div class="message">Parse error: syntax error, unexpected '='</div>
	      </div>
			</div> 
		</div>
	</div>
</td></tr></table>Вуаля!)<br />
<br />
Искренне ваш, <b><font color="SeaGreen">ProCode</font></b></div>

]]></content:encoded>
			<dc:creator>ProCode</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/923427/4511.html</guid>
		</item>
		<item>
			<title>Мемуары ветерана фриланса #1</title>
			<link>https://www.cyberforum.ru/blogs/923427/4510.html</link>
			<pubDate>Thu, 15 Dec 2016 12:07:33 GMT</pubDate>
			<description>Этот текст родился по мотивам знакомства с разделом «Фриланс» на Киберфоруме. Ну что ж, мой опыт...</description>
			<content:encoded><![CDATA[<div>Этот текст родился по мотивам знакомства с разделом «Фриланс» на Киберфоруме. Ну что ж, мой опыт фриланса в веб-разработке – около 15 лет. Это внушительный срок. И хоть мульёнов за это время я и не нажил, но опытом поделиться могу. Вижу, что он пригодится многим. И да, пожалуйста, оставляйте комментарии и оценки – мне нужно понимать, что именно писать в продолжении. <br />
<br />
Парой слов о себе: программистом я стал уже в более-менее осознанном возрасте. Сейчас мне за сороковник (агась), соответственно, тогда дело шло к тридцатнику. Я не заканчивал ВУЗ, просто купил самоучитель по С++, а уже через месяц устроился в одну из многочисленных франшиз 1С – стажером. Ездил на вызовы, конфигурировал сборки 1С-Бухгалтерии. Это была уже 7-я версия 1С. В той же конторе я впервые услышал о PHP и SQL. И тогда же более плотно познакомился с HTML. <br />
<br />
Сразу оговорюсь: несмотря на внушительный опыт, «программистом экстра-класса» я себя не считаю. Ибо программирую, скажем, так, «эпизодически», и часто – для собственных проектов. Тогда как истинное мастерство приходит при постоянной работе, причем, желательно в команде, причем, за деньги заказчика. Тем не менее, в свое время я самостоятельно написал пару больших штуковин, вроде рейтинговой системы блогов и записей Живого Журнала (она тогда была только у меня, да у Яндекса), так что, можно сказать, что я кое-что понимаю в программировании. Но ближе к сути фриланса в веб-разработке.<br />
<br />
Как только я немного научился делать свои первые веб-сайты в программе FrontPage (написал и улыбаюсь во все лицо – настолько смешно это сейчас звучит) – я купил свежую газету «Из Рук в Руки» и стал прямо по порядку обзванивать фирмы и предпринимателей – предлагать им сделать себе сайт. Напомню, речь идет о самом начале 2000-х – многие меня искренне спрашивали: <br />
<br />
- А зачем нам нужен сайт?<br />
<br />
Хотите верьте, хотите не верьте, но это чистая правда. Приходилось на пальцах, прямо по телефону разжевывать, о чем вообще идет речь. Конечно, не всем, но такое бывало часто. <br />
Как сейчас помню: я предлагал сделать «сайт-визитку» (сейчас это принято называть «лэндинг») за $60 и разместить ее на narod.ru. <br />
<br />
Поясню, как такое вообще можно предлагать. В те далекие времена теперешних конструкторов сайтов либо не существовало, либо были они в неимоверно зачаточном состоянии. Так что сайты, сделанные в FrontPage, выглядели более-менее конкурентоспособными.  <br />
А на рынке хостинга (в т.ч. и бесплатного) тогда рулила Agava и еще пара хостеров, названия, которых уже стерлись из моей памяти. <br />
<br />
Очень быстро я понял, что сайт сам по себе – мало кому нужен (хотя бывало и такое). Что предпринимателю нужны реальные деньги, реальные клиенты. Так я и познакомился с SEO, и здесь дела пошли уже гораздо веселей, чем с просто визитками. Потому как внятные предприниматели, как правило, готовы платить реальные деньги за реальное увеличение объемов продаж, которое дает им поисковое продвижение. <br />
<br />
И здесь же, первый важный совет начинающему фрилэнсеру: <br />
<br />
<b>- Когда ведешь переговоры о новом проекте – старайся сразу выйти на человека, который принимает решения по бюджету.</b> <br />
<br />
Дело в том, что общение с подручными таких людей – это, как правило, пустая трата времени. Даже если речь идет об очень крупных компаниях. То есть, сразу старайся понять с кем ты общаешься – с реальным заказчиком, или с пустышкой, который не имеет права принять окончательное решение. И если ты видишь, что человек не владеет необходимыми полномочиями – попробуй перепрыгнуть через его голову и связаться с тем, кто реально решает.<br />
<br />
Эта рекомендация идет в списке первым номером, ибо 50%-90% своего рабочего времени фриланс тратит именно на переговоры и получение заказа.  И вы сильно облегчите себе жизнь и повысите личную эффективность, если приучитесь сходу резать линии общения, которые не ведут к получению заказа. <br />
<br />
В практическом смысле это можно сформулировать еще и так:<br />
<br />
<b>- Не работайте без предоплаты.</b><br />
<br />
Не обязательно требовать сразу 100% или 50% предоплаты за весь проект (если речь, конечно, не идет о совсем уж мелочевке). Но какая-то, пусть небольшая, предоплата быть должна непременно. Ибо если человек не готов платить деньги сразу – значит с ним что-то не так. Значит, он не понимает связку «время-деньги», не знает что такое работа и потраченное время. Это аксиома. <br />
<br />
Знаю, мне могут возразить:<br />
<br />
- Заказчик тоже опасается, что его кинут.<br />
<br />
Да, это так. Но если человек нормальный – он должен понимать и сторону фриланса, понимать, что у того тоже есть свои опасения. Почему бы не поделить опасения поровну между заказчиком и фрилэнсером? Логично же?<br />
<br />
В общем, я никогда не имел дела с людьми, не готовыми платить сразу. Может какую-то часть заказов я через это и упустил – но всех денег все равно не заработаешь. Это тоже аксиома. <br />
<br />
<b>- Не бойся отказаться от заказа, даже если он выглядит как бриллиантовый.</b><br />
<br />
Это всё в эту же тему. Часто фриланса подводит жадность, особенно если он голодный. Он отчетливо видит, что заказчик – какой-то мутный. Предоплату давать не готов. И всё равно он сам лезет в эту ловушку, делает ему «три варианта дизайна», грохает на это несколько рабочих дней. И в результате оказывается ни с чем. Зачем? Просто откажись от заказа и всё. А сэкономленное время можно успешно потратить на поиск нового. <br />
<br />
Продолжение следует…<br />
<br />
Повторюсь: если какие-то из затронутых тем показались вам особенно интересными – пишите в комментарии, не стесняйтесь. Раскроем их в дальнейших частях. <br />
<br />
Искренне ваш, <font color="SeaGreen"><b>ProCode</b></font></div>

]]></content:encoded>
			<dc:creator>ProCode</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/923427/4510.html</guid>
		</item>
	</channel>
</rss>
