[WT] [Архив]  [Поиск] Главная Управление
[Совместно с Ычаном]
[Назад] [Вся нить] [Первые 100 сообщений] [Последние 50 сообщений]
Ответ в нить [Последние 50 сообщений]
Имя
Animapcha image [@] [?]
Тема   ( ответ в 17424)
Сообщение flower
Файл 
Пароль  (для удаления файлов и сообщений)
Параметры   
  • Прежде чем постить, ознакомьтесь с правилами.
  • Поддерживаются файлы типов 7Z, BZ, BZ2, GIF, GZ, JPG, MO, MP3, OGG, PDF, PNG, PSD, RAR, SVG, SWF, TXT, XCF, ZIP размером до 10000 кБ.
  • Ныне 2761 unique user posts. Посмотреть каталог
  • Максимальное количество бампов нити: 500
150783928026.png-(881.78KB, 720×720, junior_developer_elma.png)
17424
No. 17424 Закреплено watch    
Здесь можно получить помощь и консультацию по любому языку программирования, в любой сфере разработки. Не важно, программируете ли вы собственного робота, пишете серверную приблуду, интегрируете чужие API, ковыряете игру, или пытаетесь сделать сайт на Wordpress - если аноним что-то об этом знает, он обязательно поможет.

Пополняемая база знаний: http://pastebin.com/AGhLZppH

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

Другие тематические нити: (не стесняйтесь их поднимать)
Java: >>/dev/13949
Python: >>/dev/14767
Rust: >>/dev/16152
RenPy: >>/dev/14429

Примеры кода лучше выкладывать в виде ссылок на http://pastebin.com или http://ideone.com
Фронтендные вещи лучше выкладывать на http://jsfiddle.net

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

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

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

Архив нитей:
http://410chan.org/dev/arch/res/14160.html
http://410chan.org/dev/arch/res/15681.html

Прошлая нить пока тонет тут: >>/dev/15861
267 сообщений пропущено. Показаны 50 последних сообщений Развернуть все изображения
No. 18566    
151569270687.png-(15.96KB, 448×448, 1202259007194.png)
18566
Чтобы построить индекс доски, движки прочёсывают чуть ли не всю БД в поиске нужных постов, так? А что если хранить слепки тредов отдельно, а в индекс напихать iframe? Тогда слепки тредов пересобирать каждый раз не надо, главное только сортировку в индексе правильную указать.
Какие подводные камни? Это вообще реально?
No. 18569    
>>18566
Я тебя правильно понимаю, ты хочешь хранить куски html с тредами в базе данных для ускорения отдачи? Если да, то снижение нагрузки на сервер и базу традиционно решают прикручиванием кеширования, которое и отдает тебе статичный слепок доски, который обновляется раз в заданный интервал, например, раз в минуту. Это универсально, и снимает необходимость думать что-то на этот счет с разработчика.
No. 18570    
>>18569
>ты хочешь хранить куски html с тредами в базе данных для ускорения отдачи?
Нет, я хочу хранить куски html файлами на сервере, а сшивать их со стороны клиента без использования ЖС. Тогда кэш решается самим браузером и/или там nginx. Ничего лишнего в БД я хранить не хочу.
И пост вообще не про отдачу кеша, а про то как не перестраивать его при построении индекса, когда в общем-то и не надо. И я не ищу динамические решения, там этот вопрос вообще не стоит.
No. 18571    
>>18569
html с тредами а досками собирается в момент постинга, дальше отдаются собранные файлы. Кеширование тут ничего не решает.
Возможно, он имеет в виду, что после постинга необходимо пересобрать:
1) Тред, в который постили. Запрос вида SELECT FROM posts_b WHERE parent={thread_id}
2) Собрать каждую страницу на доске.
2.1) Для каждой страницы нужно получить по 10 тердов. SELECT
FROM posts_b WHERE parent=0 ORDER BY bumped DESC
2.2) Для каждого треда на странице получить его последние посты. SELECT * FROM posts_b WHERE parent={thread_id} ORDER BY timestamp DESC LIMIT 10
3) Не забыть про >>ссылки. Каждая ссылка на пост проверяется на наличие такого поста и его родительский тред (иначе не поучится сделать ссылку). SELECT parent FROM posts_b WHERE id={post_id}
Итого у нас при 10 страницах, 10 последних постах и 500 постах в треде: 1 запрос для пересборки треда, 1 запрос для получения всех тредов на доске, 100 запросов на получение последних постов в каждом из тредов, 1500 запросов для парсинга >>ссылок. В общей сложности рендерятся 11 файлов.
No. 18574    
>>18535
убунта 17.04 А по серверу классика - LAMP. правда я еще питон решил поставить потом.
No. 18576    
>>18571
Да. И из этих "100 запросов на получение последних постов", 99 абсолютно лишние - ибо не меняются, - и жрут время не только на выдёргивание из БД, но и записи на диск, если движок предусматривает статику - построил-и-забыл. А с динамикой-то решение >>18569 вполне работало бы.

