Перейти к содержанию

Давайте поиграем


Рекомендуемые сообщения

Предистория

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

Хотя может это от незнания?

кто делает сайты

Вообще в нормальной команде для веб разрабтки можно выделить несколько ролей,

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

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

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

верстальшик обычно ненавидит дизайнера, материт ie, и пытается подогнать крассивые пибабахи дизайнера, под какие либо стандарны

еще конечно на этом список не заканчивается

идея

Вообщем будем разбираться как сделать HandMade сайт.

Будут даваться задачки, подробно описывающие что и зачем нужно.

Каждый из участников игры будет писать код и выкладывать его на форум.

В подведении итогов:

по каждой задаче будут раздаваться :shit: и *109

Самый толковый код будет использован, как основа для следующих задач.

Так же в подведении итогов будем рассматривать как подобный функционал реализован в нескольких популярных CMS И FRAMEWORK'S

в итоге

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

Предварительное задание

Установить Apache+php

Как-то так работают интернеты

В глубокие далекости и технические тонкости сейчас углубляться не будем.

Drawing2.jpg

Все устройства в Интернете соеденены между собой с помощью кабелей, с помощь WiFi, GPRS (вообще это не важно, как). И если совсем упростить то каждое устройство имеет свой уникальный адрес, называется он IP-адрес. Умные люди сделали так, что все эти соединенные устройства умеют общаться между собой, используя эти ip-адреса. Кроме этого они решили, что помимо адресов еще хорошо было бы использовать и какие-либо смысловые названия типа google.com, ulanovka.ru, и т.д. Их назвали доменными именами или доменами. И научили все устройства с помощью специальных сервисов( DNS ) определять какой же IP-адрес соответствует доменному имени.

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

Но проводянка для Интернета одна!!! По этому придумали порты. С помощь них каждое приложение работает в как бы отдельном канале связи. Но при этом браузер у пользователя использует свой порт (например 1120), а сервер с порнушкой свой (80 порт).

Сервера на которых живут сайты, работают по протоколу HTTP (протокол –это типа, алгоритма взаимодействия между компании, использующий определенные команды с помощью которых один комп втолдыкивает второму, что ему нужно и в каком виде). Порт на котором работают сервера по протоколу HTTP по умолчанию 80.

Существует договоренность по которой определенные протоколы работают через определенным портам , обычно эти порты по умолчанию используют только серверными приложениями, а клиенты получают любой порт использующиеся их компьютером. Например список занятых портов в винде можно посмотреть C:\WINDOWS\system32\drivers\etc\services

То есть в нашем примере

IP-Адрес компа пользователя-120.12.100.2,

Пользователь хочет посмотреть порнушку по адресу porno.ru, и он просит браузер ее показать.

Комп спрашивает в Интернете, где живет porno.ru,

Выглядит это как то так


> google.ru
DNS Сервер: UnKnown
Address: 172.16.0.73
Имя : google.ru
Addresses: 74.125.232.52
74.125.232.51
74.125.232.49
74.125.232.48
74.125.232.50
nslookup

Ему отвечают на 120.12.100.7,

Браузер открывает новый порт – 1120

И отправляет запрос с помощью протокола http:

Эй ты 120.12.100.7, на твоем порту 80, лежит сайт с порнушкой porno.ru, давай-ка мне его сюда. Я 120.12.100.2, мой порт 1120

В реальности запрос выглядит как-то так:


Host: www.site.ru\r\n
Referer: http://www.site.ru/index.html\r\n
Cookie: income=1\r\n
\r\n
GET http://www.site.ru/news.html HTTP/1.0\r\n

А сервер в ответ:

На тебе 120.12.100.2, на порт 1120 все что пожелаешь.


Date: Wed, 11 Feb 2009 11:20:59 GMT
Server: Apache
X-Powered-By: PHP/5.2.4-2ubuntu5wm1
Last-Modified: Wed, 11 Feb 2009 11:20:59 GMT
Content-Language: ru
Content-Type: text/html; charset=utf-8
Content-Length: 1234
Connection: close
(далее следует запрошенная страница в HTML)
HTTP/1.0 200 OK

В итоге брузер загружает сайт

пользователь видит Сиськи.

Какие сиски реально видит, думаю каждый сам может представить )))

Как то так в общих словах работают интернеты.

WWW

Теперь углубимся в сторону веб.

Drawing1.jpg

Браузер(internet explorer, opera, firefox,chrome) -эта такая программа, которая умеет передавать, принимать и обрабатывать сообщения протокола http.

