четверг, 25 марта 2010 г.

так вот ты какое: "нету времени"

www.nkj.ru/interview/4624/

Ученные люди говорят:
«Мозг действительно потребляет очень много энергии. Но до четверти (а не до трети, как пишет г-н Ларин) энергии мозг потребляет лишь, когда интенсивно работает. Однако через две недели интенсивной работы мозга человек может умереть от нервного истощения, поскольку организм просто не успевает обеспечить энергетически такую работу мозга. Поэтому мозг обычно использует все свои ресурсы, чтобы не работать интенсивно. И поэтому лень – неотъемлемое свойство человека, которое поддерживается специальной системой эндорфинов. То есть на протяжении всей эволюции мозг, особенно приматов и человека, пытается снизить свою нагрузку. Исходя из этого, «созидание» в понимании этого слова в полной мере, энергетически не выгодно. Все люди экономят на собственных мозгах и патологически ленятся. Выгоднее ненадолго включить сложную машину и тут же ее отключить. Это означает, что выгоднее иметь мозг большой и пользоваться им редко, а не маленький, и постоянно его эксплуатировать.

суббота, 20 марта 2010 г.

Никогда не знаешь какое говно может случиться ...

~ во вторник вечером отключил антивирь, т.к. срочно нужно было посмотреть одну хрень (торопился видите ли).

В итоге подхватил вирус, слетела разметка винта %)
В итоге тупо неделя коту под хвост.

Зато приобрёл опыт ... и теперь точно знаю, что надо брать 2-й винт и каждую неделю делать бекапы ... эх ...

четверг, 4 марта 2010 г.

Урок №2

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

а как у вас дела? всё ещё сложно и ничего не понятно? ... А разделы книжек, приведённые в самом начале - вы изучили? Да? Видимо программирование - это не ваше ... забейте :)
=================================================

а мы двинемся дальше:

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

авторизация для пользователей
восстановление пароля (хз будет ли работать mail() На денвере, но хотя бы теоретически напишите, а я скажу как оно будет работать )

отдельная авторизация для админа
админ после авторизации может видеть всех пользователей, удалять ненужных

пользователь после авторизации может менять пароль и мыло, заливать новую аватару, просто удалять старую (если есть) и не заливать новую

авторизация для пользователей на сессиях
для админа на куках
(в общем то в риал-проекте авторизации обычно эдентичны, просто хочу чтобы и с тем и с тем попробовали поработать)

... на пару дней разбирательств думаю хватит

среда, 3 марта 2010 г.

Контроль работы

Сегодня мне прислали посмотреть ...

***************************************


// ПРоверяем создана ли таблица, если нет - создаем
require_once("config.php");
$query = "SELECT * FROM users";
if (empty($query)) {
//SQL - запрос
$query = "CREATE TABLE users (
id_users INT(11) NOT NULL AUTO_INCREMENT,
name TINYTEXT NOT NULL,
pass TINYTEXT NOT NULL,
PRIMARY KEY (id_users))";
if (mysql_query($query)) {
echo"Таблица создана успешно";
}
}

//Удаляем лишние пробелы
$_POST['name'] = trim($_POST['name']);
$_POST['pass'] = trim($_POST['pass']);
$_POST['pass_again'] = trim($_POST['pass_again']);

// Проверка заполнения полей
if (empty($_POST['name'])) exit('Ваш логин, сэр');
if (empty($_POST['pass'])) exit('Ваш пароль, сэр');
if (empty($_POST['pass_again'])) exit('На какой-то из паролей вызабили, сэр');
if ($_POST['name'] != $_POST['pass_again']) exit('Пароли не совпадают, сэр');

//Проверка на уникальность
require_once("config.php");
$query = "SELECT COUNT(*) FROM users WHERE name = '$_POST[name]'";
$usr = mysql_query($query);
if (!$usr) exit("Ошибка - " . mysql_error());
$total = mysql_result($usr, 0);
if ($total > 0) {
exit("Данный логин уже существует...");
}

// Добавляем нового пользователя
$query = "INSERT INTO users
VALUES(NULL,
'$_POST[name]',
'$_POST[pass]')";

mysql_query($query);


// Удалить / Редактировать//
//Создаем таблицу
$query = "SELECT * FROM users";
$usr = mysql_query($query);
if (!$usr) exit("Ошибка - " . mysql_error());
if (mysql_num_rows($usr) > 0) {
echo "";
echo "



Логин
";
$i = 0;
while ($users = mysql_fetch_array($usr)) {
echo "

$users[id_users]
$users[name]
";
$i++;
}
echo "";
echo "";
echo "";
}

