Ответы пользователя по тегу Веб-разработка
  • Как убрать X-Redirect?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    X- префикс значит что заголовок сделан вручную, а не отдан сервером, никакой магии
    Какой-то плагин думает вместо тебя

    Причем вручную можно сделать и просто заголовок. Это вроде как соглашение - делаешь свой - делай X-
    Ответ написан
    Комментировать
  • Микросервис простым языком?

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

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

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

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

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

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Просто помни об уголовной ответственности

    С нижеизложенным я сражался - имел прецеденты и писал защиты.

    1. Покупаешь прокси или пишешь парсер проксей (понадобится безголовый браузер)
    2. Пишешь обертку чтобы CURL автоматически проверял и менял прокси более менее разумно или всегда
    3. Открываешь сайт и панель Ф12 - там вкладка Network. Пробуешь купить (даже если денег нет, но кнопка купить есть). Смотришь что на сервер отправляется. Может банально кто-то цену зашил в запрос, хотя это совсем глупая ошибка. Бывает прикол что зачисляешь деньги на сайт, делаешь заказ, потом заказ отменяешь, а отмена написана криво и требует 2 секунды времени. За эти две секунды скриптом можно 1000 раз отменить заказ и получить 1000 возвратов
    4. Смотришь в режиме где потыкать, что поменять. В идеале найти чувака который уже покупал и на боевом посмотреть как процесс происходит
    5. Дальше уже начинаешь играть в иньекции и взлом, в поля форм пхаешь sql - закрывающие кавычки, точки с запятыми. Пытаешься вызвать Critical mysql error. Если получилось - наощуп танцуешь от этого. Если нет - пытаешься яваскрипт код сунуть в формы, но там где есть форма комментариев например, код должен отсылать тебе куки других посетителей, чтобы ты успел под их именем зайти пока сессия не устарела и за их счёт купить

    Но уже много лет как от всего этого написаны защиты. И программистов держат на работе чтобы таких приколов не было.

    Процесс на самом деле не из весёлых и не легкий ни разу, бывает проще найти владельца и убедить его тебе дать, чем без его ведома ломануть его сайт. Но иногда везёт
    Ответ написан
  • Как использовать JWT с httpOnly кукой?

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

    Другое может какойто локалсторейдж но никогда не видел статей которые прям хвалят локал сторейдж.

    Еще можно пробовать сделать сервер сессий на какомто редисе. И туда пихать а не в куку. Но походу все равно кудато надо деть идентификатор сессии потом поэтому не, бред.

    Видимо надо два запроса делать. Один аутентифицируйся на аутсервер, а по возврату авторизуйся уже на другой сервер. Кука на первом сервере типа как не нужна получается. Задача тупо переслать ответ авторизатора второму серверу и уже там куку сделать...
    Ответ написан
  • Как хранить список стран в бд для мультиязычного сайта?

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

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

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

    В базе хранят ключи из этого хранилища. После доставания информации копируют поля с припиской _lang доставая из переводов нужные ключи и производя подстановку переменных во фразу

    Мне очень понравился синтаксис одного из вордпрессовских модулей который я увидел много лет назад. Говорят он тянется еще из ruby, но я на руби не писал никогда.
    "[:en]hello world[:ru]привет, мир[:by]прывет, мiр"

    и функция _translate() понадобится
    потом _translate_to_language() - когда нужно будет на русской версии показать английским что-нибудь
    потом _translate_international() - когда нужно на любой версии показать базовым языком, который понимают большинство народов например
    потом _get_translate_array() который отдает просто массив для фронта, чтобы туда отправить переводы пачкой и там делать _translate()

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

    со временем возникает необходимость сделать переводы с поддержкой окончаний "22 рубля, 25 рублей, 21 рубль", наш синтаксис становится таким:
    "[:en]рубль[:ru1]рубля[:ru2]рублей[:en]rouble[:en1]roubles[:en2]roubles"
    и функция _getPluralIndexFromString() понадобится

    потом нам понадобятся подстановки, мне понравился такой синтаксис
    "[:en]hello, {=name}[:ru]привет, {=name}"
    и функция _interpolate() понадобится. Почему равно? Чтобы искать можно было с помощью while (strpos()) а не регуляркой
    и конечно же захочется чтобы в нее постоянно не скармливать массив параметров ключ-значение, а просто передавать их через запятую чтобы перевод выглядел как-то так
    __('@path.type.key', $param1, $param2) и оно само понимало что первый параметр нужно в первый поставить

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

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

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

    опять же в таком синтаксисе ключи переводов можно безболезненно сортировать по алфавиту в любом редакторе, т.к. переносов строк как таковых нет - мы используем \n. и можно нажимать F9 и все становится аккуратненько

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

    ключи удобнее всего именовать в следующей конвенции
    path_to_module.type.key

    сначала кажется что ключом может быть сама фраза на английском, но потом нужно получить по русскому тексту английский и облом. поэтому сразу ключи, без вариантов
    site_categories_form.title.product => "[:ru]Продукт"
    site_categories_form.option.product_empty => "[:ru]-- ВЫБЕРИТЕ ПРОДУКТ --"

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

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

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

    Следующая проблема будет при сборке библиотек в один файл для скорости. Вот тут вспомни про папки. Будешь указывать не только addCss но и copyDirectory, иначе либа заработает но вместо картинок будут крестики. И да для либ распространяемых целиком не удастся сделать общий файл со всеми библиотеками, ибо придется менять код файлов которые часто внутри имеют относительные пути. Ктото решает вебпаком, ктото подключает целые либы без связывания в один файл, ну такое
    Ответ написан
    Комментировать
  • Веб приложение jquery + php + mysql. Как открыть вкладку внешнего сайт и перенести туда js код?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    конкретно твою задачу сделать нельзя по соображениям безопасности.
    но подгрузить во фрейме можно попробовать правда это бред.

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

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

    но из разработчиков вконтакте для тебя такого никто писать не будет.
    Ответ написан
    Комментировать
  • Какую книгу по веб-разработке лучше для начинающего, актуальные на сентябрь 2017?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Устал повторять что лучше обучения чем с другим человеком быть не может. Отец-индеец не дает сыну книга как метать копье, он берет его на охоту и говорит "делай как я".
    Ответ написан
    2 комментария
  • Можно ли где-то найти дамп большой БД?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    <?php
        $host = '127.0.0.1';
        $db   = 'test';
        $user = 'root';
        $pass = '';
        $charset = 'utf8';
        $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
        $opt = [
            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_EMULATE_PREPARES   => false,
        ];
        $pdo = new PDO($dsn, $user, $pass, $opt);
        for ($i = 0; $i < 1000000; $i++) {
          $pdo->query(sprintf('INSERT INTO table (id, value) VALUES (%d, "%s")', $i+1, uniqid());
        }
    Ответ написан
    Комментировать
  • Как сделать 301 редирект для всего сайта с http и www на https без www?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Универсально и под любой проект. Отредактируйте, т.к. тут идет редирект на https://www., если сервак не тестовый и не локальный.

    # -- FORCE HTTPS
    <IfModule mod_rewrite.c>
      RewriteEngine On
    
      RewriteCond %{HTTP_HOST} ^test. [NC]
      RewriteCond %{HTTP_HOST} \.loc$ [NC]
      RewriteCond %{HTTPS} =on [OR]
      RewriteCond %{HTTP:X-Forwarded-Proto} https
      RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]
    
      RewriteCond %{HTTP_HOST} ^test. [NC]
      RewriteCond %{HTTP_HOST} \.loc$ [NC]
      RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
      RewriteRule .* http://%1/%{REQUEST_URI} [R=301,L,QSA]
    
      RewriteCond %{HTTP_HOST} !^test. [NC]
      RewriteCond %{HTTP_HOST} !\.loc$ [NC]
      RewriteCond %{HTTP_HOST} !^www\. [NC]
      RewriteCond %{HTTPS} !=on
      RewriteCond %{HTTP:X-Forwarded-Proto} !https
      RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]
    
      RewriteCond %{HTTP_HOST} !^test. [NC]
      RewriteCond %{HTTP_HOST} !\.loc$ [NC]
      RewriteCond %{HTTPS} !=on
      RewriteCond %{HTTP:X-Forwarded-Proto} !https
      RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]
    </IfModule>
    Ответ написан
  • Как сделать многоязычное отображение служебных сообщений на PHP?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    А еще есть такой стандарт любопытный - .po/.mo файлы, и их редактор - Poedit. С ними очень здорово танцевать, когда языков больше 4, а файлов больше 100.
    Ответ написан
    3 комментария
  • Что конкретно делает Google PageSpeed Module?

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

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

    там бывают приколы типа картинка не загружается вообще. почему - потому что у тебя в htaccess есть правило редиректа с английского языка на рут - и оно везде заменяет /en на /, а в слово pagespeed-encoundted - есть en.

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

    Так что штука противоречивая. На решение из коробки поставил-забыл даже близко не похоже. Хотя претендует.
    Ответ написан
    Комментировать
  • Какую технологию/фреймворк выбрать для разработки небольшого веб-приложения?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Чей-то развод прокатил. У людей уже проблема не сделать, а даже выбрать.
    Я так скажу - без программиста лучше не работайте. Нанимайте самого дорогого и платите ему. Если у него не получится - вам уже никто не поможет. А пацану приятно.
    Ответ написан
    Комментировать
  • Можно ли запустить php скрипт используя тег img или адресную строку, если он передаётся с header-ом "Content-Disposition: attachment"?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Можно мне еще раз другими словами объяснить, что именно ты хочешь сделать?
    Сервер всегда вешает заголовок attachment?
    И ты можешь закачивать?
    Закачай новый htaccess где будет прибит новый заголовок
    Или в самом скрипте укажи заголовок
    Скрипт это лишь способ выполнить команду серверу
    Если он вешает заголовок, то это значит где-то есть команда привесить заголовок.
    Давай поточнее
    Ответ написан
  • Правильный ли БЭМ?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Неправильный

    Минимум
    а1 .section-videos
    а2 .section-videos__slider
    а3 .section-videos__text
    а4 .section-videos__title

    Второй блок по желанию (в этом случае а3 и а4 не нужны, т.к. есть б2 и б3)
    б1 .section-video-slider
    б2 .section-video-slider__text
    б3 .section-video-slider__title
    Ответ написан
    Комментировать
  • Как правильно сделать с точки зрения БЭМ?

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

    В Бэме примерно также. У тебя есть два блока - совершенно не важно кто они в иерархии и кто из них старше. Каждый DOM элемент ты можешь называть одним именем для одного блока и другим именем для другого.

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

    .footer__sliderimage.slider__image
    или чтобы еще более наглядно
    .footer__kakajatokartinka.slider__kartinkaslaida

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

    Здесь самое главное - не связывать блоки между собой. Я имею в виду что в DOM дереве они конечно родитель и потомок. Но вот это связывание в иерархию потом создает путаницу и невозможность вставить один блок в другой. Отойди от мысли вложенности блоков друг в друга - здесь они все существуют как бы параллельно. Для слайдера - картинка - это "картинка слайда", а для футера это "картинка слайдера" или просто "какая-то картинка". Не связывай их в иерархию больше чем на один уровень (блок-элемент) и не приплетай в понимание БЭМа дерево DOM. В этом и есть секрет. Один элемент DOM дерева может быть:
    - элементом а1 для блока 1
    - элементом б1 для блока 2
    - блоком 3
    но вложенность все равно будет один уровень, даже если от блока до элемента несколько DOM-уровней. Блок может быть footer, а картинка слайдера от него еще в двух дивах и трех таблицах по глубине. И тем не менее это все равно один уровень вложенности. Ты просто манипулируешь своей собственной таблицей названий, забивая на чужие иерархии
    Ответ написан
    Комментировать
  • Какие книги почитать для начинающего веб прогера?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Для программирования тебе понадобятся:

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

    2. понять какие инструкции бывают в почти всех языках программирования, if/switch/for/while

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

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

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

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

    Думаю, ты готов :)
    Ответ написан
    Комментировать
  • Ответственность за баги при нетривиальном поведении?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Для понимания:
    Бизнес-адвокаты-финансисты - это сферы которые __играют__ со словами "хорошо-плохо-правильно-неправильно"
    Программисты-инженеры-слесари - это сферы которые делают и у них есть только "работает-в-моменте/не-работает-в-моменте"
    Врачи-преподаватели - посередине, но современная тенденция они стараются побыстрее перейти в первую группу

    Чтобы тебе легче жилось, тебе придется ВОЗНЕНАВИДЕТЬ первую группу, а не полюбить её.
    Только так можно самому начать переходить в эту группу.

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

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

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

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

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

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

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

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

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

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

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

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

    Как только Вам станет что-нибудь нужно - с Вас попросят больше.
    А если не станет - попытаются от Вас спрыгнуть или кормить завтраками.
    Бизнес есть лицемерие и только)
    Ответ написан
  • Можно в JavaScript узнать по какому потомку объекта кликнули?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    Ну так событие "клик" на элементе.
    А элемент предварительно впихни в массив потомков.
    Потом пройдись проверкой с тройным равно (this === $i) - вот ответ
    Ответ написан