То что ищет браузер в Интернете по имении ulanovka.ru представляет собой компьютер, на котором постоянно работает приложение, оно называется веб-сервер.

Главной задачей веб сервера является передача, прием и обработка сообщений протокола http.

Примерами таких веб серверов могут быть, Apache,nginx, iis.

Что бы не вникать в тонкости настройки, некоторые используют сборки, например

Джентельменский набор разработчика Denver, или XAMMP.

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

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

Например https://ulanovka.ru/uploads/images/avatars/gallery/ulanovka_gallery/000226.jpg

Скорее всего, эта картинка лежит на сервере вот здесь:

Папка где хранится сайт\forum\images\avatars\gallery\ulanovka_gallery\000226.jpg

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

Например: php, ruby, asp.

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

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

Веб используют разные сервера баз данных: mysql,firebird, mssql,oracle.

Выбор конкретной базы данных зависит от требований к разрабатываемой системе.

Итак сервер выдал нам какой-то ответ.

Нажмите ctrl+U и увидите эту хрень.

Это HTML.

HTML- это не язык программирования!!!!

Это способ разметить тест.

Например

- значит что это заголовок.

Это значит абзац

  • Значит список.

По умолчанию, текст черный размер его какой-то не большой, фона нет. А дизайнерам хочется каких-нибудь финти-хрюшек.

Вот и придумали CSS. Это набор привил оформления,

Например, написав такое правило

body{

color:#f00;

}

Мы сделаем весь текс на странице красным.

Текс есть текст, в нем нет жизни. Но хочется же, что бы по клику по имени пользователя на ulanovke.ru я смог бы процитировать сообщение пользователя.

Вот для таких вещей придумали языки программирования выполняющиеся в браузере,

Например, js, Action Script,Silverlight.

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

А некоторые, передаются в браузер ввиде исходных кодов. И выполняются в нем.

Вот как то так выглядит эти интеренты.

На какие-то конкретные вопросы я могу ответить , но писать мануалы по установке Apache+php, как писать программы на php, да и вообще как писать программы не вижу смысла.

Начинаем

История 1 Все начинается с url.

Проблема 1

Drawing6.jpg

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

Допустим у нас есть сайт,

Drawing61.jpg

index.php- отвечает за предоставление главной страницы обычным посетителям сайта.

admin.php- панель администратора, в которой можно изменять контент главной страницы

Доступные ссылки

http://site/index.php'>http://site/index.php

http://site/admin.php'>http://site/admin.php

Если разработчики хотят добавить новую страницу на сайт, например контакты, им придётся

Добавить еще один файл contact.php

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

Аналогичным образом мы добавим несколько новых возможностей для администратора.

И в итоге получим следующие доступные ссылки.

http://site/index.php'>http://site/index.php вывод главной страницы

http://site/index.php'>http://site/index.php?content=index аналогичная предыдущей ситуация

http://site/?content=contact'>http://site/?content=contact страница с контактами

http://site/ вывод главной страницы

http://site/?content=index аналогичная предыдущей ситуация

http://site/index.php'>http://site/index.php?content=contact страница с контактами

http://site/admin.php'>http://site/admin.php вывод формы авторизации администратора

http://site/admin.php'>http://site/admin.php?content=login аналогичная предыдущей

http://site/admin.php'>http://site/admin.php?content=show_panel вывод -панели администратора

http://site/admin.php'>http://site/admin.php?content=edit_page&page=index редактирование главной страницы

http://site/admin.php'>http://site/admin.php?content=edit_page&page=contact редактирование страницы контактов.

Вот сколько ссылок получается доступно любому пользователю

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

Проблема 2

Вообще ради экономии ресурсов вместо логических названий используют идентафикаторы:

Было

http://site/index.php'>http://site/index.php?content=index- вывод главной страницы

http://site/?content=contact'>http://site/?content=contact - страница с контактами

стало

http://site/index.php'>http://site/index.php?content=1

http://site/?content=2

запрос уменьшился но читаемость исчезла

Вы наверное подумали так

http://site/index.php'>http://site/index.php?content=1 - вывод главной страницы

Если content хранится в базе данных

| id | content |

| 1 | наш телефон 22-22-22 |

| 2 | Добро пожаловать на наш сайт |

Как видите легко ошибится )

Проблема 3

http://site/?content= 1 - страница контактов.

Здесь переменная content отвечает за то какая страница будет выведена

Так как в нашем примере content берется из базы данных

http://site/index.php'>http://site/index.php?content=1’ - такой url выдаст ошибку базы, если не обработать переменную content предварительно.

