Архив автора: Степан Чельцов

О расхождении слов и дел

О расхождении слов и дел

Так получилось по жизни, что я умею только делать. Рассуждать о том, как все плохо мне надоело в армии после слов сержанта: «Солдат, сделай так, чтобы до тебя невозможно было доебаться.»

Это мудрые слова от такого мудака, надо сказать. Наверное, он не очень понимал их смысл и не сам придумал. Но суть их в глубокой проработке каждого действия. Надо делать дело так, чтобы при любой попытке копаться в твоей работе не получалось найти проблему. Ну или по минимуму.

Отсюда у меня появились различные амбиции на системные подходы, потому что мой успех в разных делах зависел от разных людей и их работы. Это было и в армии, и в МГУ, и в Студии Лебедева.

Но бывает так, что ты можешь говорить умные вещи, и не выполнять их. Например, говоришь, что надо писать заявления в ДПС на мудаков, паркующихся неправильно, но не всегда отслеживаешь итог этой работы. Или говоришь, что надо держать принцип работы до конца, но иногда позволяешь поблажки и отступления. И тут на тебя начинают наезжать, что у тебя двойные стандарты.

Эти люди не знают ничего про подготовку к делам, про всю вашу нагрузку, про кучу проблем по фронтам работы и личной жизни. Они считают, что раз ты сказал что-то из своего идеального мировоззрения, значит должен уже делать, прямо сейчас, делать от буквы до буквы, как сказал без вариантов, и делать идеально. Эти люди возводят в максиму ваши слова, не погружаясь в детали идеи, в возможные нюансы и проблемы, им важно вас прилюдно уколоть. Реакция на таких троллей простая:

«Я как минимум начал работу над этим, и проработал много нюансов. А на какой стадии ты?»

Таких троллей полно везде, даже в нашем профессиональном сообщстве, и они не специально это делают, это часть их психологии. Молодые и неопытные начинают спорить и кормить троля. Опытные и мудрые сразу осекают попытки докапывания, и это единственно верный шаг. Умные люди это увидят и поймут, мнение прочих не очень важно.

Это все к чему. Делайте то, что считаете важным. Делайте так, как считаете правильным. Просто делайте, слушайте, корректируйтесь по ходу работы. Меньше болтовни, больше дела.

Пятиминутка ненависти

Как мы проводим регулярные созвоны

Уже несколько раз я упоминал переход к системной работе в своих постах. Выход на системность — главный приоритет этого года, и заключается он в создании цепочки действий, которые надо делать изо дня в день по плану на год.

Первая встреча в этом году с моими партнерами Агентством «Фэтфокс» началась с темой «Стратегическое планирование». Фэтфокс любят большую задачу на большой срок, и я ее поставил — увеличить органический трафик к ноябрю в 10 раз с 600 уников в день до 6000. И ребята начали работать.

Параллельно с внешней работой, надо проводить и внутреннюю. Так как в коллективе сейчас только я и Нина, значит дисциплинировать надо себя и взаимоотношения с Ниной, чтобы оба понимали ситуацию по проекту в любое время.

Созвоны

Вот уже 2 месяца каждую неделю мы созваниваемся для обсуждения прошлой недели, задач этой недели и обсуждаем разные вопросы. Первые созвоны были хаотичны, но на них мы ставили конкретные задачи к следующему созвону, и хаос начинал уходить, потому что среди прочей операционки были конкретные задачи.

Но в процессе работы любого коллектива и предприятия возникают конфликты. Что-то не так с поставщиками, что-то с клиентами, что-то с логистикой, и все это нас отвлекает, заставляет нервничать и, что печально, влияет на другие задачи. И я вспомнил метод, снимающий напряжение.

Пятиминутка ненависти

В Студии Лебедева на Газетном переулке дизайнер Искандер Мухамадеев проводил уроки английского. Он научил в начале урока проводить «пятиминутку ненависти», на которой он ругал нас за невыполненную работу, за опаздания, а мы в свою очередь делились своим негативом. Ровно через 5 минут или ранее мы заканчивали, и начинали урок как ни в чем не бывало.

Этот момент я и решил привнести в наш созвон. Диалог так и начинается:

— Привет!

— Привет!

— Начнем пятиминутку ненависти?

— Давай..

И мы выговариваем все замечания, которые были за последнюю неделю, делимся проблемами, а если получается, что-то решаем или ставим задачи на их решение. Прямой открытый диалог помогает снять недомолвки, возможные обиды, высказать пожелания по работе, которые могут быть полезны всем. Главное — слушать собеседника и правильно его услышать.

Кульминация

Я не силен в красивых кульминациях, и эта статья будет без красивого окончания, потому что мы только 1 месяц так работаем, но мои ощущения работы и обратной связи улучшились. Мне не надо искать правильных слов или причины поговорить, потому что есть регулярный созвон и «пятиминутка ненависти», остальное обсуждение идет по стандарту наших задач.

Попробуйте на ваших встречах внедрить что-то подобное, будет интересно услышать ваш опыт.

PHP-шпаргалка

Конструкция открывается и закрывается:

<?php Здесь пишется код ?>

Вид переменных:

$a, или $blababla, или $supermegaparamname

Особый гемор:

  • всегда ставить точку с запятой «;» в конце строки
  • стараться избегать пробелов в конце строк, это ведет к ошибкам

Присвоение значений переменным:

$a = 10;

$a = «Аз есьм значение переменной»;

Операции с переменными самые обычные:

$a = $a+1; увеличивает на 1 значение

$a++; увеличивает на 1 значение

$a—; тут два минуса, уменьшает на 1 значение

$a = $b * $c; перемножение

Вывод значений:

echo «Да будет переменная $a»; для строки единичных значений

print $a; — для массивов чаще

Массив создается повторением переменной с разными значениями:

$param = «Иван»;

$param = «Иванович»;

$param = 21;

$param = «мужчина»;

Встроенные функции:

count($param); — посчитает количество ячеек в массиве

isset($param); — проверит, есть ли такая переменная

empty($param); — проверит, пустая я ли переменная

date(«y-m-d»); — выводит текущую дату. Можно играть кеглем и разделителем

date(«h-i-s»); — выводит текущее время. Можно играть разделителем.

Работа с функциями php

Объявляем функцию с именем hello и переменной $name. Функция введет имя во фразу, а выведется при обращении к имени функции с назначением значения в функцию.

function hello($name){

echo «$name, привет!»

}

hello(«Степан»);

Тоже самое с двумя переменными:

function hello($name, $sur_name){

echo «$name $sur_name, привет!»

}

hello(«Степан», «Чельцов»);

Тоже самое, переменные определяются отдельно от функции:

function hello($name, $sur_name){

echo «$name $sur_name, привет!»

}

$name = «Степан»;

$sur_name = «Чельцов»;

hello($name, $sur_name);

Выдаем результат при вызове через return:

function $matem($b){

$b = $b*2;

return $b;

}

$result = matem(«10»);

Пример с массивом:

$mas10[] = «Иван»;

$mas10[] = «Иванов»;

$mas10[] = 21;

$mas10[] = «муж.»;

$mas11[] = «Иван»;

$mas11[] = «Иванов»;

$mas11[] = 21;

$mas11[] = «муж.»;

$mas12[] = «Иван»;

$mas12[] = «Иванов»;

$mas12[] = 21;

$mas12[] = «муж.»;

 

function anketa(){

foreach($array as $item){

echo «$item <br>»;

}

}

anketa(mas10);

anketa(mas11);

anketa(mas12);

Вызов значения и функций из других файлов. Вызов через include не останавливает работу страницы в случае ошибки:

include «some_function.php»;

Вызов значения и функций из других файлов. Вызов через require останавливает работу всей страницы в случае ошибки:

require «some_function.php»;

Вызов значения и функций из других файлов только один раз:

include_once «some_function.php»;

Вызов значения и функций из других файлов только один раз:

require_once «some_function.php»;

Глобальные массивы

Массив POST

Массив POST хранит данные из форм сайта в заданные файлы:

form method = «post» action = «tutor-putor.php>

<input type = «text» name = «login» value = «Логин»/><br>

<input type = «email» name = «email» value = «Почта»/><br>

