Pull to refresh
0
0
Сергей @cybd

User

Send message
// Client.php
// ...
public static function byStatusAndNameComparator(Client $a, Client $b) 
{
    if ($a->isVip() === $b->isVip()) {
        return $a->name <=> $b->name;
    }

    if ($a->isVip()) return -1;
    if ($b->isVip()) return 1;
}

Ну и где надо отсортировать


usort($clients, [Client::class, 'byStatusAndNameComparator']);

что-то в этом духе.


Ну и да, всегда можно сделать что-то типа linq или вообще дикость, сортировать средствами sql.

функции аля mysql_query и mysql_real_escape_string были удалены из PHP еще в версии 7.0.


Не быть тонкой обёрткой над C

То есть предлагаете реализовать стандартную библиотеку на PHP? Не ну можно, но это тогда ждем JIT.


С нормальными обобщениями, а не кучей функий sort/ksort/krsort/usort и так далее.

А что именно вам тут не нравится? У каждой функции свое поведение. Нужно сортировать ключи — юзаем ksort. Реверсивная сортировка по ключам — rksort.


Если вам не нравится — вы всегда можете сделать так:


// std.php

namespace array {
    function reverseKeySort(iterable $array): iterable  { \rksort($array); return $array;}
    function keySort(iterable $array): iterable { \ksort($array); return $array);
    function split(iterable $arr, ?string $delimiter): iterable { /** ... */ }
    function join(iterable $arr, ?string $glue): string { /** ... */ }
}

namespace str {
   // по аналогии
}

Я часто вижу вот такое вот "надо переименовать" но никто не переименовывает почему-то.

Судя по этой январской презентации, Ruby, PHP, Python имеют аналогичные проблемы с десериализацией данных, полученных от недоверенных источников.
Ура! Наконец-то хоть кто-то начал задавать правильные вопросы. Я отвечу на второй, на мой взгляд он самый важный.
Композеру нужно столько памяти, потому что он туда(в память) закачивает скачанные пакеты (.tar.gz). Затем он там туда же(да да, в память) их распаковывает в поисках composer.json и на его основе скачивает зависимые пакеты(опять же в память).
Мы пытались сделать пакет размером в 700МБ. Мы падали по memory_limit в 2G.
Дело не а PHP и его GC. Дело в самом композере
Рискую быть оплеванным ликующей толпой, но не могу не сказать. Да, выполнение скрипта ускорилось в разы, но что действительно это значит?

1) Отключать GC — плохо. «Но расход памяти не увеличивается, значит циклических ссылок нет, так какая разница?» На самом деле они есть до этого места. И даже если сейчас после выключения GC их нет, не факт, что они не появятся в будущем. Теперь каждый комит надо проверять на наличие циклических ссылок.

2) Composer — пакетный менеджер. Что он делает, что ему в памяти постоянно нужно держать сотни мегабайт и создавать огромное количество объектов? Отключение сборщика не устранило проблему, а лишь отложила её решение.

3) Как так получается, что отключение сборки мусора ускоряет выполнение скрипта в десять раз? Что не так со сборщиком мусора? В нем нет поколений объектов, и ему приходится перебирать все объекты при каждой сборке?
Новые велосипеды — такие новые :)

man grep (grep -rl 'pattern' /path/to/files)
И еще немного про isset и unset.
Можно писать так isset($array[1]) && isset($array[1][2]) => isset($array[1], $array[1][2]) => isset($array[1][2])
и аналогично unset($array[1]); unset($array[2]); => unset($array[1], $array[2]);
UFO landed and left these words here
Время для редактирования закончилось…
Идём в сообщество/паблик/etc
Нажимаем предложить новость.
Заливаем картинку, например, демотиватор.
Отправляем предложенную новость.
Перезагружаем страницу сообщества, снова «Предложить новость»
Видим предложенную новость.
Кликаем на время отправки.
Лайкаем залитый демотиватор и делимся с друзьями.
Оп. У нас на стене есть демотиватор от имени сообщества.
от себе могу добавить, довольно долго вырабатывал для себя оптимальные циклы жезнидеятельности(рабочий, отдых)
— вставать в строго определенное время
— ложиться в строго проделенное время
— основные приемы пищи должны быть определены
— дополнительные приемы пищи должны заниматься не более 1/6 от основных приемов пищи и не чаще чем раз в 3 часа
— не курить
— не употреблять алкоголь, можно немного вина в выходные
— если вы не укладываетесь в сроки, то вместо различных энергетиков, которые убивают вашу печень и цнс, лучше пить китайский чай.
на себе опробовал пуэр, да хун пао и матэ. чайника 0,7л пуэра хватает, чтобы держать ваш мозг в тонусе около 4-х часов.