Такая ошибка называется sql-инъекция. Злоумышленник при помощи нее сможет получить любые данные из ваше базы данных.

В частности он получит пароли администратора, и крындец всему сайту))

А почему бы не проверить эту переменную?

Да потому что, забыли.

Сложно забыть когда переменная одна, http://site/?content= 1

А когда так http://site/?content= 1&user=12323&id_action=23&search=efrggfhhghffghfhfg&a=1&aaaa=4&asdad=3

Люди не машины они всегда допускают ошибки.

Проблема 4

Допустим у нас на сервере лежит куча скриптов для обрабоки каких -либо задач

Например del_page.php - у нас удаляет страницу с сайта.

Что мешает любому пользователю обратится по адресу http://site/del_page.php

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

http://site/config.txt

Немного об url

Исторически сложилось что вот как-то выглядят ссылки

http://site/saidjdfoijsdfoijosdwoiewjcdvjsdweo.php?adsoss_content=price&aoosd_sort=cost& assdos_order=asc

Эта ссылка будет выводить табличку с товарами сортированную по цене.

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

А через месяц вспомните?

Гораздо приятнее для взгляда и безопаснее сделать ссылку такой

http://site/price/cost/asc/

Это называется ЧПУ( человеко понятный урл)

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

http://site/price/

Постановка задачи

Делаем обработчик всех приходящих запросов.

Входные данные

У нас есть настоящая ссылка вида

/page/

Есть набор разрешенных ссылок

/

/contact/

/login/admin/

/admin/

На выходе ваш скрипт должен вернуть true или false.

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

Рекомендации

  • применяйте ООП.

Ссылка на комментарий

в правду толком ничего не написал)))

Вообщем будем разбираться как сделать HandMade сайт.

Будут даваться задачки, подробно описывающие что и зачем нужно.

Каждый из участников игры будет писать код и выкладывать его на форум.

В подведении итогов:

по каждой задаче будут раздаваться :shit: и *109

Самый толковый код будет использован, как основа для следующих задач.

Так же в подведении итогов будем рассматривать как подобный функционал реализован в нескольких популярных CMS И FRAMEWORK'S

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

Для начала игры надо набрать хотя бы человек 5, после этого будет дано 1 задание.

А пока подготовительный этап, надо поставить с свой компютерик Apache и PHP.

Ссылка на комментарий

чото неинтересно, лучше наподобие форумных игр

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

а следующий должен назвать на последнюю букву - Р...

на IT-тематику

Ссылка на комментарий

mr.unkind90 а в твоей игре что интересного? хочешь поиграть в слова иди в "Форумные игры".

nonlux

надеюсь у тебя получится собрать команду. будет очень интересно посмотреть. напиши постояльцам этой ветки предложение в ЛС, может кто и откликнетсО.

Ссылка на комментарий
mr.unkind90 а в твоей игре что интересного? хочешь поиграть в слова иди в "Форумные игры".

ну так там обширный набор слов, а здесь узкий

я даже не знаю слово из IT начинающееся на "Р"

радиатор не предлагать, PASCAL - это по английски.

тем более в форумные игры программисты не заходят.

Ссылка на комментарий

mr.unkind90

Я думаю этому здесь не место.

Lelush,29a

Спасибо за поддержку

haha

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

bula3

Вот *112. Это как минимум по оптимазации, и по умению читать чужие сообщения.

А вообще прочитай первый пост. Там ничего не сказано о том, о том что бы свои сайты сюда выкладывать.

Ссылка на комментарий

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

Установить Apache+php

эмм... денвер подойдет?

в смысле, может вам, программистам, принципиально по-отдельности все устанавливать..)

Ссылка на комментарий

Игра один из лучших способов обучения.

По этому мы все будем учится, я одному вы другому))

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

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

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

по поводу денвера я не против, но в итоге если у тебя не будет каких-то модулей дря apache или расширений и pear для php тебе придется разбираться и с этим.

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

Ссылка на комментарий

1. Поставьте linux. =)

2. php + apache не панацея.

И для нормальной работы нужно 3 человека.

web программист(python/ruby/php/net/java/)(со знанием того где это дело будет разворачиваться и с базовыми знаниями дизайна)

дизайнер

И человек который рубит и в дизайне и в программировании. (верстка на нем обычно.)

Код - http://video.gunlinux.org