<input type = «submit» name = «save» value = «Сохранить»/><br>

</form>

В файле tutor-putor.php следующее содержимое для приема и вывода данных:

<?php

$_POST[«login»];

$_POST[«email»];

?>

Чтобы защитить сайт от инъекций, начинаем чистить ввод. Сначала от html-текстов через strip_tags:

$login = strip_tags($_POST[‘login’]);

Уберем пробелы из логина через trim:

$login = strip_tags(trim($_POST[‘login’]));

Преобразуем спец.символы в их код через htmlspecialchars:

$login = htmlspecialchars(strip_tags(trim($_POST[‘login’])));

Сделаем очистку через функцию:

function clear_data($same_data){

return htmlspecialchars(strip_tags(trim($same_data)));

}

$login = clear_data($_POST[‘login’]);

$email = clear_data($_POST[’email’]);

Массив GET

Массив нужен для создания динамики на сайте. С одной стороны, можно передать данные на сервер. С другой, определить содержимое сайта в зависимости от параметра.

Чтобы передать данные можно использовать метод GET:

form method = «get» action = «tutor-putor.php>

<input type = «text» name=»login» value = «Логин»/><br>

<input type = «email» name = «email» value = «Почта»/><br>

<input type = «submit» name = «save» value = «Сохранить»/><br>

</form>

 

<?php

$_GET[«login»];

$_GET[«email»];

?>

Выдача получится через адресную строку:

http://cheltsov.ru/tutor-putor.php?login=vasya&email=vasya@gmail.com&save=Сохранить

Пример работы без предварительной подготовки через GET:

<?php

if($_GET[‘id’]==1)

echo «Пункт номер 1»;

else

echo «Другой пункт»;

?>

Переход по адресу с заданным значением:

http://cheltsov.ru/tutor-putor.php?id=1

Выдаст

Пункт номер 1

Изменим содержимое сайта в зависимости от параметра:

<?php

switch($page){

case = «main»;

$title = «Главная страница»;

$text = «Это главная страница»;

break;

case = «news»;

$title = «Страница новостей;

$text = «Это новостная страница»;

break;

default;

$title = «404 страница;

$text = «Это страница для ошибочных данных»;

break;

}

?>

<h1><?php echo $title ?></h1>

<p><?php echo $text ?></p>

http://cheltsov.ru/tutor-putor.php?page=main

Выдаст

Главная страница

Это главная страница

Массив SERVER

Массив SERVER для получения данных от сервера. Например, получение IP-адреса посетителя:

$_SERVER[‘REMOTE_ADDR’]

Или информация про браузер посетителя:

$_SERVER[‘HTTP_USER_AGENT’]

Вывод содержимого ответа сервера в явном виде:

<html>

<body>

<pre>

<?php

print_r($_SERVER);

?>

</pre>

</body>

</html>

Константы

Определяем константы через define:

<?php

define («MYNAME»,»Stepan»);

echo MYNAME;

?>

Подстановка адреса нашего сайта для указания неполного адреса при программировании:

<?php