// Удаление
if (!empty($_POST)) {
$temp = array();
foreach ($_POST['users'] as $id_users) {
if (preg_match("|^[\d]+$|", $id_users)) {
$temp[] = $id_users;
}
}
$query = "DELETE FROM users WHERE id_users IN (" . implode(",", $temp) . ")";


*************************************

ну что ж - посмотрим ... на это кхм-кхм - безобразие :))




// ПРоверяем создана ли таблица, если нет - создаем
$query = "SELECT * FROM users";
if (empty($query)) {
//SQL - запрос
$query = "CREATE TABLE users (
id_users INT(11) NOT NULL AUTO_INCREMENT,
name TINYTEXT NOT NULL,
pass TINYTEXT NOT NULL,
PRIMARY KEY (id_users))";
if (mysql_query($query)) {
echo"Таблица создана успешно";
}
}



о чём нужно думать, чтобы проверять на то - существует ли таблица или нет? :)
Это можно использовать если вдруг мы будем писать установщик для какой-нить массовой системы ...
ну а так - мы ведь пишем под себя, 100% знаем что база есть - нафига делать лишнее телодвижение. (это имхо)

А теперь про безобразие:
// ПРоверяем создана ли таблица, если нет - создаем
$query = "SELECT * FROM users";

я точно не знаю, как работает БД, но предполагаю, что когда мы делаем запрос к ней - то она выполняет его - и нашу выборку сохраняет в ОЗУ ....

представим что у нас 10к пользователей, каждый заполнил параметры "о себе" и т.д. ... в общем полный букет всего ...
и что мы делаем вот этим: "SELECT * FROM users" ? Выбираем всё-всё-всё, что есть в таблице users ... и ради чего? ради того - что проверить существует таблица или нет? Не смешите :)

если уж хочется добавить таблицу (на всяк случай) если не существует - то юзайте sql запрос:
http://phpclub.ru/mysql/doc/create-table.html
(CREATE TABLE IF NOT EXISTS tbl_name)

***

идём дальше:

//Удаляем лишние пробелы, // Проверка заполнения полей

молодец :)

//Проверка на уникальность
require_once("config.php");

нафига? я понимаю что не приинклудится конфиг ... но и зачем это надо, если оно уже у нас есть?

$query = "SELECT COUNT(*) FROM users WHERE name = '$_POST[name]'";

у нас логин уникальный? так?
А почему нет уникального индекса для этого поля в БД? :)
когда используете WHERE в запросе без сортировок и группировок - индексы и уникальные индексы облегчат жизнь процессору и ему не придётся искать по всей базе в 10к пользователей и он остановится при 1-м найденном пользователе (т.к. он будет знать, что запись с таким логином уникальна) ...
но не вздумайте под лозунгом "есть индексы - это хорошо, нет индексов - плохо" ставить индексы на каждое поле, т.к. они замедляют добавление, редактирование, удаление в БД ...

в общем читаем и мотаем на ус:
http://ru.wikipedia.org/wiki/Sparse_index


( name TINYTEXT NOT NULL )
почему TINYTEXT, а не varchar? для текстовых записей нет индексов ... не мучайте базу данных :)



// Добавляем нового пользователя
$query = "INSERT INTO users
VALUES(NULL,
'$_POST[name]',
'$_POST[pass]')";

не ленитесь указать те поля, которые хотите добавить ... ну т.е. вот так:
$query = "INSERT INTO users (name, pass) VALUES('$_POST[name]', '$_POST[pass]')";

т.к. если вдруг вы потом добавите по просьбе заказчика ещё одно незначащее поле, которое не надо добавлять в этом запросе ... и так 10 раз, и так в нескольких таблицах и нескольких местах ...

проклянёте всё на свете, когда будете бегать по всем скриптам и искать куда же вставить добавление пустоты ('') ... и не говорите потом, что я вас не предупреждал :)

***

$i = 0;
while ($users = mysql_fetch_array($usr)) {
echo "

$users[id_users]
$users[name]
";
$i++;
}

так и не понял - нафига тут $i )))))


echo "";
echo "";
echo "";

