suffix: Но толку-то - 1к посетителей в сутки сколько лет бьюсь больше никак
А откуда им больше взяться? Я например в живую ни разу минипига не видел. Некоторые даже не слышали о таком, я думаю, что таких большинство. Мне кажется у вас почти пиковый результат для этой ниши.
VoV@, я чет сначала и не увидел, что вы про буковки писали. Даже если хулиган введет циферки в инпут, они все равно прилетят в виде строки. Мои примеры как раз и описывают это.
edogs: Согласны.
Но все же - иногда нужны "грязные хаки". В большинстве случаев нет времени (по крайней мере оплаченного заказчиком) что бы сидеть и перфекционировать на архитектуру. Есть задача "я не знаю как но что бы к утру было сделано" и просьба "в разумные деньги" и простой выбор - грязный хак который займет полчаса и будет оплачен как час (с округлением) или красивое кошерное решение которое займет часов 6 и один черт больше одного часа не оплатят (т.к. "че там делать-то было"). Естественно, при наборе некоторой критической массы грязных хаков скопившихся примерно в одном месте есть смысл отрефакторить это дело, но опять же - на рефакторинг кучи грязных хаков чохом уйдет в разы меньше времени чем если не хакать, а делать всё кошерно изначально.
Я меня был один проект, где заказчик подгонял меня и просил быстрее-быстрее, ставил мне сроки. Я писал код быстрей-быстрей, как он и просил. В итоге это вылилось в несколько месяцев разработки, и поддерживать это теперь будет сложно. Я сделал вывод для себя, кроме того, что не работать с заказчиками, которые подгоняют, никогда не забивать на проектирование, и сначала думать, потом писать. Если бы я посидел и почертил диаграмки пару недель, то в итоге, приложение было бы готово на месяц раньше, и было бы намного качественней адаптировано под всякие изменения.
Да и с тем, что отрефакторить - быстрее, не соглашусь. Отрефакторить изначально продуманный проект, согласен. Но если начать писать сразу и по быстрому, потом это проще переписать с нуля, чем начать что-то рефакторить. Да и в целом, я когда делаю рефакторинг - значаю покрываю тестами ту часть кода, которую рефакторю, а затем начинаю переписывать функцию/метод.
edogs: По логике - '1'. На самом деле - 'b'.
Странная логика, почему 1? Если 'a' - по ASCII в десятичной системе это 97, проинкрементировав (для этого привести к числу), вы получите 98, и конвертнув обратно число в строку, вы получите 'b'. Не знаю как PHP работает с последовательностью сивмолов, но в нормальных языках примерно так и работает - строка это иммутабельный поток int32 чисел (для последнего стандарта utf8, где на один символ может уходить 4 байта).
---------- Добавлено 30.06.2018 в 11:55 ----------
edogs: Зря.
Вы потратили время - свое напрямую (занимаясь оптимизацией), чужое косвенно (на отслеживание коммитов), Вы не знаете к каким последствиям это может привести (т.к. не знаете причин почему это было написано именно так и как следствие к чему Ваши изменения могли привести), Вы не получили заметного эффекта (замена -1+2 на ++ это не фига не оптимизация).
Ваши действия не только не позитивны, они негативны.
С этим соглашусь. Если у нас colvo пришло в виде строки, то colvo++ в первой итерации приведет сначала к числу и инкремента не произойдет. Если сделать colvo = colvo + 1; Мы можем получить конкатенацию. И только colvo = colvo - 1 + 2 сначала кастанет к числу, а затем инкрементирует изначальный счетчик. Но это песня про убогий дизайн JS.
A007MP: Нет. Во-первых, полное отделение разметки от кода позволяет настолько абстрагироваться, что вся программа пишется с ходу, вообще не задумываясь, что, где и как должно отображаться. Во-вторых, сразу знаешь, в каких файлах что искать и менять, при смене дизайна.
Единственное, что я оставил (да и то - временно) пока в php - это ответ на ajax запрос - в файлах есть текстовые сообщения, которые выводятся пользователю. Но и это, на самом деле, делать нежелательно - все должно идти из базы. Таким образом проще будет сделать мультиязычную систему. А вот ответ на ajax запрос в виде части html (например для корзины) - тоже берется разметка из шаблона. Это позволяет менять дизайн только в одном месте, а не выискивать кучу мест, где это могло быть.
А ещё круче - использовать Clean Architecture подход, в котором приложение разделяется на 4 слоя:
Entities - бизнеслогика: сущности, методы и функции
Use Cases - логика приложения, взаимодействие entities между собой, управление потоком данных.
Interface Adapters - абстракции для доступа взаимодействия с внешним миром (MVC, MVVM или что-то другое)
Frameworks & Drivers - библиотеки внешнего мира, тут настраивается слой между адаптерами и библиотеками.
При таком подходе, любое изменение слоя затрагивает только один слой, и не более. Поменялась логика взаимодействия - сменили use cases, нашли роутер по производительнее , заменили frameworks & drivers.
Такой подход дает безболезненно заменить базу данных, шаблонизатор, роутер, веб-сервер и вообще что угодно.
Dmitriy_2014: А насчет что-то предложить пользователям взамен, но ведь тот же хабр, пикабу и другие что они предлагают пользователям? Кроме того что это типо круто и почетно?
А вы сами не пробовали себе ответить на этот вопрос?
Хабр платит за статьи (скорее формальность), пикабу предлагает печеньки. Печеньки не в прямом смысле, а в переносном: запостить пост и получить кучу лайков это один из видов удовлетворения (точно так же, как и употребление сладостей). По этой же причине многие школьники (а иногда и не школьники) бесплатно модерируют форумы и всякие ресурсы, чтобы почуствовать себя значимыми.
Почитайте книжку "Заразительный. Психология сарафанного радио. Как продукты и идеи становятся популярными". Там как раз о том, что делает проекты успешными.
Мой ответ такой: сейчас аудитория разбалована, почти все ниши заняты, и вероятность сделать успешный сайт используя шаблонные решения практически нулевая. Подход должен быть не просто качественный, а нереально качественный. Если речь идет о контенте: нужны не (боже упаси) рерайтеры, и даже не копирайтеры. Нужны люди, которые крайне квалицифированны в вопросе, которые совместно с копирайтером создадут контент, и расскажут о том, чего не знает практически никто. Все кроется в деталях. Некоторые люди это замечают (и оценивают по достоинству), некоторые не замечают, но на подсознательном уровне чуствуют. Есть и те, кому плевать, они обычно читают рерайт пережеванный всем рунетом, сидят на сайтах android-igri-programmi-ska4at.com и хавают все эти баннеры как увеличить pencil до 80 см.
Да, оно всегда так делает. Я как-то doc в html конвертировал, там тоже мешанина. В итоге, пришлось парсить итоговый HTML и вырезать у тегов атрибуты, а также делать unwrap для тегов span. В итоге, оставались только одни теги p.
Ну а распарсить pdf в HTML с какой-либо вменяемой версткой вряд ли возможно. Где-то видел видео нейронной сети которая верстает с макетов.
Можно попробовать LibreOffice + unoconv, но у меня сейчас на небольшом наборе на зашло. Хотя вот делаю задание, и гоняю презентации в pdf без особых проблем.
Aisamiery: PS. Кстати 2 виртуалки (1Гб, 1Ядро) в кластере (паре) дадут производительность выше чем одна с 2 гигами и 2 ядрами
Не дадут. Если речь идет про обычный сайт и кластер база+приложение, тогда вы упретесь в базу раньше, чем в приложение, и ваша нода с базой будет работать на пике, а нода с приложением в холостую. К этому можно добавить ещё сетевое общение.
Если речь идет про кластер с изоморфными нодами, где в каждой ноде у вас и база и приложение, тогда, во-первых, вам нужно ставить балансировщик, что уже как бы не равноценное сравнение, и шарить сессии, или же обеспечить доступ в рамках одной сессии только к одной ноде. Во-вторых, базу нужно реплицировать, это тоже требует ресурсов. На ноде с 2+ ядрами задачи которые могут тредится, будут тредится. На ноде с 1 ядром, задачи будут выполнятся конкурентно (а не параллельно) + context switch шедулера.
Как правило, кластер начинает выигрывать на 2-х нодах только в том случае, если ноды по мощности не равнозначные. И выигрывает не столько по скорости, сколько по reliability.
И это все не учитывая того, что кластер нужно уметь поднимать и настраивать.
Aisamiery: Ну и нагрузка не линейна, в плане если 10 пользователей делают нагрузку N, то утверждение неверно что 20 пользователей делают нагрузку N*2
Точно также, как и утверждение что O(n) всегда равно O(n) спустя какое-то время.
Aisamiery: Вам надо понять, что обычный mysql и apache это однопоточные приложения и блокировка одного потока приводит к блокировки мастер потока и соответственно блокировке всех, так что хоть 50 ядер поставьте это не поможет.
Вам надо понять, что MySQL и Apache - это далеко не однопоточные приложения. У MySQL есть пулл-коннектов, каждый запрос обрабатывает оптимизатор на основании накопленной статистики таблицы, и передает выполнение конкретному движку таблиц (например, InnoDB). Более того, многие это слышал впервые, но InnoDB - это KV storage, в нем есть первичные ключи, и хеш индексы, которые работает на часто запрашиваемых первичных ключах у таблиц. И все это... многопоточно!
Но толку-то - 1к посетителей в сутки сколько лет бьюсь больше никак
А откуда им больше взяться? Я например в живую ни разу минипига не видел. Некоторые даже не слышали о таком, я думаю, что таких большинство. Мне кажется у вас почти пиковый результат для этой ниши.
VoV@, я чет сначала и не увидел, что вы про буковки писали. Даже если хулиган введет циферки в инпут, они все равно прилетят в виде строки. Мои примеры как раз и описывают это.
Согласны.
Но все же - иногда нужны "грязные хаки". В большинстве случаев нет времени (по крайней мере оплаченного заказчиком) что бы сидеть и перфекционировать на архитектуру. Есть задача "я не знаю как но что бы к утру было сделано" и просьба "в разумные деньги" и простой выбор - грязный хак который займет полчаса и будет оплачен как час (с округлением) или красивое кошерное решение которое займет часов 6 и один черт больше одного часа не оплатят (т.к. "че там делать-то было"). Естественно, при наборе некоторой критической массы грязных хаков скопившихся примерно в одном месте есть смысл отрефакторить это дело, но опять же - на рефакторинг кучи грязных хаков чохом уйдет в разы меньше времени чем если не хакать, а делать всё кошерно изначально.
Я меня был один проект, где заказчик подгонял меня и просил быстрее-быстрее, ставил мне сроки. Я писал код быстрей-быстрей, как он и просил. В итоге это вылилось в несколько месяцев разработки, и поддерживать это теперь будет сложно. Я сделал вывод для себя, кроме того, что не работать с заказчиками, которые подгоняют, никогда не забивать на проектирование, и сначала думать, потом писать. Если бы я посидел и почертил диаграмки пару недель, то в итоге, приложение было бы готово на месяц раньше, и было бы намного качественней адаптировано под всякие изменения.
Да и с тем, что отрефакторить - быстрее, не соглашусь. Отрефакторить изначально продуманный проект, согласен. Но если начать писать сразу и по быстрому, потом это проще переписать с нуля, чем начать что-то рефакторить. Да и в целом, я когда делаю рефакторинг - значаю покрываю тестами ту часть кода, которую рефакторю, а затем начинаю переписывать функцию/метод.
По логике - '1'. На самом деле - 'b'.
Странная логика, почему 1? Если 'a' - по ASCII в десятичной системе это 97, проинкрементировав (для этого привести к числу), вы получите 98, и конвертнув обратно число в строку, вы получите 'b'. Не знаю как PHP работает с последовательностью сивмолов, но в нормальных языках примерно так и работает - строка это иммутабельный поток int32 чисел (для последнего стандарта utf8, где на один символ может уходить 4 байта).
---------- Добавлено 30.06.2018 в 11:55 ----------
Разве? В js это приведёт к NaN.
Откройте консольку и посмотрите:
Зря.
Вы потратили время - свое напрямую (занимаясь оптимизацией), чужое косвенно (на отслеживание коммитов), Вы не знаете к каким последствиям это может привести (т.к. не знаете причин почему это было написано именно так и как следствие к чему Ваши изменения могли привести), Вы не получили заметного эффекта (замена -1+2 на ++ это не фига не оптимизация).
Ваши действия не только не позитивны, они негативны.
С этим соглашусь. Если у нас colvo пришло в виде строки, то colvo++ в первой итерации приведет сначала к числу и инкремента не произойдет. Если сделать colvo = colvo + 1; Мы можем получить конкатенацию. И только colvo = colvo - 1 + 2 сначала кастанет к числу, а затем инкрементирует изначальный счетчик. Но это песня про убогий дизайн JS.
Нет. Во-первых, полное отделение разметки от кода позволяет настолько абстрагироваться, что вся программа пишется с ходу, вообще не задумываясь, что, где и как должно отображаться. Во-вторых, сразу знаешь, в каких файлах что искать и менять, при смене дизайна.
Единственное, что я оставил (да и то - временно) пока в php - это ответ на ajax запрос - в файлах есть текстовые сообщения, которые выводятся пользователю. Но и это, на самом деле, делать нежелательно - все должно идти из базы. Таким образом проще будет сделать мультиязычную систему. А вот ответ на ajax запрос в виде части html (например для корзины) - тоже берется разметка из шаблона. Это позволяет менять дизайн только в одном месте, а не выискивать кучу мест, где это могло быть.
А ещё круче - использовать Clean Architecture подход, в котором приложение разделяется на 4 слоя:
Entities - бизнеслогика: сущности, методы и функции
Use Cases - логика приложения, взаимодействие entities между собой, управление потоком данных.
Interface Adapters - абстракции для доступа взаимодействия с внешним миром (MVC, MVVM или что-то другое)
Frameworks & Drivers - библиотеки внешнего мира, тут настраивается слой между адаптерами и библиотеками.
При таком подходе, любое изменение слоя затрагивает только один слой, и не более. Поменялась логика взаимодействия - сменили use cases, нашли роутер по производительнее , заменили frameworks & drivers.
Такой подход дает безболезненно заменить базу данных, шаблонизатор, роутер, веб-сервер и вообще что угодно.
А насчет что-то предложить пользователям взамен, но ведь тот же хабр, пикабу и другие что они предлагают пользователям? Кроме того что это типо круто и почетно?
А вы сами не пробовали себе ответить на этот вопрос?
Хабр платит за статьи (скорее формальность), пикабу предлагает печеньки. Печеньки не в прямом смысле, а в переносном: запостить пост и получить кучу лайков это один из видов удовлетворения (точно так же, как и употребление сладостей). По этой же причине многие школьники (а иногда и не школьники) бесплатно модерируют форумы и всякие ресурсы, чтобы почуствовать себя значимыми.
Почитайте книжку "Заразительный. Психология сарафанного радио. Как продукты и идеи становятся популярными". Там как раз о том, что делает проекты успешными.
Мой ответ такой: сейчас аудитория разбалована, почти все ниши заняты, и вероятность сделать успешный сайт используя шаблонные решения практически нулевая. Подход должен быть не просто качественный, а нереально качественный. Если речь идет о контенте: нужны не (боже упаси) рерайтеры, и даже не копирайтеры. Нужны люди, которые крайне квалицифированны в вопросе, которые совместно с копирайтером создадут контент, и расскажут о том, чего не знает практически никто. Все кроется в деталях. Некоторые люди это замечают (и оценивают по достоинству), некоторые не замечают, но на подсознательном уровне чуствуют. Есть и те, кому плевать, они обычно читают рерайт пережеванный всем рунетом, сидят на сайтах android-igri-programmi-ska4at.com и хавают все эти баннеры как увеличить pencil до 80 см.
современный сайт
WordPress
куча плагинов
VSCode + примонтированная папка в файловом менеджере.
Да, оно всегда так делает. Я как-то doc в html конвертировал, там тоже мешанина. В итоге, пришлось парсить итоговый HTML и вырезать у тегов атрибуты, а также делать unwrap для тегов span. В итоге, оставались только одни теги p.
Ну а распарсить pdf в HTML с какой-либо вменяемой версткой вряд ли возможно. Где-то видел видео нейронной сети которая верстает с макетов.
Можно попробовать LibreOffice + unoconv, но у меня сейчас на небольшом наборе на зашло. Хотя вот делаю задание, и гоняю презентации в pdf без особых проблем.
Делал так:
PS. Кстати 2 виртуалки (1Гб, 1Ядро) в кластере (паре) дадут производительность выше чем одна с 2 гигами и 2 ядрами
Не дадут. Если речь идет про обычный сайт и кластер база+приложение, тогда вы упретесь в базу раньше, чем в приложение, и ваша нода с базой будет работать на пике, а нода с приложением в холостую. К этому можно добавить ещё сетевое общение.
Если речь идет про кластер с изоморфными нодами, где в каждой ноде у вас и база и приложение, тогда, во-первых, вам нужно ставить балансировщик, что уже как бы не равноценное сравнение, и шарить сессии, или же обеспечить доступ в рамках одной сессии только к одной ноде. Во-вторых, базу нужно реплицировать, это тоже требует ресурсов. На ноде с 2+ ядрами задачи которые могут тредится, будут тредится. На ноде с 1 ядром, задачи будут выполнятся конкурентно (а не параллельно) + context switch шедулера.
Как правило, кластер начинает выигрывать на 2-х нодах только в том случае, если ноды по мощности не равнозначные. И выигрывает не столько по скорости, сколько по reliability.
И это все не учитывая того, что кластер нужно уметь поднимать и настраивать.
Ну и нагрузка не линейна, в плане если 10 пользователей делают нагрузку N, то утверждение неверно что 20 пользователей делают нагрузку N*2
Точно также, как и утверждение что O(n) всегда равно O(n) спустя какое-то время.
Вам надо понять, что обычный mysql и apache это однопоточные приложения и блокировка одного потока приводит к блокировки мастер потока и соответственно блокировке всех, так что хоть 50 ядер поставьте это не поможет.
Вам надо понять, что MySQL и Apache - это далеко не однопоточные приложения. У MySQL есть пулл-коннектов, каждый запрос обрабатывает оптимизатор на основании накопленной статистики таблицы, и передает выполнение конкретному движку таблиц (например, InnoDB). Более того, многие это слышал впервые, но InnoDB - это KV storage, в нем есть первичные ключи, и хеш индексы, которые работает на часто запрашиваемых первичных ключах у таблиц. И все это... многопоточно!