• Правильное хранение изображений на сервере

    nikel303
    @nikel303
    Можно хранить имя файла (good.jpg) и тип картинки (goods), например картинка товара, на основе этой информации строить путь, так, как вам угодно, например:
    /media/origin/goods/g/go/good.jpg
    /media/origin/goods/t/to/tovar.jpg

    Если нужно сохранить картинку с таким же именем, то в конец дописываем индекс, например:
    /media/origin/goods/g/go/good.jpg
    /media/origin/goods/g/go/good__1.jpg
    /media/origin/goods/g/go/good__2.jpg

    Подпапки после типа картинки /g/go/ нужны, чтобы в одну директорию не сваливалось слишком много файлов.

    Если в качестве имени файла используются цифры (напрмер - это индексы записей в базе), то подпапки лучше формировать с конца имени файла, например:
    125.jpg -> /5/2/125.jpg
    126.jpg -> /6/2/126.jpg
    это позволит более равномерно распределять файлы по папкам.

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

    Закешированые картинки соответственно будут храниться, например, по такому пути /media/cached/goods/<название пресета (200x120r)>/go/g/good.jpg

    Пресет можно формировать, например, на основе ширины, высоты, способа масштабирования, и названия фильтра
    Ответ написан
    Комментировать
  • Как сохранять в БД данные о больших объектах (где-то 120-200 полей)?

    kompi
    @kompi
    nullstack devoops
    Посмотрите в сторону materialized views (9.3)
    Ответ написан
    Комментировать
  • AngularJS: Правильная структура папок веб-сайта который реализует нескольких задач?

    miraage
    @miraage
    Старый прогер
    Я зачастую использую такую структуру, только перед релизом собираю js приложения через минификатор
    uglifyjs -c -m
    (важно собирать по порядку)

    Декларации пишу так:
    !(function() {
        'use strict';
    
        Ctrl.$inject = ['$scope', 'Auth'];
        function Ctrl($scope, Auth) {
            // some code...
        }
    
        angular.module('MyModule').controller('MyCtrl', Ctrl);
    })();

    Собственно, сама структура:
    app/
      controllers/
        auth.js
      directives/
        inputmatch.js
        emailbusy.js
      models/
        auth.js
        user.js
      views/
        front.html
        auth/
          signup.html
          signin.html
      app.js
      states.js
    js/
      angular.js
      angular-ui-router.js
      angular-resource.js
    Ответ написан
    Комментировать
  • А какие приемы маркетинга больше всего раздражают вас?

    ixSci
    @ixSci
    4D, 5D… ND кинотеатры.
    Новый шампунь с экстрактом жэжоба.
    Нано-технологии.
    Эксперты подтверждают, что блиндомет самая лучшая паста.
    Выучи N за M дней.
    Стань успешным посетив курсы N.
    Apple круче, потомучто на нем нет вирусов. Это очень безопасная система.
    Ответ написан
    Комментировать
  • Как протестировать производительность debian сервера?

    web36m
    @web36m
    Coder
    Берем jMeter.
    Смотрим показатели: CPU(%), Memory(Mb), сеть, I/O Wait, request response time, ms.
    Ответ написан
    Комментировать
  • Как вернуться в строй?

    taliban
    @taliban
    php программист
    1. Сходите на выходных на сноуборде покатайтесь (лыжи)
    2. Сходите на выходных с друзьями в бильярд/баню/клуб/другой город
    3. _каждый день_ гуляйте после работы (не работайте дома)
    4. Находитесь на работе как можно меньше.

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

    Через месяц денег будет на много меньше, но желания работать прибавится на много больше )
    Ответ написан
    5 комментариев
  • Веб-сайт не позволяет отображать своё содержимое во фрейме?

    NeX
    @NeX
    Проверьте заголовок developer.mozilla.org/en/The_X-FRAME-OPTIONS_response_header
    Ответ написан
    Комментировать
  • Проблемы новичка с zend API?

    a_dobkin
    @a_dobkin
    Пропустил ошибку. вместо strlen(key1), нужно strlen(key1) +1. Иначе не учитывается символ конца строки '\0'
    Ответ написан
    1 комментарий
  • JS. Централизованная обработка ошибок

    alienator
    @alienator
    Никто за вас не решит, что лучше.

    Конечно, можно и нужно иметь try/catch на самом верхнем уровне. И дать ему какое-то полезное поведение — записать в лог, вывести красивое окошко и т.п., чтобы не пугать пользователя системными сообщениями.

    Это необходимый минимум.

    А дальше смотрите глубже. Что вам даст функция-обработчик внутри объекта исключения? Во многих случаях она уже бесполезна; она слишком далеко от точки возникновения ошибки, чтобы попробовать ее исправить (например, вызвать код повторно со значением по умолчанию, подождать освобождения ресурса и т.п., короче, какой-нибудь while/try).

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

    • обработать какие-то (или все) исключения здесь
    • обработать и передать выше (повторный throw)
    • ничего не делать (передать сразу наверх)


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

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

    1. Не ловить всё подряд. Обрабатывать только те исключения, с которыми известно, что делать. Если не совсем известно, делать re-throw.

    2. re-throw делать аккуратно. Не надо, опять же, хватать больше от жадности, а потом пропускать исключения ненужных классов. Для ява-скрипта это выражается вот в чем:

    Нехорошо:
    try {
         // ...
    } catch (e) {
         if (! e instanceof MyError) {
              throw e;
         }
        // ...
    }
    


    Хорошо:
    try {
         // ...
    } catch (e if e instanceof MyError) {
        // ...
    }
    


    3. То, что вы делаете в finally, важнее, чем то, что делаете в catch. Есть что подчистить — надо подчистить.

    4. Не надо терять информацию об ошибке (генерить или ре-генерить исключение более широкого класса). Правда, при разработке либы лучше наоборот, свои мелочи держать в себе и заменять низкоуровневые ошибки на более общие.

    Ну, что хотел сказать, то сказал. Удачи.
    Ответ написан
    3 комментария
  • Преподавание С в университете. Нужен совет?

    @korvindest
    Когда я преподавал (правда в школе) я старался отыскать интересные и не слишком сложные задачи, которые были бы обозримы и давали ну хоть какую нибудь отдачу(удовлетворение).
    Это сильно мотивирует. А весь процесс обучения возможностям IDE и отладке в частности я постарался максимально встроить в контекст реализации этих небольших задач. Ведь даже маленькая программка нуждается в отладке.

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

    К слову, апофеозом моего преподавания стало написание графических циферблатных часов отражающих реальное время(Так я еще и научил одиннадцатиклассников азам геометрии :-) ).

    Удачи вам!
    Ответ написан
    5 комментариев
  • Как вы ушли от PHP?

    taliban
    @taliban
    php программист
    Если Вы хотите уйти от пхп, то:
    1. Купите книгу по желаемому языку, прочтите ее, и идите джунором на этот (другой) язык, в итоге если есть голова на плечах вы в течении полу года нагоните свой текущий уровень пхп (при условии что у вас хороший уровень пхп)
    2. Идите JavaScript программистом в фирму которая работает не с пхп, и переодически задалбывайте/копайтесь в серверном коде, в итоге начнете с малых правок кода и закончите серверным программированием не на пхп
    Ответ написан
    2 комментария
  • Отловить ошибку js (обычная страница грузит процессор на 100%)?

    taliban
    @taliban
    php программист
    Запускаем фф, качаем плагин firebug , открываем панель фаербаг, заходим на страницу с ошибкой, смотрим на рисунок ниже, нажимаем обведенную кнопку, ждем пока грузится процессор, нажимаем кнопку еще раз, видим список выполняемых функций с небольшой статистикой по каждой.
    Piccy.info - Free Image Hosting
    Ответ написан
    1 комментарий
  • Выдача картинок сервлетом из базы

    taliban
    @taliban
    php программист
    Не знаю как работают Ваши сервлеты, но вообще ест два способа показыват изображения из базы, простой но с нагрузкой и сложный но с уменьшенными рессурсами:
    1. отдаем изображение через сервер, по отдельному урлу, который генерит заголовок изображения и выплевывает данные в бинарном виде, браузер сам все сделает, адрес будет вида: mysite.com/get/image/1234/
    2. Перед выводом сохраняем изображение в отдельную папочку, и прописываем путь к ней на странице, получится нормальный адрес: mysite.com/images/1234.jpeg
    Естественно при втором подходе нужно учитывать что изображения может не быть, и при 404 делать редирект на адрес который создаст изображение на диске.
    Ответ написан
    2 комментария
  • Идеи для Хабрастартапа: Посевная стадия: Мозговой штурм

    nixmale
    @nixmale
    Я тоже предложу один проект, правда не знаю как это правильно описать.
    Вообщем я хочу не какой либо сервис продвинуть, а предложить новую технологию, о которой пока не знают ни в Яндекс, ни даже в Google, и на основе ее создать конкурентный брэнд. Быстро перестроиться эти компании не смогут, так как сами на корню ее присекли, а значит есть шанс составить серьезную конкуренцию. Для этого необходима группа серьезных и заинтересованных в этом людей, не боящихся например фразы «Конкурировать с Яндексом».

    Продолжать?
    Ответ написан
    5 комментариев
  • Практика программирования на PHP

    Знаю, что получу много минусов, но всё таки…

    «Надо начинать с лёгкого проекта» — самый ужасный совет новичкам.
    Решая легкие задачи мозг затачивается под лёгкие задачи. А как только программист после такого «лёгкого» обучения сталкивается с действительно сложной задачей вся структура мышления ломается и обучаться приходиться почти сначала.

    Меня в своё время учили гуру — «Решай задачи, в которых сам чёрт ногу сломит, только так научишься». Проверил этот совет на себе и полностью с ним согласен. Только решение сложных задач действительно учит.

    Выберите сложную задачу (написать движок для соц.сети, браузерную игру, портал и т.д.) и работайте над ней.
    Ответ написан
    5 комментариев
  • Один сервер + несколько доменов?

    Juggler
    @Juggler
    Задачка состоит из двух частей
    1. Настройка DNS
    A-record — нужно для каждого веб- и почтового хоста прописать его IP
    Например,

    A www.domain1.ru 111.111.111.111
    A mail.domain1.ru 111.111.111.111
    A www.domain2.ru 111.111.111.111
    A mail.domain2.ru 111.111.111.111

    MX record — указывает на почтовый сервер для домена, с приоритетами

    MX domain1.ru mail.domain1.ru
    MX domain2.ru mail.domain2.ru

    2. Настройка серверной части
    — для Apache — делаем виртуальные серверы в конфиге
    — для почтовика (sendmail) — наверное, аналогично, но я ни разу не настраивал. Там надо прописать список поддерживаемых доменов и почтовые ящики с алиасами для каждого домена

    В итоге,
    — веб-сайты — при наборе в браузере www.domain1.ru или www.domain2.ru имя будет резолвиться на 111.111.111.111. При заходе туда апач получит информацию, какой домен запрашивался и отработает в соответствии с ним.
    — почта — при попытке отослать на user@domain1.ru удаленный SMTP сервер возьмет MX-record, получит для нее IP и соединится с Вашим почтовиком. При попытке отослать почту на user@domain1.ru Ваш почтовик проверит, что он обслуживает домен domain1.ru и у него есть соответствующий почтовый ящик. После этого примет сообщение и положит в ящик.

    Это если очень кратко. Вопрос по сложности сопоставим с «Как работает Интернет»…

    Настройка необходима, чтобы
    Ответ написан
    Комментировать