wtf? ) Помните, что echo - это вывод на экран и работает она "долго"...
потом, когда это будет более важно - кину линк (если найду) на журнал php inside - там была интересная статья по поводу оптимизации скриптов и что сколько и как выполняется ... но это так - на будущее (или если сильно интересно - можете сами найти).

****



// Удаление
if (!empty($_POST)) {
$temp = array();
foreach ($_POST['users'] as $id_users) {
if (preg_match("|^[\d]+$|", $id_users)) {
$temp[] = $id_users;
}
}
$query = "DELETE FROM users WHERE id_users IN (" . implode(",", $temp) . ")";

mysql_query($query);
}

("Ни хрена не получается...
Точнее, предволагаю, что $_POST уже имеет даные отличные от $id_users пробовал post заменить на get ошибок не выдает но и логины из таблицы не удаляет..." - комментарий автора в асе)

я так и не понял что ты тут делал ... здесь какой-то бред, либо ты не понял что я от тебя хотел :)


post может передаваться либо через форму, либо ручками программиста вставляется в заголовок, отправляемый серверу ...
чтобы что-то удалить из базы - вот самый примитив:

if ( !empty($_GET['id']) ) {
mysql_query("DELETE FROM users WHERE id_users = $_GET[id]");
}

$query = mysql_query("SELECT id_users FROM users");
while ($users = mysql_fetch_array($query)) {
echo "<а href="?id=$users[id_users]">Удалить
";
}


.....................................

P.s.
$query = "SELECT * FROM users";
$usr = mysql_query($query);

если будете писать скрипты "для меня" - в смысле чтобы мне показать - пишите вот так:
$query = mysql_query("SELECT * FROM users");

т.е. чтобы в $query уже был результат выполнения SQL (просто я так привык - и мне так наглядней ...)

праймари кей называйте id для каждой таблицы (а не id_users), ведь он у вас будет один, и мы 100% будем знать, что id - это то что нам надо ... и писать короче :))

(я так привык ... плохо / хорошо - хз ... но ... стандартны в данном блоге - я задаю :))


На это вроде всё.
что я могу сказать? - не дурно, очень не дурно для человека, который ещё вчера совсем ничего не знал про mysql ...

P.s.s. бляха-муха ... гугл сука режет пхп скрипты ... уже задрался редактировать %)
ненавижу, когда боты вмешиваются в мою ручную работу )

P.s.s.s. если будут вопросы - с ними ко мне в асю, комменты читаю (если они есть :)) только к предыдущему посту, когда собираюсь написать новый ... и всё.

Урок №1

Первым заданием для наших подопытных было:

1). ознакомится (если ещё не ознакомились) с вот такими вот разделами (которые обычно есть в каждой более-менее порядочной книге по пхп):

Глава 5. Операторы и конструкции языка,
Глава 6. Массивы
Глава 7. Функции
Глава 8. Взаимодействие PHP с HTML
Глава 11. Дата и время
Глава 15. Cookie
Глава 16. Сессии
Глава 19. Сетевое взаимодействие. Сокеты и CURL
Глава 27. Работа с СУБД MySQL
Глава 28. Взаимодействие MySQL и PHP

(по поводу взаимодействия пхп с mysql - прочитай только про ф-ции

mysql_query
mysql_result
mysql_fetch_array
mysql_num_rows
mysql_error
ну и + про подключение к базе данных и т.д. ...)


после ознакомления с материалом - надо написать вот такую вот вещь:

"создаёшь базу данных, в ней будут хранится пользователи
(ид, логин, пароль (пароль зашифрован в md5))

дальше пишешь форму регистрации
поля: логин, пароль, подтвердить пароль
кнопка "зарегистрироваться"

в скрипте проверка пароля на совпадение
дальше, если всё ок - данные заносятся в базу.

и в этой же странице, прямо под формой добавления - выводятся все наши добавленные пользователи.

+ в каждой строке кнопка редактировать / удалить
при нажатии на удалить - юзер из бд удаляется, при нажатии редактировать - нужно чтобы в какой-нить форме мы могли редактировать логин юзера. "

как мне показалось - это задание сможет наилучшим образом помочь человеку "пощупать" создание форм, взаимодействие этой формы с php, управление записями в БД.
собственно это основа основ ...

Изучаем php

Итак, с сегодняшнего дня здесь будет поститься нечто из обучения по ПХП. То, что мне влом рассказывать каждому "подопытному" в асе + если чё - чтобы было то, на что сослаться ...