Может я в картинках распишу, что хочу узнать? Я не уверен, что ясно излагаю для стороннего наблюдателя идею.
No. 18578    
>>18576
Да в принципе запросто можно собирать эти куски тредов с последними постами и потом их оттуда доставать и встраивать в шаблон. Время на рендер шаблона незначительно сократится, зато запросов уже будет на 100 меньше. Да, сколько постов и картинок пропущено это тоже запрос к базе, получается 200 запросов.
Вот только основная масса времени будет тратится на парсинг поста. Например, если сейчас я напишу >>18580 , то оно отобразится как статичный текст, поскольку невозможно составить ссылку, не зная тред поста. Несколько постов спустя, эта ссылка активируется, что говорит о том, что при каждом новом посте парсилась разметка каждого поста в треде и постов на странице. Собранный html поста можно хранить в базе, и производительность это улучшит намного больше. Правда, при этом мы теряем возможность загадывать геты >>20000
No. 18579    
>>18578
>Несколько постов спустя, эта ссылка активируется
Вообще, по крайней мере в более старых движках (например, здесь), старые посты не переписываются, а остаются как есть. Вакаба, как минимум, хранит именно что html текста поста. Кусаба, емнип, тоже.

Ну и остаются детали реализации: хранить предпросмотр треда в БД (что, вообще говоря, дупликация, хоть и не полная, содержимого постов), или в виде собранных файлов, и впихивать на стороне клиента через яваскрипт/iframe. Про что и был оригинальный вопрос.
No. 18583    
>>18579
Хранить в файлах, рядом с самим тредом, например на самом автобусе хранятся http://410chan.org/dev/res/17424 50.html и https://410chan.org/dev/res/17424-100.html , только тут цель другая - экономия трафика. Iframe это совсем маразм, через яваскрипт только если изначально все построено через фреймоврк и собирвается на стороне клиента, что не в этом случае.
No. 18584    
>>18583
>Хранить в файлах, рядом с самим тредом
>Iframe это совсем маразм, через яваскрипт только если изначально все построено через фреймоврк
Хорошо. и последний тогда вопрос, но я чую, что однозначного ответа нет и надо тестировать: а не будет ли оферхд на открытие/закрытие файловых дескрипоторов и поиск нужных больше, чем всё-таки хранить это в БД и вытаскивать за один запрос?
No. 18585    
>>18584
Обращение к файлам всегда быстрее чем к БД.
Вот например движок https://github.com/various-projects/JSib и его демо http://jsib.ml/jsib_v2/thread.html#b/1 который целиком построен на этой идее. Все данные там хранятся в текстовых файлах, которые целиком отдается клиенту, а там уже яваскрипт строит из него тред. По их заверением, в качестве сервера с таким подходом подойдет любая кофеварка.
No. 18587    
151571054072.png-(12.88KB, 384×384, 1151938512397.png)
18587
>>18585
Ага. Спасибо.
Ну, сомневаюсь что буду целиком на ЖС страничку собирать ближайше время, но хоть какое-то улучшение. Да и каталог собираться чуть быстрее таким образом должен будет, если ОП-пост ещё отдельно хранить.