#!/home/loki/flask/env/bin/python2
# -*- coding: utf-8 -*-
from flask import Flask,request,render_template
import re,urllib
#
app = Flask(__name__)
app.debug=True
#
"""
def hack_sibnet(text):
text = urllib.unquote(text).encode('1251')
data = {"text": text ,'rubid':'0','inname ':'1','intext':'1','inkeyw':'1','inalbom':'1'}
enc_data = urllib.urlencode(data)
f = urllib.urlopen("http://video.sibnet.ru/search.php" + "?" + enc_data )
data = f.read().decode('cp1251')
return [{'id':i[0],'name':i[1]} for i in re.findall(r'(.+)',data)]
#
"""
def finder(pattern,data):
rez = re.findall(pattern,data)
if len(rez)==0:
return None
return rez[0]
#
def get_audio(url):
try:
url = urllib.unquote(url)
except:
return None
return finder(r'(http://.+\.mp3)',url)
#
#
def work_url(url):
try:
url = urllib.unquote(url)
except:
return None
videoid = finder(r'http://video.sibnet.ru/video([\d]+)',url)
print videoid
if videoid:
t = "http://video.sibnet.ru/upload/video"+videoid+".flv"
return t
rez = finder(r'(http://.+\.html)',url)
if rez:
f = urllib.urlopen(rez)
try:
data = f.read()
except:
return None
fileurl = finder(r'(http.+\.flv)',data)
fileurl = urllib.unquote(fileurl)
return fileurl
return None

def get_video(url):
try:
url = urllib.unquote(url)
except:
return None
return finder(r'(http://.+\.flv|http://.+\.mp4)',url)
#

@app.errorhandler(404)
def page_not_found(e):
return render_template('404.html'),404
#
@app.route('/',methods=['POST','GET'])
def main():
if request.method == 'POST':
if request.form['text']:
url = request.form['text']
try:
url = urllib.unquote(url)
except:
pass
audio = get_audio(url)
if audio:
return render_template('player.html',audio=audio,url=url)
video = get_video(url)
if video:
return render_template('player.html',video=video,url=url)
video = work_url(url)
if video:
return render_template('player.html',video=video,url=url)
if request.method == 'GET':
if 'url' in request.args and request.args['url']:
return render_template('player.html',video=work_url(request.args['url']),url=request.args['url'])
return render_template('player.html')
#
@app.route('/robots.txt')
def robots():
return 'User-Agent: *\rDisallow: *\r\rHost: video.gunlinux.org'
#
#
if __name__ == '__main__':
app.run('127.0.0.1',5006)

Ссылка на комментарий

L0K1

Извини но ты о чем?

К чему линунс?

По моему здесь не трольтема о том что круче win, lin, maс и иже с ними.

php apache не понацея, это факт. но к чему это, если тема о том что бы построить как построить веб приложение на php и разобраться, как работают некоторые из движков.

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

И к чему код http://video.gunlinux.org?

Ссылка на комментарий

mac os - на ней создаются веб приложения.

linux - на нем они работают.

windows - на нем проверяется верстка ie6/7/8.

Для веб разработки must have, имхо.

Под движком что понимается?

Самый простой способ изучить технологию.

1. Берем язык <любой(php/ruby/python)>

2. Пишем маленькую гостевуху.

3. По дороге разучиваем ,,,

4. Берем VMC фреймворк этого языка

5. Пишем что нить посложнее

6. По дороге гораздо подробнее ковыряем ,,

Тут надо начинать не с php+apache, а ссылка на php в трех строчках. rest интерфейс, html наконец, css как бонус.

И правильный алгоритм разработки сайта/приложения. С сылочками на матчасть.

Ссылка на комментарий
4. Берем VMC фреймворк этого языка

Вот я о том что бы разобрать как это работает)

Добавлено спустя 5 минут 48 секунд:

А почему php?

Мне нужен этот опыт в рамках php.

Ссылка на комментарий

nonlux

Вот вы говорите задачки несложные, а может ли чему-то научиться настолько жёсткий нубас, который даже не знает, что такое Apache и PHP?

Ссылка на комментарий

Как кое-где говорят, нло удалило это сообщении

Пожалуй луна на меня сильно действует, а тяжелый рабочий день вообще выкрутил могзи

Простите если обидел.

Ссылка на комментарий

наверное он хотел сказать, сможет ли человек который плохо в этом шарит , участвовать в этой игре ,что то решать и научиться чему-то

Ссылка на комментарий

blackdevil

Ой ты прав.

ViktorOBM

Прошу прошения, пост удалил.

ViktorOBM

Конечно можно, для начала попробуй сам разобраться, гугль в помощь.

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

Еще раз прошу прошения

Ссылка на комментарий

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...