define («BASE_URL»,»http://cheltsov.ru/»);

?>

<img src=»<?php BASE_URL;?>images/logo.png»/>

Cookies

Куки нужны для сохранения информации пользователя при работе с сайтом. Например, галочки «Запомнить меня» на разных сайтах сохраняет значение логина и пароля сохраняет файл cookies.

Чтобы создать файл cookies, надо:

<?php

setcookie(«name»,»Stepan», time()+36000);

?>

<DOCTYPE>

<html>

Чтобы вызвать вызвать значение сохраненной куки, пишем $_COOKIE[»]:

<body>

<?php

echo $_COOKIE[‘name’];

?>

</body>

</html>

Получаем:

Stepan

 

<?php

if (isset($_POST[‘send’])){

$bg = $_POST[‘bg’];

setcookie(«background»,»$bg», time()+3600);

}

?>

<DOCTYPE>

<html>

<head></head>

<body>

<?php if(isset($_COOKIE[‘background’])){?>

<style>

body

{

background:<?php echo $_COOKIE[‘background’];?>;

}

</style>

<?php }?>

<form method=»post» action=»»>

Выберите цвет фона страницы:<br>

<select name=»bg»>

<option value=»red»>Красный</value>

<option value=»black»>Черный</value>

<option value=»yellow»>Желтый</value>

</select>

<input type=»submit» name=»send» value=»Выбрать»/>

</form>

<p>В куки записан цвет <?php echo $_COOKIE[‘background’];?></p>

</body>

</html>

Чтобы удалить куку, есть способы через вывод отрицательного времени жизни куки:

setcookie(«background»,»$bg», time()-3600);

Или через обнуление данных:

setcookie(«background»,»»);

Или проще:

setcookie(«background»);

Сессии

Сессии выполняют примерно те же роли, что и куки. Разница в количестве сохраняемых данных. Куки могут сохранять немного, а сессии много. Куки хранятся долго, независимо от открытости браузера. А сессии обычно заканчиваются при закрытии браузера.

Начинаем объявление сессии:

<?php

session_start();

if (isset($_POST[‘send’])){

$_SESSION[‘name’] = strip_tags(trim($_POST[‘name’]));

}

if(!isset($_SESSION[‘name’])){

?>

<DOCTYPE>

<html>

<head></head>

<body>

<form method=»post» action=»»>

Звать как?<br>

<input type=»text» name=»name» value=»Имя»/>

<input type=»submit» name=»send» value=»Выбрать»/>

</form>

<?php }

else{

echo «Hello, «.$_SESSION[‘name’];

}

?>

</body>

</html>

Уничтожить сессию можно командой session_destroy():

session_destroy();

Частичное уничтожение сессии (отдельные данные) делаем через unset:

unset($_SESSION[‘name’]);

Подключение базы данных

Если база уже создана, с ней надо работать. Подключается база готовой функцией:

mysql_connect(«localhost»,»root»,»12345″);

mysql_select_db(«base_name»);

Красивый подход через переменные:

$connection = mysql_connect(«localhost»,»root»,»12345″);

$data_base = mysql_select_db(«base_name»);

Добавим кодировку:

mysql_set_charset(«utf8»);

Или так:

mysql_query(«SET NAMES ‘UTF8′»);

Проверим соединение:

<?php

if(!$connection || !$data_base){

exit(mysql_error());

}

else{

echo «Соединение успешно прошло»;

}

?>

После окончания работы с базой данных закрываем соединение через:

mysql_close();

Выборка из базы данных. Готовим выборку и передаем все в переменную:

$result = mysql_query(«SELECT * FROM base_name»);

mysql_close();

Создаем массив для всех полученных данных, чтобы работать с ним:

$row = mysql_fetch_array($result);

Выводим какую-нибудь ячейку из полученного массива:

echo $row[‘title’].»<br>»;

echo $row[‘text’];

Чтобы вывести все данные по строчно из базы, введем условие while:

while($row = mysql_fetch_array($result)){

echo $row[‘title’].»<br>»;

echo $row[‘text’];

}

И добавим верстки к нашему выводу данных:

<?php

while($row = mysql_fetch_array($result)){

?>

<div class=»content»>

<h2><?php echo $row[‘title’];?></h2>

<p><?php echo $row[‘text’];?></p>

</div>

<?php

}

?>

Добавим в выборку сортировку по какому-нибудь параметру. Для этого добавляем при формировании массива «ORDER BY«. Значение DESC сортирует в обратном порядке по полю id:

$result = mysql_query(«SELECT * FROM base_name ORDER BY id DESC»);

Ограничим выборку количеством выдачи, скажем только 25 результатов. Используем команду LIMIT:

$result = mysql_query(«SELECT * FROM base_name ORDER BY id DESC LIMIT 25»);

Введем фильтрацию выдачи по заданному слову через команду WHERE:

$result = mysql_query(«SELECT * FROM base_name WHERE text=’новость’ ORDER BY id DESC LIMIT 25»);

Ограничим получение данных из базы перечислением нужных колонок. Убираем * и пишем через запятую имена полей:

$result = mysql_query(«SELECT title,text FROM base_name WHERE text=’новость’ ORDER BY id DESC LIMIT 25»);

В выборку можно подставлять переменные, которые где-то определяются или вычисляются.

Как добавлять записи в бд через формы

Для соединения с базой сделаем отдельный файл подключения с содержимым, назовем его «db.php»:

<?php

$connection = mysql_connect(«localhost»,»root»,»12345″);

$data_base = mysql_select_db(«base_name»);

mysql_set_charset(«utf8»);

if(!$connection || !$data_base){

exit(mysql_error());

}

else{

echo «Соединение успешно прошло»;

}

?>

Создаем форму добавления:

<form method = «post» action = «tutor-putor.php>

<input type = «text» name = «title» value = «Заголовок»/><br>

<textarea cols=»40″ name=»text» rows=»10″ value=»Текст сообщения»><?textarea><br>

<input type = «text» name = «author» value = «Автор»/><br>

<input type = «hidden» name = «date» value = «<?php echo date(‘Y-m-d’)?>»/><br>

<input type = «hidden» name = «time» value = «<?php echo time(‘H:i:s’)?>»/><br>

<input type = «submit» name = «add» value = «Отправить»/><br>

</form>

Подключаем нашу базу через include_once:

include_once(«db.php»);

Принимаем значения из формы в переменные:

if(isset($_POST[‘add’])){

$title = strip_tags(trim($_POST[‘title’]));

$text =strip_tags(trim($_POST[‘text’]));

$author =strip_tags(trim($_POST[‘author’]));

$date =strip_tags(trim($_POST[‘date’]));

$time =strip_tags(trim($_POST[‘time’]));

Делаем запрос к базе:

mysql_query(» INSERT INTO data_base(title, text,author, date, time) VALUES (‘$title’.’$text’.’$author’.’$date’.’$time’)»);

mysql_close();

echo «Данные успешно добавлены.»;

} //закрыли if сверху

Как обновлять данные в базе

Если нам надо что-то поправить в уже введенной информации, надо ее сначала запросить на вывод.

<?php

include_once(«db.php»);

$id = $_GET[‘id’];

$result = mysql_query(«SELECT title,text,author,date,time FROM base_name WHERE id=’$id'»);

?>

Создаем цикл заполнения:

while($row = mysql_fetch_array($result)){

}

Подставляем значения в форму редактирования:

<form method = «post» action = «tutor-putor.php?id=<?php echo $id; ?>»>

<input type = «text» name = «title» value = «<?php echo $row(‘title’);?>»/><br>

<textarea cols=»40″ name=»text» rows=»10″ value=»<?php echo $row(‘text’);?>»><?textarea><br>

<input type = «text» name = «author» value = «<?php echo $row(‘author’);?>»/><br>

<input type = «submit» name = «save» value = «Изменить»/><br>

</form>

Далее в форме мы редактируем данные, если необходимо. Чтобы данные сохранились, надо сделать:

if(isset($_POST[‘save’])){

$title = strip_tags(trim($_POST[‘title’]));

$text =strip_tags(trim($_POST[‘text’]));

$author =strip_tags(trim($_POST[‘author’]));

mysql_query(» UPDATE data_base SET title=», text=»,author=» WHERE id=’$id'»);

mysql_close();

echo «Данные успешно обновлены.»;

}

Удаление записей из базы данных

Повторяем ту же конструкцию, только меняем запрос к базе:

<?php

include_once(«db.php»);

$id = $_GET[‘id’];

mysql_query(«DELETE FROM base_name WHERE id=’$id’ «);

mysql_close();

echo «Данные успешно удалены.»;

?>

Заметка-незабудка. Как я планирую важные дела.

Как вы знаете, я привык отвечать за свои слова. Потому и говорю то, что считаю правильным. Прекрасная Д. считает меня занудой частично из-за этого.

Сегодня я допустил утверждение, что глобальные компании в течении примерно 10 лет откажутся от посредников и перейдут полностью на свою сеть магазинов и прямую доставку покупателям. Причина: прогресс и глобализация, причин не делать так и терять промежуточную маржу нет.

С противником моей позиции Виктором Дементьевым (спортсмен и тренер детских групп) решили обсудить это через 10 лет. Так как уверенности в жизни Гугла и Фейсбука ни у кого нет, а мой сайт оплачен на 10 лет — тут и размещу напоминалку. Такой же пост будет опубликован ровно через 10 лет.

Источник диалога

У меня есть мнение, что мечта социалистов об устранении преград на пути товара от завода к покупателю очень сильно упира…

Опубликовано Степан Чельцов 11 марта 2016 г.

Адаптивный футер и битва с логотипом

Не смог пойти спать, не доведя хедер сайта до идеала, как и футер. Да, есть еще косячки, на малом экране надо менять номер на трубку и личный кабинет на пиктограмму, но я пока не волшебник, не умею.

Довольно быстро я выправил блоки в хедере так же, как и в футере. Личный кабинет и телефон сделал отдельными дивами, но в одной группе. Принялся за логотип и название и.. обломался.

С текстом получилось сразу, а вот изображение постоянно скакало. Я уже все облазил, в поисках адекватного решения с размером картинки под разные разрешения экрана. Все в упор советуют javaScript, а я его еще не умею, и не верю, что это единственное решение.

Моя прекрасная Д. как всегда помогла своим советом, и загадка была решена. Результат на видео:

Итоговый хедер такой:

.header {

width:100%;

height:7%;

background-color: #2F4F4F;

/*background: url(’images/d_header_bg.jpg’);*/

position:fixed; /*Зафиксировал хедер*/

left:0px;

top:0px;

display: inline-block;

vertical-align: middle;

text-align: center;

font-size: 4vw;

font-size: 4vh;

font-size: 3vmin;

color: #ffffff;

}

.top_logo {

max-width:25%;

margin: 0.2% 0% 0% 6.5%;

float:left;

}

.top_logo_batt img {

position: absolute;

left: 2%;

top: 28%;

width:5%;

min-width: 5%;

z-index: 200;

}

.top_logo_title {

float:left;

}

.top_logo_title a {

color:#FFFFFF;

text-decoration: none;

}

.header_right {

width:33%;

margin: 0.5% 2% 0% 0%;

float:right;

}

.phone {

margin-right: 3%;

max-width:35%;

float:right;

}

.phone a {

color:#FFFFFF;

text-decoration: none;

}

.personal_c {

max-width:40%;

float: right;

}

.personal_c a {

color: #ffffff;

}

Адаптив для любой диагонали экрана

Новый день с программированием и CSS

Как я уже рассказывал, мои взгляды на программирование недавно изменились после знакомства с каналом Михаила Базарова:

https://www.youtube.com/channel/UCTlFw1VKSOwxkBIyETv7sFA

Сначала я смотрел и думал, подтягивал знания верстки. А сегодня решил начать действовать.

Позавчера я научился ставить виртуальный сервер на своем маке, научился работать через Atom и Sftp-плагин для хрома. И сегодня я начал верстать новый магазин подарков.

У меня есть ряд претензий к текущему магазину, которые я не хочу давать на исправление другим. Я хочу сам сверстать новый шаблон, чтобы прочувствовать все проблемы на себе. При этом я хочу убедиться, что я все выполнил правильно.

Список претензий:

  • Меню сверху слишком много сжирает места, целых 230 пикселей;
  • Старая шапка сайта www.thepresents.ru

    Старая шапка сайта www.thepresents.ru

  • Меню снизу занимает 3 экрана. Целых 3 бесполезных экрана, которые непонятно зачем там находятся.

    Старый футер №1 сайта www.thepresents.ru

    Старый футер №1 сайта www.thepresents.ru

    Старый футер №2 сайта www.thepresents.ru

    Старый футер №2 сайта www.thepresents.ru

    Старый футер №3 сайта www.thepresents.ru

    Старый футер №3 сайта www.thepresents.ru

  • В меню будут добавлены пункты, которые определят индивидуальный подход к покупателю;
  • На разных страницах будет работать встроенный функционал битрикса, который сейчас у меня не работает по ряду причин кастомной разработки;
  • Невозможность быстро и красиво менять дизайн по необходимости;

Под словом «правильно» я подразумеваю безопасную верстку и модульную разработку. Такая правильность обеспечивает безопасность при обновлении ядра битрикса или иных модулей. Как только у нас идет разработка по модулям, риски значительно снижаются, а разработка упрощается. Так мне кажется.

Ниже представляю скрины своих наработок за сегодня и зачатки будущего дизайна. Один из принципов, которые я хочу заложить — адаптивность не только под маленькие экраны телефонов, но и под большие экраны высокого разрешения.

Так же я решил убрать картинки, которые можно делать силами CSS. Первой жертвой стала плашка разделитель:

Старый градиент сайта www.thepresents.ru

Старый градиент сайта www.thepresents.ru

Я заменил ее тегом <div> и свойством класса:

.line_gradient {

display:block;

float: center;

font-size:1px;

width:100%;

height: 5%;

background-image: linear-gradient(to right, #FFD700, #9400D3, #000000, #9400D3, #000000, #00FFFF, #00008B);

}

Новый градиент www.thepresents.ru

Новый градиент www.thepresents.ru

Далее я задался целью, чтобы при масштабировании экрана футер (нижняя часть сайта) всегда была одинаковой в процентах, и линия градиента тоже была видна. Я это решил через фиксацию высоты блока в процентном выражении.

Как изменять размер шрифта в зависимости от разрешения экрана?

Соответственно мне стало интересно, как заставить шрифты изменяться в зависимости от разрешения экрана. И гугление проблемы мне помогло найти новые типы измерения:

1vw = 1% от ширины области просмотра

1vh = 1% от высоты области просмотра

1vmin = 1vw или 1vh, берется наименьшее значение

Теперь у меня такие настройки для футера:

.footer {

width:100%;

min-height:7%;

/*background: url(’images/footer_bg.jpg’);*/

background-color: #2F4F4F; /*#2F4F4F, #000000, #006400, #000000, #2F4F4F, #008080)*/;

position: absolute;

bottom: 0px;

}

.line_gradient {

width:100%;

height: 7%;

background-image: linear-gradient(to right, #FFD700, #9400D3, #000000, #9400D3, #000000, #00FFFF, #00008B);

position:absolute;

}

.container_footer {

width:100%;

position: top;

display: inline-block;

vertical-align: middle;

text-align: center;

font-size: 4vw;

font-size: 4vh;

font-size: 3vmin;

color: #ffffff;

padding: 0.3% 0% 0.001% 0%;

}

.copyright_store {

max-width:25%;

margin: 1% 0% 1% 8%;

float:left;

}

.email_spam {

max-width:25%;

margin: 2% 0% 1% 3%;

float:left;

}

.email_spam a {

color: #FF8C00;

}

.rights_dev {

max-width:25%;

margin: 1% 8% 1% 3%;

float:right;

}

.rights_dev span a {

color: #FF8C00;

}

Результат моей работы теперь виден на видео. Меняю масштаб, диагональ экрана, информация остается читаемой.

Новый дизайн www.thepresents.ru

Новый дизайн www.thepresents.ru

О крепкости заднего ума и обратной связи.

Как понять, что поступил правильно? Или понять, что принимал неверные решения? Что делать, если ты действоал неправильно? А если это все был твой подчиненный и бизнес потерял на этом деньги? Краткий ответ: смириться.

Я встречал несколько раз на своем опыте негативное отношение к предшественникам. Вот, мол, Пупкин был, вроде говорил хорошо, а когда начали разбираться, так там полный ахтунг и ужас! Или: «Вот позвали чувака, все по делу говорил, кучу денег заплатили, а потом оказалось, что все лажа и применить нельзя. Вор, обманщик и Обама!»

Я сам грешен, думал подобным образом много раз, пока не дозрел до одного просто факта: на тот момент эти люди не могли лучше, а раз никто их не остановил, значит и окружающие и вся экосистема работы человека не была готова к иному.

Это вытекает из одной важной предпосылки: какие задачи вы поставили человеку, какие критерии ему выбрали, какие сроки назначали, и как проверяли его в процессе, такой результат вы и получаете. А если руководитель еще и вмешивается в работу, добавляет задачи, ставит новые задачи, меняет приоритеты, увеличивая хаос — он получит ожидаемый уход человека и негативную славу. Кстати, это может быть системным подходом.

Так вот, задним умом мы все можем найти кучу неверных решений и ошибок. Все знают, как надо было делать, но никто не делал. А кто делал — делал как умел и как мог. И делал он исходя из каки-то приоритетов, предпосылок, ожиданий, которые нам, осуждающим и умным, неизвестны сейчас.

Но что важно в этой басне? Важно быть честным человеком. Например, я стараюсь всегда говорить правду. Иногда не договаривая, да, но если хотите услышать горькую правду от меня, просто попросите, я перешагну через барьер не раздумывая. И того же хочу от других.

Я больше чем уверен, что часто допускаю ошибки. Они могут стоить дорого, могут быть ерундой, а могут оказаться стратегически верным упущением, невыполнение которого поможет в дальнейшем. Но я об этом не знаю, но очень хотел бы.

Если бы мне говорили через месяцы и годы, что вот после тебя мы сделали так и так, и твои эти и эти решения были неверны, потому что вот так — я бы был благодарен человеку за это. Возможно, на новом этапе своего развития смог бы даже посоветовать что-то еще попробовать, вдруг им это поможет.

И исходя из этих соображений я в очередной раз проникаюсь уважением к Студии Лебедева, сотрудники которой могут и говорят правду, советуются и делают дела объективно.

А что делать, если не говорят плохого?

Просто наблюдайте, старайтесь делать выводы, можете публично признавать какие-то ошибки. Или в формате «Я сделал вот такое как у них вот так, и вроде стало лучше» можете доносить информацию до людей, если вам это важно.

Полуночная верстка для сна

Вечерами и ночами на этой и прошлой неделе я писал строки технического задания на разработку важного внутреннего проекта. Строк выходило много, потому что я занудно описывал каждое поле, кнопочку, варианты изменения интерфейсов и прочие штуки-дрюки с правами доступов. Помимо описания я еще и рисовал эти самые интерфейсы.

Так как мозг на это дело изрядно напрягался, надо было расслабляться. И нет ничего лучше на текущий момент, чем разобраться в вопросах верстки. Я прошел два курса «Блочная модель документа» и «Позиционирование» в полубессонном состоянии, и пытался разобраться с LESS. Хочу вас рассказать краткие выводы:

  • верстка — по-прежнему увлекательное дело;
  • каждый html-файл мне теперь представляется более логичным;
  • благодаря изучению, я понял, что и как хочу изменить на своем Магазине подарков;
  • первые шаги я уже реализовал через оформление карточки товара в магазине, увеличив шрифты, изменив поток документа и межстрочные интервалы;
  • я задался целью научиться разворачивать локальный сервер на своем макбуке, чтобы проводить эксперименты у себя, а выгружать удачные на сервер. Расскажу об этом в следующий раз.

У меня остается куча вопросов, которые буду когда-нибудь изучать без спешки:

  • Разобраться с java-script;
  • Разобраться с php;
  • Разобраться с Go;
  • Разобраться с вносом данных в базу данных и их извлечением.

Хватит питонить, будем css-ить

Увы и ах.

Программирование мне до конца марта не юзать. Просто потому, что дел сейчас слишком много, а поверхностно изучать смысла нет.

Потому переключаюсь более легкое для восприятия — CSS. Это про верстку сайтов, оформление и все прочее, называемое фронтендом.

Помогает мне в этом прекрасный ресурс www.htmlacademy.ru, курсы которых я начал изучать благодаря прекрасной д.

Новый день с Питоном

Продолжаем знакомство с Питоном.

Вы наверное давно ушли вперед меня, потому я решил нагонять все через видео. Сегодня я посвятил время пониманию и различию глобальных и локальных переменных. Глобальные — используемые во всей программе. А локальные — только внутри функций и для других функций. Одно и тоже имя переменной может быть и в локальной и в глобальной части. И Питон четко понимает, где какая из-за последовательности их применения. Это для понимания сложнова-то, потому я не переусердствовал, понимая только это. Остальное время посвятил изучению блочной верстки в HTMLAcademy.

И все, что я сегодня смог, это повторять штуки с этого видео:

Таким образом мы с вами осваиваем взаимодействие двух функций между собой. Значений и условия в одном используются в другом и дают один результат. И научился разделять глобальные и локальные