А там глядишь и ЖС придётся.
No. 18588    
Написать бороду полностью без js допустимо?
No. 18591    
>>18588
Да.
No. 18592    
151573448425.png-(2.55MB, 1920×1080, Onii-chan no Koto nanka Zenzen Suki Janain Dakara .png)
18592
>>18588

Да, но лучше сделать всё совсем наоборот (на одном только джаваскрипте: во браузере — на jQuery, на сервере — на Node.js).
No. 18594    
151573503966.png-(3.35MB, 1920×1080, Kono Subarashii Sekai ni Shukufuku wo! - Darkness .png)
18594
>>18585

> Обращение к файлам всегда быстрее чем к БД.

Однако https://www.sqlite.org/fasterthanfs.html сообщает о противоположном.
No. 18597    
>>18592
Я просто не умею и не люблю его.
No. 18615    
151576268167.png-(322.73KB, 1397×1340, download.png)
18615
пытаюсь сделать базу данных для сайта сети кинотеатров (приложил схему)

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

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

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

извиняюсь за укр. язык в комментариях к таблицам. думаю, что по названию понятна суть, но если будет нужно смогу объяснить
No. 18616    
автобус, подскажи хороший онлайн отладчик джаваскрипта. Чтобы он показывал где я допустил ошибку и в чем она.
No. 18617    
>>18616
chrome dev tools
No. 18622    
>>18574
> А по серверу классика - LAMP
Ну, это бандл. Насколько я вижу, у тебя LAMP бандлит по желанию Apache, Cherokee, Lighthttpd, Nginx. Попробую сванговать, что у тебя Apache, и после установки он должен показывать дефолтную страницу, а у тебя он её не показывает. Из этого два вопроса:
0) У тебя Апач, или всё-таки что-то еще?
1) Этот апач, или что-то еще запущен? просто чтобы исключить банальное
2) Ты конфигурировал Апач, или что-то еще после установки?
3) На всякий случай, ты раньше конфигурировал хосты, для того чтобы что-то на своей машине локально развернуть?

Это я всё спрашиваю, чтобы понять, что тебе надо сделать чтобы увидеть свою заветную кусабу. Я подозреваю что у тебя плохо / не сконфигурирован / не запущен веб сервер.
No. 18623    
>>18616
Рекомендация зависит от того, с какой целью и что ты отлаживаешь. Обычно, какой-то нестандартный отладчик яваскрипта просят, когда надо:
  • отлаживать обработчики событий, чтобы понять что где файрится, и т.д. Тут я бы посоветовал FireBug + EventBug (основное дополнение + аддон для него) к Firefox. Проблема только в том, что этот аддон больше не пилят, и авторы рекомендуют перейти на дев версию Firefox: https://developer.mozilla.org/en-US/docs/Tools
  • расковыривать аглифаеный или минифаеный код. Тут, учитывая размеры некоторых скриптов, лучше заниматься подменой ресурсов на разаглифаенные самостоятельно, чтобы сократить риск зависания браузера. Это можно делать прямо плагином для браузера, чем-то типа Redirector для того же FireFox.

No. 18625    
Посоветуйте, пожалуйста, практических задач для новичка по питону.
Инб4 проект Эйлера
No. 18626    
https://learn.javascript.ru/task/sum-many-brackets
Поясните для тупого как это работает. Построчно, если можно
No. 18629    
>>18625
У нас в пополняемой базе знаний есть такое:

>>Я ищу интерактивный курс по Python
http://410chan.org/dev/arch/res/15681.html#16126

>>Я ищу задачи и упражнения по алгоритмам (C, Python)
http://410chan.org/dev/arch/res/15681.html#17105
http://410chan.org/dev/arch/res/15681.html#17108
http://410chan.org/dev/arch/res/15681.html#17110

Это похоже на то, что ты ищешь?
No. 18630    
>>18626

