+2
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
package clojure.lang;
import java.io.Serializable;
import java.util.*;
public abstract class APersistentVector extends AFn implements IPersistentVector, Iterable,
List,
RandomAccess, Comparable,
Serializable, IHashEq {
int _hash;
int _hasheq;
public String toString(){
return RT.printString(this);
}
public ISeq seq(){
if(count() > 0)
return new Seq(this, 0);
return null;
}
public ISeq rseq(){
if(count() > 0)
return new RSeq(this, count() - 1);
return null;
}
static boolean doEquals(IPersistentVector v, Object obj){
if(obj instanceof IPersistentVector)
{
IPersistentVector ov = (IPersistentVector) obj;
if(ov.count() != v.count())
return false;
for(int i = 0;i< v.count();i++)
{
if(!Util.equals(v.nth(i), ov.nth(i)))
return false;
}
return true;
}
else if(obj instanceof List)
{
Collection ma = (Collection) obj;
if(ma.size() != v.count() || ma.hashCode() != v.hashCode())
return false;
for(Iterator i1 = ((List) v).iterator(), i2 = ma.iterator();
i1.hasNext();)
{
if(!Util.equals(i1.next(), i2.next()))
return false;
}
return true;
}
else
{
if(!(obj instanceof Sequential))
return false;
ISeq ms = RT.seq(obj);
for(int i = 0; i < v.count(); i++, ms = ms.next())
{
if(ms == null || !Util.equals(v.nth(i), ms.first()))
return false;
}
if(ms != null)
return false;
}
return true;
}
Я решил попробовать Clojure: скачал Intellij Idea Comunity Edition поставил Cursive. Кодил значится, кодил, решил посмотре реализацию некоторых функци, начал шерстить по исходникам и дошел до джавовских исходников реализации кложура. Идея мне любезно предложила вместо декомпилированого кода скачать исходники и читать их. Я согласился и скачал, после чего увидел это. Исходное форматирование сохранено.
Это пиздец, товарищи. Кложур как язык - очень хорош, вот прям очень. Но мне в голове не укладывается что вот эта патлатая курва https://github.com/richhickey создатель такого крутого языка, не умеет в форматирование кода. Весь репозиторий - тупо рандом. Как блять, можно делать реализацию языка и даже блять не сделать код стайл. Вы можете подумать, что это и есть код стайл. Но хер там плавал, местами есть привычное джавовское форматирование, местами куча закоментированного кода. Короче полный бардак. Вот, наслаждайтесь https://github.com/clojure/clojure
На самом деле я не сильно то и разочарован. Да и вообще, я пытался смотреть видео с его докладами - меня просто тошнит от него. Тошнит точно так же, как от препода из универа, который вроде бы и шарит, вроде бы и что-то рассказывает, но без малейшего энтузиазма - просто поток текста, монотонный и неинтересный. У человека просто нету таланта/желания именно донести и поджечь интерес.
За создание кложура я его уважаю. Мне просто непонятно, как человек который создал такой хороши язык, не имеет понятия код стайл. Ваши мисли?
Запостил: Lorip1971,
11 Февраля 2020
Fike 11.02.2020 17:17 # +2
> vendor asm to sha 88a0aa8a79df7370cd178281bdf690ac2361c19a
какой менеджмент зависимостей )))
guest8 11.02.2020 20:56 # −999
guest8 11.02.2020 21:01 # −999
HoBorogHuu_nemyx 11.02.2020 21:05 # 0
Fike 11.02.2020 21:13 # 0
guest8 11.02.2020 21:21 # −999
Fike 11.02.2020 21:26 # 0
ctrl + shift + r, ctrl + shift + f
> когда надо не выводить ошибки в браузер
error_reporting(0);
> когда надо многопоточность
нет многопоточности - нет рейс кондишена!
> когда надо профулироваться удобно
ты просто не успел привыкнуть к «microtime(true)»
guest8 11.02.2020 21:38 # −999
Stallman 11.02.2020 21:51 # 0
Лол, никуда.
> Нет программы -- нет проблем. А фоновые задачи можно делать по крону.
Лол, так и делают.
> есть же "echo"
Воистину.
guest8 11.02.2020 21:52 # −999
HoBorogHuu_nemyx 11.02.2020 22:14 # 0
Stallman 11.02.2020 22:22 # +4
* Нужно не забыть перепидорасить "php.ini", в частности установить правильный "error_reporting" и не забыть выключить "display_errors" на продакшоне. Есть еще куча всякой магии, меняющей, блять, поведение самого приложения, типа "request_order", "magic_quotes", "session.save_handler" и ещё куча всякого говна.
* Нужно повесить свой "error_handler", преобразующий классические пыхоошибки в исключения. Так достигается хоть какая-то ко-ко-ко-нсистентность в обработке ошибок, но не всех, об этом тоже нужно помнить.
* Руками установить ГЛОБАЛЬНО БЛЯТЬ все нужные расширения, композер в случае их отсутствия может только обосраться.
* Держать бутстрап приложения максимально легким. Да, дорогой джавист, тут парсить 640-килобайтные XML-конфиги - это моветон. Доводилось видеть, как чтение уебских конфигов становилось реально узким местом и такое говно "конпелировали" в "PHP" с дальнейшим помещением в "opcache". Выглядит экстравагантно, но работает действительно на порядок быстрее.
* Помнить, что нельзя сравнивать хеши паролей через "=="
* Не забыть установить мемкеш на локалхост. Наверняка захочется иметь быстрый компактный кеш, но шарить память между реквестами нельзя by design. (inb4: ололо, есть же шаред мемори)
* Настроить crontab с фоновыми задачами.
* Зареврайтить все урлы на index.php средствами веб-сервера.
* И помнить целый чемодан нюансов и исключений, коими изобилует практически каждая сраная функция
Итого получаем, что хороший "PHP"-разработчик - это такая нихуёвая зубрилка с солидным багажом знаний, применимых только в области укрощения взбесившегося шаблонизатора, а ведь все потраченные усилия человек мог направить в более полезное и широкоприменимое русло. Нахуй так жить?
bormand 11.02.2020 22:26 # 0
Stallman 11.02.2020 22:32 # 0
HoBorogHuu_nemyx 11.02.2020 22:30 # +1
Это самый главный багор. Если у тебя несколько сайтов на одной машине, ты должен сначала вычислить объединение (в смысле теории множеств) расширений, требуемых каждому сайту, руками их поставить (через «PECL» ставится не всё) и прописать в «php.ini». В результате из-за одного сайта, требующего хитрое прожорливое расширение, у тебя интерпретатор будет прожорливым.
Stallman 11.02.2020 22:42 # +2
HoBorogHuu_nemyx 11.02.2020 23:18 # +1
HoBorogHuu_nemyx 11.02.2020 22:36 # +1
Часть параметров можно менять на лету вызовом функции ini_set. Они помечены в таблице как PHP_INI_ALL:
https://www.php.net/manual/en/ini.list.php
"error_reporting" и "display_errors" как раз относятся к таким динамически изменяемым.
Остальные параметры можно устанавливать только глобально в php.ini. Какой багор )))
Stallman 11.02.2020 22:52 # +5
Кстати, там новую "защиту" завезли, с мышиным обучением. https://wiki.php.net/pecl/mysqlnd_poc_plugins#sql_injection_protec tion_plugin_-_peclmysqlnd_sip
> The SQL injection protection plugin attempts to detect and block malicious SQL statements. It has two operational modes. In the learning mode it records all SQL statements and remembers them. The recorded statements are considered safe. Recoding shall be done in a safe environment, for example, in a test environment. In the operational mode the plugins verifies that all SQL statements match the lift of safe statements. All SQL statements that match are executed. The other ones are rejects. Execution is prevented.
guest8 11.02.2020 23:05 # −999
HoBorogHuu_nemyx 11.02.2020 23:14 # +2
1. Бывают запросы, которые ну очень редко выполняются. Т. е. я для обучения должен подготовить среду, в которой моё приложение создаст всевозможные SQL-запросы, включая те, которые оно делает раз в сто лет.
2. Как в рабочем режиме этот плагин отличит «хорошие» запросы от «плохих»?
guest8 11.02.2020 23:30 # −999
1024-- 12.02.2020 08:36 # 0
Системы такого уровня позволяют хоть немного заглянуть в будущее и отловить ошибки и атаки, которые ещё не изобрели.
gost 12.02.2020 09:01 # +2
От «SQL-инъекций» прекрасно защитит какой-нибудь статический анализатор, который ругается на скармливание в «$connection->prepare()» любой динамически генерируемой строки (а всякие mysql_query(), разумеется, по-умолчанию идут нахуй).
HoBorogHuu_nemyx 12.02.2020 09:17 # +2
guest8 12.02.2020 10:43 # −999
1024-- 12.02.2020 11:42 # 0
HoBorogHuu_nemyx 12.02.2020 11:59 # 0
guest8 12.02.2020 10:58 # −999
HoBorogHuu_nemyx 12.02.2020 10:59 # 0
guest8 12.02.2020 11:06 # −999
HoBorogHuu_nemyx 12.02.2020 12:14 # +1
http://p42.us/ie8xss/
HoBorogHuu_nemyx 11.02.2020 22:37 # 0
Единственная вменяемая структура данных — массив.
guest8 11.02.2020 22:47 # −999
HoBorogHuu_nemyx 11.02.2020 23:11 # −1
YxaHbckuu_nemyx 11.02.2020 23:30 # −1
guest8 11.02.2020 23:31 # −999
gostinho 11.02.2020 23:33 # −1
guest8 12.02.2020 00:39 # −999
Fike 12.02.2020 01:00 # 0
guest8 12.02.2020 01:01 # −999
HoBorogHuu_nemyx 12.02.2020 01:39 # +2
>> an lvalue is a glvalue that is not an xvalue;
>> an rvalue is a prvalue or an xvalue.
Изоморфизм — это биективный гомоморфизм.
Биекция — это сюръективная инъекция.
guest8 12.02.2020 01:43 # −999
bormand 12.02.2020 09:23 # +2
HoBorogHuu_nemyx 12.02.2020 09:50 # +1
HoBorogHuu_nemyx 15.02.2020 15:57 # 0
gost 15.02.2020 16:02 # 0
HoBorogHuu_nemyx 15.02.2020 16:13 # +1
guest8 15.02.2020 16:14 # −999
gost 15.02.2020 16:15 # 0
guest8 12.02.2020 10:41 # −999
gostinho 12.02.2020 10:49 # 0
)))
bormand 12.02.2020 07:01 # +3
HoBorogHuu_nemyx 12.02.2020 07:26 # +3
https://blog.tartanllama.xyz/initialization-is-bonkers/
Можно диссертацию писа́ть по видам инициализации.
OlegUP 14.02.2020 09:27 # 0
Почему?
HoBorogHuu_nemyx 14.02.2020 09:40 # +4
https://ideone.com/5USzXl
guest8 12.02.2020 08:47 # −999
guest8 12.02.2020 08:47 # −999
guest8 12.02.2020 10:42 # −999
guest8 12.02.2020 08:46 # −999
guest8 12.02.2020 02:36 # −999
Fike 12.02.2020 03:22 # 0
guest8 12.02.2020 03:28 # −999
1024-- 12.02.2020 08:40 # 0
HoBorogHuu_nemyx 12.02.2020 09:49 # 0
guest8 12.02.2020 22:18 # −999
KpunoBblu_nemyx 12.02.2020 22:15 # 0
phpBidlokoder2 15.02.2020 23:09 # 0
HoBorogHuu_nemyx 16.02.2020 11:20 # +2
Именно поэтому я за «PHP».