Сейчас читаю книгу: four hour body fourhourbody.com/
это просто бомба, всем советую.
И как раз хорошо ложится в тематику статьи. Все пункты конечно сам не осилил. Но насчет некоторых на личном опыте могу сказать, что действительно полезно. Особенно для увеличения «объема «кеш-памяти»».

60 простых советов для улучшения работы мозга:
1. Решайте загадки и головоломки.
2. Развивайте амбидекстрию. Используйте свою неведущую руку, чтобы чистить зубы, расчесываться или использовать мышь, сидя за компьютером. Пробуйте писать обеими руками одновременно. Поменяйте местами нож и вилку, когда пользуетесь ими.
3. Обращайте внимание на неопределенность и двусмысленность. Научитесь любить парадоксы и оптические иллюзии.
4. Заблокируйте на время одно или несколько чувств. Ешьте с завязанными глазами, заткните уши во время выполнения обычных дел, примите душ с закрытыми глазами.
5. Находите связь между несвязанными на первый взгляд темами.
6. Научитесь использовать различные раскладки клавиатуры.
7. Находите новые способы использования обычных предметов. Например, сколько разных способов применения обычного гвоздя вы сможете придумать?
8. Опровергайте свои предположения.
9. Развивайте творческое мышление.
10. Всегда выходите за рамки первого «правильного» ответа, приходящего на ум.
11. Транспонируйте реальность. Всегда спрашивайте себя: «А что если?..»
12. Переверните картинку на рабочем столе компьютера вверх ногами.
13. Учитесь логике. Решайте логические задачи.
14. Хорошо ознакомьтесь с каким-нибудь научным методом.
15. Рисуйте. Что угодно. Вам не нужно быть художником для этого.
16. Научитесь жонглировать.
17. Занимайтесь спортом.
18. Соблюдайте осанку.
19. Пейте много воды.
20. Пользуйтесь палочками для еды.
21. Дышите глубоко.
22. Слушайте классическую музыку.
23. Избавьтесь от прокрастинации.
24. Смените стиль одежды. Ходите босиком.
25. Упростите свою жизнь.
26. Играйте в шахматы или другие настольные игры.
27. Развивайте чувство юмора. Придумывайте свои шутки.
28. Развивайте наблюдательность. Например, обращайте внимание на красный цвет в течение дня или находите автомобили определенной марки в общем потоке. Придумайте тему и сосредоточьтесь на ней.
29. Ведите дневник.
30. Учите иностранный язык.
31. Ужинайте в разных кафе и ресторанах. Отдавайте предпочтение этническим местам.
32. Учитесь программировать на компьютере.
33. Произносите длинные слова наоборот.
34. Смените окружающую среду. Измените расположение мебели дома.
35. Пишите. Напишите рассказ, стихотворение или заведите блог.
36. Учите язык жестов.
37. Учитесь играть на музыкальном инструменте.
38. Учитесь скорочтению.
39. Пробуйте мысленно оценивать течение времени.
40. Выполняйте арифметические расчеты в уме.
41. Запоминайте имена людей.
42. Медитируйте.
43. Не смотрите телевизор.
44. Меняйте скорость выполнения привычных дел. Попробуйте делать что-нибудь очень медленно или очень быстро.
45. Занимайтесь только одним делом одновременно.
46. Избегайте когнитивных предубеждений.
47. Поставьте себя на чужое место. Представьте, как другие люди решали бы ваши проблемы.
48. Найдите время для уединения и отдыха.
49. Примите обязательство постоянно учиться чему-то новому.
50. Совершите путешествие за границу. Узнайте о различных стилях жизни.
51. Знакомьтесь с работами признанных гениев.
52. Общайтесь с теми, кто вам близок по интересам.
53. Конкурируйте с кем-нибудь.
54. Не окружайте себя одними единомышленниками. Выслушивайте людей, которые не согласны с вами.
55. Устраивайте мозговой штурм.
56. Коллекционируйте умные цитаты.
57. Читайте классику.
58. Развивайте самосознание.
59. Говорите вслух о своих проблемах.
60. Опишите какой-нибудь случай из своей жизни в мельчайших подробностях.
UFO landed and left these words here
Читал статью и ловил себя на мысли что это справедливо для западного типа руководителя, но никак не для России.
Потом вспомнил про статью о Microsoft, про внутренние дрязги и как народ не дает друг другу развиваться — такая нездоровая конкуренция.

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