>function sum(a) {
Объявили главную функцию.

>var currentSum = a;
Сохранили изначальное значение во внутреннюю переменную.

>function f(b) {
Объявили внутренню функцию, которая непосредственно что-то будет делать.
У неё есть контекст главной функции, в которой она объявлена.

>currentSum += b;
Написали что оно делает - берет и добавляет переданное значение ко внутренней переменной

>return f;
Сделали, чтобы оно возвращало экземпляр функции, который потом можно вызвать.

>f.toString = function() {
Переопределили у функции метод .toString, чтобы вместо вывода типа
>f = function(a) { ... }
Оно вывело значение внутренней переменной, где хранится сумма
>currentSum
Значение будет взято из контекста главной функции.

>return f;
Возвращает экземпляр функции f, который опять же потом можно вызвать.

А собственно магия происходит здесь:
>alert( sum(1)(2) );
>sum(1)
Это ты передал аргумент в sum(), он сохранится в переменную currentSum
sum() вернул тебе экземпляр функции f
>(2)
И ты передал аргумент 2 уже в f, которую тебе только что вернули.

Поскольку этот f ты получил из контекста функции sum, то там во внутренней переменной уже лежит 1, вызов f(2) добавит туда 2, и вернет тебе еще экземпляр f, который ты сможешь вызывать со следующим аргументом, или не вызвать, если больше аргументов нет.

>alert
А это вызовет .toString у последней функции f, которую ты получишь. Поскольку оно всё тянется из контекста первого вызова sum(), то оно выведет тебе правильную currentSum, в которой будет 1 + 2 = 3

Вообще, я не понимаю зачем этот пример назвали "сумма произвольного числа скобок", как-то оно больше сбивает с толку, чем чему-то учит. Базово этот пример должен тебе показать, что ты можешь работать не только с результатами вызова функции, но и с самой функцией, вызывая её потом, самостоятельно, когда это тебе нужно. И даже повторять вызовы с новыми аргументами столько раз, сколько тебе захочется.
No. 18632    
>>18626
>>18630
На всякий случай, по вызовам
>alert( sum(1)(2) )

>sum(1)
сurrentSum стал 1;
Вернулось f = function(b) {}

Поэтому вызов
>sum(1)(2)
Это на самом деле
>sum(1).f(2)
Т.е. ты делаешь обычный вызов по цепочке, просто экстравагантно оформленный. Поскольку ты вызвал f прямо из прошлого sum, то:
сurrentSum стал 1 + 2 = 3;
И снова вернулось f = function(b) {}

Вызов
>alert( sum(1)(2) )
У себя внутри сделает
>sum(1)(2).toString

Что на самом деле будет
>sum(1).f(2).f.toString()
Который выведет сurrentSum.
Из-за того, что ты вызываешь f всё так же взятый из первого sum, то оно вернет корректное значение сurrentSum, т.е. 3

Соответственно, в длинной цепочке типа
>alert(sum(0)(1)(2)(3)(4)(5))
Ты на самом деле делаешь
>sum(0).f(1).f(2).f(3).f(4).f(5).f.toString()

Альтернтативные вызовы я привел для лучшей иллюстрации, чтобы можно было их чейнить именно так на самом деле, нужно в function sum(a) строчку
>return f;
заменить на
>return { "f": f }

Это всё детально расписывается тут:
https://www.w3schools.com/js/js_function_closures.asp
No. 18637    
>>18630
Спасибо большое. Ты спас меня и сохранил мне несколько часов-дней
No. 18638    
Как решить упражнения 1.2.2 из книги? Там нужно узнать при каком n время сортировки вставкой превысит время слиянием. Для вставки 8n^2, а для слиянием - 64nlg(n). Я решил что нужно найти n когда время сортировок будет одинаковым, т. е. приравнял 8n^2 = 64nlg(n), в итоге получил n^(8/n) = 2. И дальше не знаю как n получить.
No. 18639    
>>18638
Единственное я понял, что можно графики построить. А вот как аналитически решить, у меня не получается.
No. 18643    
>>18638
Или 2^(n/8) = n. Можно программно перебрать.
No. 18646    
>>18638
>>18643
2^(n/8) = n правильно раскрыто, хотя на самом деле нас интересует 2^(n/8) > n
В общем, здесь скорее всего не получится как-то раскрыть до вменяемого алгебраического решения. В то же время, если хочется решить со всей строгостью, можно решить численно (== программным перебором, методом Ньютона), а потом доказать, например индуктивно или с помощью производных, что есть только эти решения - грубо говоря, что кривая 2^(n/8) пересечет n не больше двух раз, что и так интутивно понятно.

Если не хватит сил доказать самому - https://math.stackexchange.com/questions/20652/how-to-solve-n-2n-8-for-n
No. 18649    
>>18615
Я не очень понимаю, как работают кинотеатры, так, что вот так.
Плюс, сейчас вечер воскресенья я думать не очень хочется.
Плюс, при проектировании базы данных можно долг ои нудно ругаться.

> и тут непонятно, где и как хранить расположения места ведь не всегда места в зале центрированы
В таблице CinemaHall делаешь xml столбец, куда серилизуешь поции всех мест типа
<seats>
<seat id="0" positionX="1" positionY="2" />
</seats>
Типа такого. Выборку по этому полю ты делать не будешь, искать в нём тоже, тебе только залезть внутрь для отрисовки картинки для пользователя.

> не могу понять, как лучше сохранять в базе места в залах кинотеатра
Таблица Seats с Id, HallId, SeatTypeId. Вроде, ничего больше месту не нужно.

> и как назначать цену за место в зависимости от сеанса...
От чего зависит цена билета?
Зал, время, место.
Значит, у тебя будет таблица TicketPrice с SeatId, SessionId, Price. Т.е. ты хранишь для отдельного места, отдельного сеанса цену. Это будет ещё неплохо в том плане, если на сеанс Человек-Гитлер на места с номерами 14 и 88 цена будет х2.

Ещё бы я от таблицы Ticket избавился, запихнув всё из него в OrderItem. Ведь подразумевается, что у тебя только билеты заказать можно, а не ещё и шлюху, чтоб сосала в процессе просмотра.
Ты ещё и лишний join не будешь делать. Экономия via денормализация.
No. 18663    
>>18622
> 0) У тебя Апач, или всё-таки что-то еще?
Да, апач.
> 1) Этот апач, или что-то еще запущен?
Да, запущен. Даже перезагружал его.
> 2) Ты конфигурировал Апач, или что-то еще после установки?
Угу. Ставил пару дополнительных модулей, вроде mod_php, phpmyadmin и потом когда пробовал загружать тестовый php скрипт, удалил "родную" html-страницу апача.
> 3) На всякий случай, ты раньше конфигурировал хосты, для того чтобы что-то на своей машине локально развернуть?
Неа, ни разу. Хочу научится нормально делать это.
No. 18664    
>>18649
думал, никто так и не ответит. спасибо
> В таблице CinemaHall делаешь xml столбец, куда серилизуешь поции всех мест типа
так теперь и сделаю, а то я уже создал таблицу seatstyle со столбцами position, width, height. это была очень плохая идея?