приступим:

1-е и основное что надо знать - и соблюдать - это стиль программирования. Ибо я терпеть не могу смотреть на всякую фигню ...

для этого ознакамливаемся с вот этим материалом:

http://framework.zend.com/manual/ru/coding-standard.coding-style.html

там не много, и даже на русском :)
(основные моменты - про кавычки, табуляцию, всякие отступы и т.п., + расположение фигурных скобок ( { ... } ) )


кто не будет соблюдать основных требований ... те будут жестоко проигнорированы...

АП тиц

Помните забаненый домен спамил по всякой фигне на полном автомате незадумываясь? ну чисто ради эксперемента?

... так вот: Тиц 20, ёпты :)))))

Аж настроение поднялось :)
Жаль что остальные 25 не спамились и по нулям тиц у них ... а может быть и к лучшему, то что они все живы и здоровы ... :)

вторник, 2 марта 2010 г.

Я.аДминистратор %)

Взял в аренду сервер на месяц ... что я могу сказать? - это ппц %)
Знал бы, что будет стока совокуплений с командной строкой - 10 раз подумал бы, прежде чем брать ...

но потом бы всё равно бы взял - деваться то некуда - старт ап не ждёт )

развёрнутый ответ на коммент к предыдущему посту

>>Не думал найти просто нормальную работу, а не парится с яндексом и банами?
>>Если считаешь что это твое будущее то зачем учишся в универе?


вэб? - моё будущее? =))))
откуда вообще берётся такая информация? :)

>>Не думал найти просто нормальную работу, а не парится с яндексом и банами?

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

и вот ещё что - с яндексом и банами я не парюсь :)
всё своё свободное время я трачу на программирование, потому что мне это чертовски нравится и яндекс тут совсем не при чём ... вам не понять :)

университет ... бросить?
зачем? я молод и красив ... и полон сил :)
я не настолько слаб, чтобы его бросить ... ибо универ == диплом == 80% трудоустройства по специальности. (без диплома 5-10% (имхо)). А это гарантия того, что я всегда смогу устроится на работу и кормить семью ... которая, ясен пень, у меня когда-нибудь будет. О них ведь тоже нужно думать ... за раннее так сказать...

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

ведь если случится что-то, что похерит всё что было нажито? куда идти? а никуда - бэкапы надо вовремя делать ... бизнес приходит и уходит, а знания и опыт - только приходят (ну только если без аварий и по голове никто не настучит).

ну а веб - веб это моё хобби, которое приносит доход

====================


а теперь по существу:

>>Не думал найти просто нормальную работу, а не парится с яндексом и банами?

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

>>Если считаешь что это твое будущее то зачем учишся в универе?

я так не считаю :)

..........
отсюда сразу вопрос наверна будет: "а если не считаешь вэб своим будущим, то зачем работаешь в вебе" ? )))))

глупость какая-то %)

понедельник, 1 марта 2010 г.

01.03.2010

С 1-м днём весны ... точнее вечером :)

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

Т.к. всё работает так как задумано - и сайты индексятся, и скрипты не подводят ... в общем ВСЁ работает по плану ... кроме меня :(
навалившиеся заботы снежным комом накапливаются с каждым днём, и как только подумаешь о том, как их всё таки решить - так хочется залезть в тёплую ванну и пролежать в ней весь день ...

и так, что же меня ждёт в этом сезоне:
  • 1-е и основное - очередной заёбистый семестр в универе (каждый будний день с 8 до 15 нужно быть в универе (+ дорога туда / обратно) ... времени вагон в общем остаётся на все дела + выполнение ДЗ %)))
  • 2-а курсовых проекта %) (с ума сойти, в прошлом семестре еле-ели один сдал)
  • в конце семестра экзамен, вместо модулей (из-за каратина) ... что означает: летом придётся учить в 2-а раза больше, 2-х халявных недель в середине семестра - не будет :(
  • автошкола с конца марта
  • новый сапамарафон (который якобы должен вернуть меня на землю и заняться полной автоматизацией процесса (кроме уже автоматизированного написания уник статей :))
  • старт ап (моя попытка номер 5 :))
Отчёт о проделанной работе за 2-ю часть февраля будет краток:
я кодил старт ап, получил аттестат продавца в ВМ, сейчас вот уже пару телодвижений осталось до того, как я арендую впервые в жизни целый сервак под это дело ... и вперёд! Яху!

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