И опять же, по моему, 10 летнему опыту работы могу сказать, что все зависит от самого главного. От того, кто непосредственно всем управляет в компании, владелец или ген. директор. Он по своему разумению будет выстраивать отношения с подчиненымии те начнут с него снимать кальку и общаться с вами также, немного искажая в силу личных особенностей (пример можно увидеть в рассказе Ш. Бекасова «ЧТО ТАКОЕ СУБОРДИНАЦИЯ» из цикла — «Банковская тайна». Вообще замечательный цикл и замечательные рассказы. Для людей, который пишет вот такие статьи, полезно было бы ознакомиться с опытом банковских служащих).
Ну тут надо знать ситуацию. Как я писал выше — нужна динамика.

Если раньше было хорошо, а сейчас кризис — значит надо понять, что у вас задача не сидеть от 9 до 18 и делать отчеты в Excel. Перед всей фирмой стоит задача — ВЫЖИТЬ. Значит, либо уходите, либо беретесь за мозговой штурм и думаете — как привлечь клиентов, где взять денег, как бы продержаться. Думаете с таким ракурсом, в такой области, где шарите. Гениальные идеи приходят всем — надо уметь их поймать и дать им место в голове. После кризиса если не станете руководителем отдела продаж — уйдете и сделаете свой бизнес :)

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

Правда благодарности ждать не стоит — как говорится, если вы оказали кому-то неоценимую услугу — то оплаты не стоит и ждать.
Есть еще вот такая штука:
Тест Джоэла Спольски 12 шагов к лучшему коду

1. Пользуетесь ли вы системой контроля версий?
2. Можете ли вы собрать продукт за один шаг?
3. Выполняете ли вы ежедневные билды?
4. Используете ли вы базу данных ошибок?
5. Исправляете ли вы ошибки перед написанием нового кода?
6. Есть ли у вас актуальный план работ?
7. Есть ли у вас спецификация?
8. Предоставлены ли вашим программистам спокойные условия для работы?
9. Используете ли вы новейшее дорогое оборудование?
10. Есть ли у вас тестеры?
11. Пишут ли кандидаты на работу код во время собеседования?
12. Проводите ли вы коридорное тестирование удобства использования программ?

по странному стечению здесь тоже 12 рекомендаций.
хотя возможно это моя паранойя

кому интересно тут
Очень интересно, спасибо!
Кстати, С++ программисты, рекомендую почитать книгу «С++ для профессионалов(Professional C++)» Николас А. Солтер, Скотт Дж. Клепер
Там есть и про практику правильного развития проекта.
Сперва надо задать вопрос. На сколько требуется серьезная и подлинная авторизация. Если у вас простой форум, то достаточно просто сравнивать логин и хеш пароля. Если платежная система или крайне ценная информация, доступ к которой должен быть ограничен, то лучше замудрить. На примере одного крупного банка. Они выдают карточку с токенами, там 100 5-7 значных чисел. Перед каждой операцией надо вводить очередное число.

md5 легко ломается, лучше брать что-то типа sha(md5(user_email+login + salt)). Я не силен в http-авторизации, но обычную сделал бы так:

- users_table: uid, login, hash(password), token
- users_token_table: uid, token (int)

вторая таблица содержит переменные коды, выданные пользователю. При регистрации пользователя заносим его первый токен в таблицу users из таблицы token.
При авторизации удаляем токен из token и кидаем следующий в users. Если с токенами связываться лень (а это для большинства интернет-авторизаций и не надо), можно сделать проще: в users хранить token (какой-нибудь 128битовый казябрик), каждый раз после логина его менять, а в сессию и куки писать не пароль и логин (как это принято), а этот токен, который будет действовать до следующего удачного входа.
Нужно просто забыть про MD5 и SHA1, и использовать SHA-256, SHA-384, SHA-512, или RIPEMD-160 или Whirlpool, который является стандартом ISO/IEC 10118-3.
В /etc/my.cnf я написал (это не мешает работе баз на других языках, если с ними уже всё в порядке):

[server]
default-character-set = cp1251
[client]
default-character-set = cp1251

А в сами скрипты после каждого mysql_connect() нужно добавить:
mysql_query("set names cp1251;");

Скажу честно, я не специалист MySQL и возможно существуют решения покрасивее, но это единственное решение (из тех что я пробовал), которое работает для всех баз и скриптов.

Да, кстати, никто не расскажет, как всё-таки правильно создавать базу в нужной кодировке и работать с ней в MySQL 4.1+? Например, я хочу отдавать данные в базу в UTF-8 и принимать тоже в UTF-8. Как это сделать наиболее правильно с точки зрения работы с MySQL?
Так в таблице присутствуют другие столбцы varchar, то изменять тип одного из них на char смысла не имеет - БД все равно создаст столбец с типом varchar. Т.е. в одной таблице нельзя смешивать varchar и char - так было в MyISAM, не уверен насчет InnoDB.
1

Information

Rating
Does not participate
Location
Киевская обл., Украина
Date of birth
Registered
Activity