> Значит, у тебя будет таблица TicketPrice с SeatId, SessionId, Price. Т.е. ты хранишь для отдельного места, отдельного сеанса цену.
я вот тоже об этом думал, но не слишком ли это ресурсоемко? то есть, в зале может быть 100 мест и для каждого сеанса и каждого места нужно добавлять поле, хотя места обычно делятся максимум на 3-5 ценовых категорий в зале. если в день будет 25 сеансов, то новых записей в этой табличке будет по 2500 в день, и большинство из них будут одинаковыми...
вообще, может твой подход и правильный, я просто не знаю как такое принято делать

> Ещё бы я от таблицы Ticket избавился, запихнув всё из него в OrderItem.
вроде хорошая идея, сделаю
No. 18666    
>>18664
> так теперь и сделаю, а то я уже создал таблицу seatstyle со столбцами position, width, height. это была очень плохая идея?
На мой взгляд — да. Это лишняя сущность, которую надо будет поддерживать и держать в уме. Хотя, не все любят совать xml в БД с другой стороны, кому-то и exe в базе хранить норм

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

А потом вообще какой-нибудь джоб сделаешь, удаляющий/перемещающий в "архив" устаревшие данные. Ну или кнопку для оператора типа "убрать устаревшие цены в архив" / "убрать устаревшие цены к хуям".

