• Как через jQuery заполнять progressbar в uikit?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Видишь прикол? Ты изучил технологию uikit, и теперь у тебя возникли новые вопросы.

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

    Ты управляешь переменной, и событие на изменение переменной заставляет меняться твой прогрессбар.

    Судя по твоему коду ты пытаешься в функции обработчике изменить переменную, которой в этой функции не задано. До этого ты писал код в которых объявлял переменную через name = 1; тем самым создавал ГЛОБАЛЬНУЮ переменную, существующую везде на странице.

    А uikit использует var name = 1; создавая ЛОКАЛЬНУЮ переменную, доступную внутри конкретной функции и ее потомков.

    В твоем случае обработка прогрессбара происходит с помощью другой функции, которая создана (функцию в js тоже можно "воспринимать как переменную") не в том же месте, где и переменная progressbar1, поэтому функция о ней не знает.

    Чтобы это обойти, есть пара вариантов:
    1) действительно менять через field, поскольку как ты видишь в эту функцию в field передается твой прогрессбар
    2) если тебя это смущает, то к вызову функции changeProgress ты можешь дописать changeProgress.call(null, progressbar1);

    Метод call ВЫЗЫВАЕТ функцию, подсовывая в нее то, о чем она не знала впереди того, что она знала. Твой changeProgress превратится в
    function changeProgress(progressbar1, field, typeOperation) { ... }

    и ты сможешь менять как привык

    В действительности же изучая новую технологию ты заставляешь себя ПРИВЫКНУТЬ к тому, как она работает, а не пытаться ее изменить. В этом и проблема несовершенной технологии - она поставляется бесплатно, далеко не факт что хорошо работает, и требует от тебя смирения и отсутствия в общем-то мозга - ты просто используешь готовое, как оно есть.

    Таким образом, еще раз, твою проблему решит:
    1) привыкание к тому что есть, ибо это технология
    2) изменение того что есть, но очень скоро ты поймешь, что количество внесенных изменений такое, что тебе проще было ее с нуля написать
    3) писать сразу с нуля и не париться, но потом понять, что заказчик не хочет тебе платить за то, что ты будешь "писать с нуля", потому что бизнес-тренера ему навешали лапши про "готовые решения", и тогда вернешься к пункту один и так по кругу

    Ищи наиболее удобную для себя позицию - писать с нуля и требовать денег или использовать готовое и не отвечать за результат. И то и другое сделает тебя виноватым в конце концов, а значит по законам современных юристов - должным твоему заказчику (есть например способ "все делать по договору" - это когда ты рассказываешь что типа все будет честно, а на самом деле в договоре указываешь пункт про свободную лицензию устанавливаемых модулей, и в суде ты такой достаешь козырь из кармана - я его предупреждал и не виноват, что он не знает, что такое бесплатная лицензия на готовое решение, just business, nothing more)

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

    Значит ли это, что на бизнес лучше не работать совсем? Для меня да. Но растить картошку и копать огород, а потом подсесть на очко от того что пришли морозы и весь урожай сдох - тоже так себе подход. Поэтому растишь в себе стержешь и будь готов кидать твоих заказчиков, как только они ведут себя "недостойно", потому что да, заказчик тоже не единственный. Другая крайность - "если бы не было бизнеса" приведет к другому уровню безработицы, когда ни один двоешник не сможет устроится на работу, им придется учится, а им лень, поэтому они начнут грабить посредь бела дня. Текущее решение обеспечивает отсутствие гражданской войны - двоешники - директора, умные - рабы. Умные не выйдут на площадь потому что умные, двоешники обманывают но не грабят, потому что есть возможность и никто не наказывает.

    * Не нужно много разбираться в технологиях, чтобы делать простые вещи, технологии испокон веков были средством управления людьми, поскольку мы больны тягой к неизвестному.
    Ответ написан
    4 комментария
  • Как протестировать изменения UI сайта с помощью A/B теста?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Чувак ты вот этот маркетологический гон про а/б тесты и конверсию из головы выбрось, если хочешь реальную пользу людям приносить.

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

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

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

    Твой программер попросту говоря ставит условие в сайте:
    1. если время с 8 утра до 8 вечера - показать один вид, иначе другой вид
    2. на кнопках висит какая-нибудь utm_ метка для того же яндекса или банально факт нажатия самим же программистом пишется в любое хранилище - базу, файл, что хочешь

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

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

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

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

    Вот так это работает как-то.
    Ответ написан
    5 комментариев
  • Как передавать пароль от браузера серверу, как его хранить на сервере и проверять корректность?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    В зависимости от степени безопасности.

    Если разбить все это на "по-проще", общий принцип такой:

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

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

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

    Как ты понимаешь, это иллюзия безопасности, а не гарантия.

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

    Вот еще тема, которую василий сказал - шифровать пароль уже на стороне клиента в момент отправки формы яваскриптом. Представьте себя хакером. Вы получили пакеты какого-то чувака, поставили компьютер на расшифровку, подключив десяток видеокарт, расшифровываете пароль, а вместо него видите 64 символьный хеш, ну то есть он прямо от клиента таким вышел. После этого будут маты от того, что теперь массив видюх нужно заставить еще и ключевую фразу из хеша выдрать. Ну то есть еще время декодирования увеличивается. Если загнаться то хеш может быть не просто хешем md5() а например md5 от md5 от развернутой строки прибавленной к md5() прямой строки, прокинутой через побитовый сдвиг на один разряд - ну то есть даже в этом закодировать последовательность действий. При отсутствии https - наиболее надежный способ.

    И потом - программисты Yii не рекомендуют использовать фунцию md5(). Почему? Потому что она быстрая очень. И при переборе пароля массивом видеокарт перебирается он шибко быстро. Поэтому рекомендуют использовать hash функцию, которая для создания хеша использует побольше времени, несколько секунд скажем. При написании синхронной программы (сайта на php, например) - это заставит юзера подождать после регистрации секунды 3-4 лишних, но если загнаться то процесс генерации пароля можно запихнуть в асинхронщину, а пользователю сразу токен выдать, то есть пароль ему сгенерируется чуть позже. Таким образом - за счет более длинной хеш-функции по времени хакеру потребуется куда больше времени - то есть юзеру на прямое создание пароля 5 секунд, а хакеру на перебор нескольких миллионов паролей понадобится несколько лет. Никто ему не заплатит 10 косарей баксов, чтобы сломать ваш долбанный пароль ВКонтакте. Если банковская сфера - опять же как писал выше - хеш от хеша, да развернуть пару раз, да трижды порубить, потом постучать в бубен и все это в хеш еще раз и вуаля - декодирование пароля займет 100 лет.

    Еще значит, При малейшем намеки на несоответствие токена или внезапное изменение - сервак говорит "тю, дядя, давайка пройди второй этап авторизации, а то я не верю, что это реально ты" и просит приложить палец. Или ввести номер, получив СМС. Или вставить ключ-карту синюю (duke nukem hello). Но и тут есть взлом - ключ карту украсть, смс-ку - попросить телефон, приложить палец = отрубить руку, вырвать глаз и тд

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

    Так и тут - данные отправляемые в виде нулей и единиц. Компьютеры их так же легко перекодируют в пароль, как и закодировали. Чтобы этого не было, придумали ШИФРОВАТЬ строку в одну сторону. У сервака есть трафарет, у пользователя другой трафарет. Сервак шифрует своим, но назад можно расшифровать только пользовательским. Вернее можно и сторонним конечно, но современные компьютеры сделают это за много лет, и потому никто не заморачивается особо, производительность не та.

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

    Так что авторизация - она простая. Вся надежда на шифрование. А сертификат, на котором пол-мира делает бабло - это средство подтверждения того, что компьютер умеет шифровать. Интересно, что он кончается каждый год, как будто в прошлом году компьютер умел шифровать, а в этом вдруг разучился. На деле конечно - просто гоните бабло, иначе покажем красный крестик вместо зеленого замочка, и в гугле понизим, так что гоните бабки. Вот.
    Ответ написан
    1 комментарий
  • Как быть с кидалами на фрилансе?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Эта ситуация в целом по миру плачевная. Нормального заказчика/исполнителя можно по говору определить. Они обычно мало улыбаются.
    Ответ написан
    Комментировать
  • Можно-ли брать доп. плату за несоблюдение дэдлайна?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Я сейчас с тебя буду доплату брать за то, что ты бизнесом занимаешься, а не программированием. Ишь ты нео-бизнесмен какой пошел.
    Вежливо спроси что за дела, и откалибруй - врет или нет. Если врет - посылай. Если беда дома - помоги. Так работать надо. А не по-еврейски - побольше сэкономить на своих сотрудниках, чтобы побольше подарить ленивым клиентам.
    Ответ написан
    1 комментарий
  • Хранить ли фотки в базе данных?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Мое мнение - что от этого нужно избавляться.
    Если у тебя в фирме 1000 менеджерят, которые ничего не делают, а работать умеют только через CMS, вернее через нее тоже не умеют, но говорят что им надо - то это имеет смысл.

    Уже давно картинки у нас лежат просто по внешнему коду товара (будь то код 1С или поставщика или присвоенный скриптом) - и лежат просто в одной папке. Когда находим товар без картинки - переименовываем и закидываем. А дальше твой сайт делает ресайз картинок, и по названию исходной фотки он всегда может проверить - есть ли кешированный мелкий размер и выводит его.

    Для менеджерят пишется инструкция, что дескать переименовывать и вот форма - выделил из моего компьютера, перетянул. Скрипт после закачки записывает кто и когда.

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

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

    Ну то есть хранить список путей едва-ли более затратная или менее затратная операция чем каждый раз из пути картинки получать ее имя и проверять наличие файла. Один черт ты проверишь его наличие, даже если у тебя будет список путей.
    Ответ написан
    Комментировать
  • Как по-умному сделать мульти-JOIN + CASE-statement?

    gzhegow
    @gzhegow Автор вопроса
    aka "ОбнимиБизнесмена"
    Короче, трепались трепались, указывали, поясняли, вот решение.
    sandbox.onlinephpfunctions.com/code/adb1eb06ae01c6...

    "Неграмотно", зато быстро и работает.
    Ответ написан
    1 комментарий
  • Как сократить бриф на разработку сайта?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Знаешь где классное тз, ну для дизайнера не знаю - но для программера - в мануале официальном первой симфони. Там userstory -> скетч -> код + диз
    Ответ написан
    Комментировать
  • Куда пойти фронтендщику?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Ну можешь еще 10 языков изучить.
    Или осознать, что бизнесу нужны:
    а) твои понты
    б) твои сертификаты
    в) твоя возможность никогда не сознаться, что ты чего-то не знаешь
    г) гарантия, что ты не будешь выпрашивать повышения оклада

    В каждом из этих пунктов можно спотыкаться, но за это придется страдать.
    Ответ написан
    Комментировать
  • Привязана ли команда SUM (mysql) к оператору SELECT FROM?

    gzhegow
    @gzhegow Автор вопроса
    aka "ОбнимиБизнесмена"
    Опс, я олень, забыл проставить связь, и он всегда подключался к моделям без учета бренда, вот одинаковое число и получается :( извините за беспокойство
    Ответ написан
    Комментировать
  • Есть сайт, который берет данные из БД, как добавить вторую БД?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Константин, тебе нужно немного по-другому воспринимать проекты.
    Сейчас у тебя есть готовое решение в виде CMS, которое дает возможность подключить одну базу и с ней работает по заданным инструкциям.

    Но сайт это немного проще, чем cms. Это компьютер имеет инструкцию - спросить у такого-то источника, преобразовать, и показать в том виде что вам нужно.

    Чтобы подключить вторую БД одновременно с первой может случиться так, что ваша CMS не умеет этого делать. И вам придется писать систему скриптов, чтобы делать запрос к другой БД (у вас появляется второй "сайт") и считывать его первым.

    Наиболее простой способ для этого - тот самый аякс запрос, о котором вы говорите.
    Вы пишете скрипт, в котором написано примерно такое: "запросить то-то и то-то с такими-то условиями и вывести это в виде json". Со своего сайта делаете команду file_get_contents() этого файла и получаете все, что он вам выдаст.

    Аналогом file_get_contents для jquery будет $.ajax(). Они выполняют примерно то же самое (на низком уровне конечно нет) - но суть - вы отправили запрос, вы получили ответ. Дальше его нужно считать и либо сохранить в вашу базу, либо вывести как вам нужно и где нужно.

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

    Все как в жизни - у вас есть пульт для управления (клавиша вызовет действие), у вас есть среда - которая что-то сделает (компьютер, телефон или кусок железа с конденсаторами), и у вас есть место, куда он должен запомнить то, что вы скажете.

    Вы просто запросили и просто сохранили. Откуда и куда - не важно. Мы много лет назад пытались переубедить руководителей в том, что CMS это путь вникуда. Сегодня вы нашли эти грабли. CMS - закрытая система работающая с одним источником данных. Хотите другой - либо пишете другую систему, которая по команде в браузере выдаст данные, либо делаете прямой запрос из скрипта на другой сервер, но этим вы засираете код, и, напоминаю, вы были предупреждены, что есть понятие "плохо" которое в данном случае синоним "неудобно Вам будет".
    Ответ написан
    Комментировать
  • Cron, wget и отгрызание части файла - почему опять стэк может не работать?

    gzhegow
    @gzhegow Автор вопроса
    aka "ОбнимиБизнесмена"
    Вероятный ответ напишу, пока не отмечаю:
    1. В коде имелась функция register_shutdown_function() которая писала логи при завершении программы
    2. После редиректа происходил вызов статического метода Import::end() который добавлял в лог "Спасибо, скрипт все" и вызывал exit();
    3. Несмотря на это пришлось разобраться в консоли дебиана и поиграть с командами top/free, поизучать логи, посмотреть, что все вроде бы работает...
    4. На мысли наводила только надоедающая "Mysql server is gone away", но казалось бы - почему?

    С одной стороны я на Битриксе такую ошибку часто ловлю - код у них паршивый, раз требуется в 10 раз более мощный сервак, чем для любого интернет-приложения.

    С другой стороны сам скрипт работает с Редиректом, и несмотря на то, что транзакция закрывается и от сервера отключаемся - что-то шло не так.

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

    Память увеличил на виртуалке, и все пошло правильно работать. Тут то и пришла идея - а что если. Вывел top и увидел ужас- на меня одного запущено 32 апача, как будто он вообще не завершал процессы.

    А ведь функция exit() все таки есть. Видимо где-то происходит косяк.

    Я сделаю пару тестов без основного кода загрузчика, попытавшись поймать жука, но на кроне, чтобы убедится, что в этом все дело. Если да - отмечу решением.
    Ответ написан
    Комментировать
  • Как повторять ajax запрос в случае неудачи?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Ограничитель поставь в разах, беда будет
    Ответ написан
    Комментировать
  • Стоит ли использовать штатные методы OpenCart для изменения категорий и товаров при импорте из 1с?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Ты всегда можешь использовать любые методы импорта.
    Но используя штатные методы есть вероятность что разработчики учли обновление нескольких таблиц базы, вместо одной, которая кажется очевидной.

    Например, в Битриксе при добавлении элементов через админку или апи автоматически заполняется целая куча полей и если самому это вручную делать - можно уехать крышей.
    В то же время АПИ битрикса не упрощает, а даже усложняет доступ к БД - твой код становится даже сложнее, чем писать SQL запрос. Поэтому все равно прибегаем к хитростям вида "запросить SQL-ом, закачать через Апи"

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

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

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

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

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

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

    И это все достижимо только если самому не делать вообще ничего, а всегда иметь крайнего.

    И понимая это, какими будут твои действия? С точки зрения логики - не работать на бизнес и на деньги. Но ведь это заставит тебя копать землю и растить для себя продукты, а значит бросить программирование... поэтому просто вливайся в колею и улыбайся, делая вид, что ты глупый и ничего не понимаешь.
    Ответ написан
  • Как задать для wget -O параметр с динамическим именем страницы?

    gzhegow
    @gzhegow Автор вопроса
    aka "ОбнимиБизнесмена"
    Пришлось прибегнуть к параметрам name=$(date +"%Y-%m")
    И сериям команд &&
    name=$(date +"%Y-%m") && wget -O ${name} "url?param1=1&param2=2"
    Ответ написан
  • Какие есть способы по вычислению и блокировки пользователя?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Ты можешь что-то сделать с соединенным к тебе пользователем или оставившим свои данные.

    1. IP-адрес
    Если он сейчас ходит по твоему сайту - он открывает соединения с определенных IP. Можешь их заблокировать, но вместе с ним отвалится все компьютеры, которые ходили с его модема - а в некоторых компаниях 100 компов по одному роутеру сидят - забанишь сразу 100 человек. А крутой хакер использует прокси или анонимайзер и все равно попадет на сайт

    2. Cookies
    Вешание куки и запрет входа на сайт по куки. Способ для совсем уже новичков - 80% людей за 35 лет на постсоветском пространстве. Вешается клиентский параметр, который очищается через Chrome Console например. Но они не знают про ХромКонсоль - и будут получать отворот поворот.

    3. Аккаунт
    Если твой клиент зарегистрирован - ты можешь удалить его аккаунт. Эта система прекрасно работает в платных онлайн играх, где под логин система привязывается. Залочил аккаунт, а все остальные не могут системой пользоваться. Говняное решение для продаж, но наилучшее для платных сервисов. Реализовать сложнее, чем описать.

    4. По чем-то еще
    Сегодня существуют сервисы, выдающие информацию о привязанной страничке ВКонтакте, одноклассниках и чему угодно. Получая такую информацию от имени твоего сервера, можно блокировать чувака даже по этому. По номеру телефона, по любой информации, которую ты можешь о нем получить в данный момент времени. Вопрос в том, что это обходится все очень легко - на сайты ходится через прокси, телефон нигде не указывается, в конце концов включается режим инкогнито, который сделан специально для таких случаев - когда ты хотел бы быть абсолютным анонимом. В этом случае все что тебя спасет - IP адрес, но помни что у половины интернета провайдеры выдают его случайным образом, залочив сегодня и навсегда - ты запретишь вход не тому, кому хотел.

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

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

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    1. При нажатии на ссылку редирект на ваш php или другой скрипт - в общем к вашему серверу, который:
    а) Узнать текущие координаты клиента (запрос в поиск как это делать)
    б) Загрузит api яндекс карт и даст вам карту
    в) Буквально двумя командами построит маршрут от точки до точки
    г) по желанию - хочешь - скриншот сделай, хочешь карту оставь, зачем тебе клиента с продающего сайта на гуглмапс выбрасывать это загадка конечно, он должен любыми способами на твоем сайте оставаться, добровольное желание его выгнать - это твой бизнесмен ну прям мозг я отвечаю.

    Я те больше, скажу тебе даже клик для этого запроса не нужен (клик - штука в продажах дорогая) - просто при заходе на страницу в фоне запрос на твой скрипт который выдает уже карту с маршрутом и масштабом
    Ответ написан
    Комментировать
  • Sublime Text - Как написать "горячую клавишу" для поиска выделенного текста на php.net?

    gzhegow
    @gzhegow Автор вопроса
    aka "ОбнимиБизнесмена"
    Для Windows. Любой линуксоид сделает под себя, если хочет.
    import os, sublime, sublime_plugin
    
    class ChromeSearchPhpnetCommand(sublime_plugin.WindowCommand):
      def run(self):
        view = self.window.active_view()
        text = view.substr((view.sel())[0])
        text = "http://php.net/manual-lookup.php?pattern=" + text + "&lang=ru&src=%7Breferrer:source?%7D"
        os.system("start /b /d \"C:\\Program Files (x86)\\Google\\Chrome\\Application\" chrome.exe " + text + " -incognito -start-maximized")
    Ответ написан
    Комментировать
  • Что удобнее, тем, кто уже пробовал - Передавать ошибку return или сразу бросать Exception прямо из функции/foreach?

    gzhegow
    @gzhegow Автор вопроса
    aka "ОбнимиБизнесмена"
    На текущий момент мой ответ изменился, когда я закончил работу с пачкой поставщиков и постоянно меняющимися условиями - сегодня по цене, потом по сортировки, завтра еще по чем...
    1. Не использовать for {}, если есть map()
    2. В map возвращать array(1,msg,data)
    3. Если map вложенный или родительский - в ответ отправляется data, а ошибки собираются в err[]

    Таким образом где-то так:
    function mapfunc($item) {
      return array(null, null, array(
        "stdout" => $item,
        "stderr" => $foobar,
        )
      );
    }


    Это в соответствии с договоренностью о возврате массива array(errcode, msg, data).
    По итогу после map() для какой-то коллекции на выходе получим коллекцию из отчетов.

    Если с элементами после отчета нужно что-то делать - собираем их из отчетов, сами отчеты сохраняем для будущего вывода. С элементами повторяем процедуру.

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

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

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

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

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

    Отдельная реализация может быть даже такая:
    $rep = array();
    $data = array_map(function ($row) use (&$rep) {
      $bad = false;
      if ($bad):
        $rep["bad"] = array(1, "msg", array("foo" => $foo, "bar" => $bar));
        return null;
      else:
        $rep["good"] = array(null, "OK", array("foo" => $foo, "bar" => $bar));
        return $row;
      endif;
    });


    Это все к тому, что ХОРОШЕЕ приложение - НЕ ИМЕЕТ ошибок. А с точки зрения логики приложение НЕ МОЖЕТ не иметь ошибок, поскольку нельзя гарантировать идеально правильного человека. Смысл ошибки сводится в конечном итоге к вине пользователя. Если пользователь сотворил беду и сам хочет ошибку - он должен ее получить, а если он ничего не делал толком, а ошибка произошла - то ее не должно было произойти.

    Но показывать то их нельзя, поэтому для главного модуля это warning, а для конечного этапа это exception. А ошибка одна и та же.
    Ответ написан
    Комментировать
  • Как называется эта фича по синтаксису PHP, объявлять строки, не используя ни одинарных, ни двойных кавычек?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Безумно неудобная штука
    heredoc
    nowdoc
    и тд.
    Главный недостаток - закрывающий тег должен быть В НАЧАЛЕ строки, что рушит всю вложеннность кода к чертям.

    До сих пор использую так:
    сначала текст напишу, если это например sql запрос
    потом разберу на строки переносами
    потом выделяю все строки разом, жму home чтобы в начало строки, ставлю кавычки, потом end - опять кавычки
    Ответ написан
    Комментировать