Сегодня для Киноцентр «Октябрь» ситуация следующая:
11 залов.
319 мест в зале (в каком-то случайном зале, считаю, что у всех так)
67 сеансов.
21373 строк на день.
21373 * 100 байт = 2 Mb
100 байт — это я взял хоть немного похожую таблицу с нашей боевой базы и замерил размер командой

SELECT * FROM sys.dm_db_index_physical_stats (DB_ID('CB_DB_rev91'), OBJECT_ID('[USER_SETTINGS]'), NULL, NULL , 'DETAILED')


Как хитрый финт можно таблицу SessionPrices с SessionId, SessionPrice и SessionPricesDiscounts c SessionId int, SeatId int NULL, Discount int, Condition text.
SeatId NULL ну, ситуация, например, когда на все места располагается. Тогда, если нет элитных мест (как в ёбаном октябре, то и ничего делать не надо).
No. 18680    
Допустимо ли использовать Browserify, и утрамбовывать с uglify кучу скриптов в один бандл, при том что внешние библиотеки нужны не на каждой странице, а на одних одни, на других другие?
Сама сборка с парой библиотек занимает секунд 20, если бы внешние зависимости просто подключались через <script>, то непосредственно свои скрипты собирались бы за пару секунд. Есть ли вариант, чтобы Browserify когда видел require из node_modules, собирал бы и копировал бы их в папку назначения?
No. 18682    
>>18680
В целом более чем допустимо, многие даже считают бандлинг всего в один файл единственно верным решением. Ибо, если речь про веб-приложение или сайт, количество сетевых запросов это важный фактор, особенно на плохих каналах (типа мобильного интернета).

На деле по большей части зависит от того какой объем у тебя получается JS суммарный и, если он избыточно большой, сколько ты можешь сэкономить анбандлингом. Основная проблема анбандлинга состоит в том, что легко ошибиться где именно и что нужно, а также попасть в ситуацию, когда при открытии страницы у тебя одни файлы загрузятся, а другие нет (шанс чего всегда больше, если у тебя много внешних файлов) - отслеживать это и ловить подобные проблемы это боль, лучше пусть сломается сразу и все, чем по частям.
No. 18683    
>>18663

>> 2) Ты конфигурировал Апач, или что-то еще после установки?
>Угу. Ставил пару дополнительных модулей, вроде mod_php, phpmyadmin и потом когда пробовал загружать тестовый php скрипт, удалил "родную" html-страницу апача.
Ну, ты можешь добавить какой-то тестовый пустой index.html с текстом внутри, чтобы убедиться что глобально апач сконфигурирован и локалхост работает.

>> 3) На всякий случай, ты раньше конфигурировал хосты, для того чтобы что-то на своей машине локально развернуть?
>Неа, ни разу. Хочу научится нормально делать это.
Это на самом деле весьма просто делается.

Сначала ты идешь в папку, где у тебя установлен апач и находишь там внутри папку sites-available.

У неё внутри ты создаешь файл, например kusaba.conf
Потом в этом файле ты пишешь:

<VirtualHost *:80>
    ServerName kusaba.local
    ServerAlias www.kusaba.local <!-- если надо -->
    DocumentRoot "/path/to/my/kusaba/"
</VirtualHost>

Можешь сначала по этому пути /path/to/my/kusaba/ тоже тестовый html-файл разместить, просто чтобы убедиться что всё работает.

Потом ты включаешь сайт:
a2ensite kusaba.conf

Всё что оно делает - создает софтлинк на этот .conf файл в папке sites-enabled

Потом ты релоадишь апач ну или рестартишь его:
sudo service apache2 reload


Потом ты дописываешь новый домен себе в хосты:

sudo nano /etc/hosts
127.0.0.1 kusaba.local
127.0.0.1 www.kusaba.local #если надо


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

Потом открываешь в браузере http://kusaba.local и у тебя должно открыться то, что там в папке лежит, например твой тестовый index.html

На всякий случай, ссылки:
https://httpd.apache.org/docs/2.4/vhosts/
https://serverfault.com/a/216260
No. 18685    
неужели люди до сих пор пользуются lamp стеком
апач, пых, мускуль, прямо как десять лет назад
сейчас же модно монгодб, нода джс, экспресс и т.п.
No. 18686    
>>18685
Человек кусабу разворачивает в любительских целях, ей такой стек и нужен.
No. 18687    
>>18588

раньше помнится на многих иб можно было сидеть с отключенными скриптами, вообще этому в основном мешает капча. не будет удобного разворота картинок, всплывающих окошек быстрого ответа и т.п. и плюс надо сделать что бы капча не зависела от джаваскрипта
No. 18689    
>>18666
> Хотя, не все любят совать xml в БД
лучше хранить эти данные по стилям в столбце базы данных с типом xml, или же может лучше создавать xml-файл на сервере, а в бд хранить путь к нему?
> А потом вообще какой-нибудь джоб сделаешь, удаляющий/перемещающий в "архив" устаревшие данные. Ну или кнопку для оператора типа "убрать устаревшие цены в архив" / "убрать устаревшие цены к хуям".
вроде хорошее решение. сделаю так
No. 18690    
>>18666
кстати, цену каким типом лучше обозначать? вроде как decimal предназначен для этого, но я часто слышал, что люди используют int, потому что все эти числа с плавающей точкой могут быть не точными
No. 18693    
>>18690
decimal, ЕМНИП, число с фиксированной точкой
No. 18695    
>>18689
> лучше хранить эти данные по стилям в столбце базы данных с типом xml, или же может лучше создавать xml-файл на сервере, а в бд хранить путь к нему?
Лучше в базе. А то проебёшь при миграции, при переезде, при бекапах, при репликации, при прочем дерьме.

> кстати, цену каким типом лучше обозначать? вроде как decimal предназначен для этого, но я часто слышал, что люди используют int, потому что все эти числа с плавающей точкой могут быть не точными
Вот полезное:
https://stackoverflow.com/questions/582797/should-you-choose-the-money-or-decimalx-y-datatypes-in-sql-server
Это money не точное.
No. 18698    
>>18695
>не точное.
неточное
Быстрофикс
No. 18700    
Девач, объясни как сделать так, чтобы апач подгружал мог запускать в папке /var/www/ (где обычно html-страницы находятся) CGI-скрипты. Т.е. чтобы .py .pl и другие пододбные файлы можно было бы запускать просто перейдя в браузере localhost/имя_файла.pl например.
No. 18701    
>>18700
Есть прямой путь - сконфигурировать апач соответствующим образом.
1. Установить нужный мод в апач.
Для перла это mod_perl, для питона - mod_python или mod_wsgi
Ну и естественно в апаче должен быть включен mod_cgi
2. Правильно сконфигурировать хост в апаче, указав хендлер для соответствующих скриптов с помощью директив SetHandler и AddHandler, не забыв добавить Options ExecCGI:
https://httpd.apache.org/docs/2.4/howto/cgi.html

Есть обходной путь - поднимать свой питоновский или перловский бэкенд на внутреннем сервачке, проксируя на него запросы из апача через mod_proxy, это гораздо быстрее. Для этого тебе надо установить в апач mod_proxy и правильно сконфигурировать хост, с помощью директивы ProxyPass и ProxyPreserveHost
https://httpd.apache.org/docs/2.4/mod/mod_proxy.html
No. 18711    
>>18701
А подскажи тогда, где Options directive находится?
Алсо,
> Есть обходной путь - поднимать свой питоновский или перловский бэкенд на внутреннем сервачке, проксируя на него запросы из апача через mod_proxy, это гораздо быстрее. Для этого тебе надо установить в апач mod_proxy и правильно сконфигурировать хост, с помощью директивы ProxyPass и ProxyPreserveHost
> https://httpd.apache.org/docs/2.4/mod/mod_proxy.html
Вот тут расскажи мне по-подробнее.
Удалить сообщение []
Пароль  
[Mod]