Как стать автором
Обновить
8
0
Дмитрий Тимофеев @blackstrip

Веселый кодер

Отправить сообщение
Сразу уточню что я про Delphi 7.

В VCL прописан набор значений
TCheckBoxState = (cbUnchecked, cbChecked, cbGrayed);


И задан класс TCustomCheckBox, у которого
function GetChecked: Boolean; override;
procedure SetChecked(Value: Boolean); override;
property Checked: Boolean read GetChecked write SetChecked stored IsCheckedStored default False;


И есть процедуры
function TCustomCheckBox.GetChecked: Boolean;
begin
  Result := State = cbChecked;
end;

function TButtonControl.IsCheckedStored: Boolean;
begin
  Result := (ActionLink = nil) or not TButtonActionLink(ActionLink).IsCheckedLinked;
end;


Таким образом, вызов checkBox1.checked на чтение — это простое сравнение: State сейчас cbChecked или нет.

Это простая выдача значения внутренней чекбоксовской переменной. Поэтому запрашивать checkBox.checked не долго и не страшно.

Я думаю, вопрос по поводу «скорости» работы вызова checkBox.checked теперь исчерпан. Ее можно использовать, она выдает значение внутренней переменной.

Быстрее можно еще если единожды прочитать значения всех checkbox-ов перед парсингом, и потом использовать эти переменные. это уберет лишние CALL/RET на вызов getChecked из кода. На сколько-то процентов (м.б. долей процентов) поднимет скорость парсинга, т.к. там много медленной посимвольной работы с длинными строками, которая гораздо дольше.

Браузер был написан за несколько месяцев, работа по такой тонкой оптимизации еще предстоит (если будет проводиться, если вдруг меня не устроит скорость его работы).
Вопрос «для кого не представляет». Для меня — представляет. Поэтому я принял решение закрыть код. Какие еще могут быть вопросы?

Имхо, открытый код придумали ленивые кодеры, копипастящие все и вся из чужих проектов в свой проект, именно поэтому их код не представляет никакой ценности, т.к. это франкенштейн из кучи чужих проектов. Молодцы те, кто это продвинули — это надо было так объегорить кучу людей «делайте, старайтесь и выкладывайте просто так» — и народ повёлся. Теперь тем, кто это продвинул, можно безнаказанно тырить чужие проги, не париться дизассемблировать, понимать, разбираться, а просто брать готовые исходники и использовать у себя. Удобно чо. Правда в результате такого зоопарка исходники превращаются в редкостное и нормальный человек в них и разбираться не будет, тысячи форков от Васей и Петей из 6Б — кому они нужны?

Отлаженный, вылизанный и быстроработающий код — всем нужен. Но он закрыт. Так что пользуйтесь результатами работы зоопарка.
Браузер работает на всех системах. На win95 тоже пашет. Я говорю относительно получающегося кода на выходе, а не относительно ОС в которой идет запуск.
судя по статье в вики он поддерживает CSS, JS и прочие прелести. Следовательно все недостатки, связанные с обработкой этого всего, у него есть. В JustCode JS и CSS выкидывается и не используется -> не тратится время при загрузке и отрисовке -> браузер работает быстрее и более подходит для бюджетных систем если цель «почитать новости и форумы»
тут простой вопрос: checkBox.checked запрашивает сложными процедурами статус флажка или просто выдает значение переменной «чекнуто/не чекнуто». Мне кажется что второе судя по исходникам VCL. В этом случае можно напрямую запрашивать checked свойство (как я и делаю) — это будет самый быстрый метод, аналогичный прочтению глобальной переменной. Дублировать ее куда-то, передавать в аргументах и т.д. — это усложняющий и замедляющий прогу путь.
В случае java или C# (особенно без обфускации) можно вернуть исходные коды, но для win32 платформы (не важно Delphi, C++, ассемблер или еще какой язык) исходники обратно не получишь в стадии «просто собери и запусти», т.к. на выходе процессорные инструкции в exe-файле.

Поэтому закрытие исходного кода означает что никто не упрет часть проги чтобы сделать свою аналогичную, никто из конкурентов не упрет прогу целиком чтобы сделать аналогичную вредоносную с целью компрометации оригинальной. Один единственный разработчик — и он отвечает за качество, не работает ПО — вопросы к нему, полезное ПО и нравится — спасибо ему.
Когда на окошке 10 элементов: именовать их comboBoxDlyaHREF или не именовать и оставить checkBox1 — все равно, только для какого-то удобства чтобы использовать в 20 местах и не искать каждый раз на форме (при моем подходе мне сначала придется посмотреть где этот флажок на форме, посмотреть что на нем за надпись, и потом уже его использовать). А в итоге компилятор/линкер превратит все это в одни и те же переменные в машинном коде. Поэтому это только дело вкуса.

Да, все ради лулзов) Эти проекты на дельфе никуда не продаются и не передаются для дальнейшей доработки другими программистами. Если бы передавались, то, конечно, можно было бы и облегчить задачу понимания следующим товарищам. Это такое домашнее хобби с написанием проприетарного закрытого кода, принадлежащего одному человеку, а не профессиональная деятельность когда 10 людей друг за другом перехватывают проект, разбираются в отдельных его частях, дописывают и переписывают.
I don't care. Rela-a-ax, take it e-e-easy. Я по приколу кусок кода размером с три строки выложил чтоб «удовлетворить» любопытство любителей open source. И даже тут недовольные нашлись, so funny. Берите, это открытый код, используйте в своих проектах, вы же это любите. Могу в конец этого кусочка лицензию дописать если нужно.

У меня представление об открытом исходном коде как о вечно незакрытой двери в квартиру. Когда спрашивают «а для чего же ты оставляешь дверь открытой?» опенсорс-товарищи отвечают «ну может добрые люди зайдут и мебель мне принесут, поставят, или бытовую технику». Хотя у меня одно представление «оставил дверь открытой — все спукрали, это Россия, детка».

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

if (not inscript) and (tagname='IMG') then
begin
ParseTag(tagpure);
s1:='';
s2:='';
s3:='';
for k:=0 to length(nams)-1 do
begin
if nams[k]='WIDTH' then s1:=Form3.DeQuote(vals[k]);
if nams[k]='HEIGHT' then s2:=Form3.DeQuote(vals[k]);
if nams[k]='ALT' then s3:=Form3.DeAmper(vals[k]);
end;

if checkBox3.Checked then
begin
imgtext:='';
if (length(s1)>0) or (length(s2)>0) then
begin
if length(s1)=0 then s1:='???';
if length(s2)=0 then s2:='???';
imgtext:=s1+' x '+s2;
end;
if (length(s3)>0) and (s3<>'""') then
begin
if length(imgtext)>0 then imgtext:=imgtext+', ';
imgtext:=imgtext+s3;
end;
if length(imgtext)=0 then imgtext:=Lg.GR(11) else imgtext:=Lg.GR(11)+' ('+imgtext+')';
imgtext:=imgtext+': ';
imgtag:='SRC';
needimg:=true;
needdbr:=true;
end;
end;


Пойду поиграю в WoW Classic. Из-за таких как вы хабр превращается в набор коротких статей о том, как кто-то написал очередные три строки кода на ноунейм-языке. А, представьте, ведь когда-то тут были творческие заинтересованные люди, а не закомплексованные запуганные любители правил и оформлений кода. Но все изменилось лет 5 назад, может раньше.
А насчет кода — если туда-сюда гонять лишние аргументы в функциях, то они будут все по очереди запихиваться в стек перед переходом в функцию и извлекаться сразу после входа в функцию, это лишние такты процессора и мой браузер станет работать медленнее. Зачем же мне замедление. Обосновано это может быть если только вызов checkBox1.checked вызывает суперфункцию, которая долго мурыжит компоненты на форме (например, ищет checkBox по hwnd среди всех других компонентов). В противном случае checkBox1.checked можно рассматривать как глобальную переменную, незачем ее дублировать в аргументы если она и так доступна для чтения из любого места проги.
Ну и без питона можно. В ссылку youtube.com/… вписываем magic между you и tube — и открывается сайт со ссылками на скачивание. Или еще к youtube.com вначале подписываем ss чтобы получилось ssyoutube.com и тоже открывается другой сайт со ссылками на скачивание. Таких сервисов много.

Шаблон на выдирание ссылок из ютуба — это пример использования скриптов. Можно и другие свои скрипты написать, например, чтобы обрезать большую шапку сайта в исходном коде. Надо только обнаружить какой-то постоянно появляющийся в исходном коде текст, определенный тег, и в скрипт 5 команд записать «получить исходный код», «найти и выделить этот текст в исх.коде», «выйти если не найден», «обрезать все выше выделенного», «загрузить исходный код как текущую страницу».

Вот шаблон на обрезание шапки как раз это делает:


А планшет мой с UEFI и всякими устройствами, на который и XP трудно поставить, и драйвера для которых не найдешь в XP потом. Если бы все просто так было.
Я обычно когда запутаюсь, то считаю бегины/энды и судорожно ищу где же я лишний вписал. А еще после длинного блока оставляю коммент после каждого end типа

end; //for i
end; //for j
end; //if checkBox1.checked


Потому что мне лень табулировать.
проприетарное ПО, исходники у меня)

вот, например, код из парсера для тега «a»:
inside:=false;
tag:=uppercase(tagpure);
spacep:=pos(' ',tag);
if spacep=0 then tagname:=tag else tagname:=copy(tag,1,spacep-1);

if (not inscript) and (tagname='A') then
begin
ParseTag(tagpure);
//если флажок Ссылки или флажок Якоря включен
if checkBox9.Checked or checkBox10.Checked then
begin
linktext:=Lg.GR(24);
linktag:='HREF';
link2text:=Lg.GR(25);
link2tag:='NAME';
needlink:=true;
needdbr:=true;
end;
end;
Но мой разматывает сайт в линию, все оформление пропускает вообще, поэтому он скачивает только исходный HTML-код сайта и все. Ни одного стороннего файла не качает. А если б я как Links2 делал оформление — то пришлось бы стили таки скачать дополнительно из css-ов прикрепленных к веб-странице. Поэтому мой, наверное, сильнее экономит трафик.

А так, конечно, видел другие текстовые браузеры.
это прямо как авто-поздравлялка с получением ачивок в World of Warcraft, она ждет когда в чате гильдии кто-то получил ачивку и тут же отправляет туда ответ «грац, username». В итоге сидят в гильдии 10 человек, один получает ачивку — и, опа, 9 мгновенных поздравлений от согильдейцев!
Потому что тайлы двумерные используются с очень четкими границами. А надо делать чтоб если земля, а рядом с ней вода — то рисовалась земля с переходом на воду (один тайл), а если земля и рядом лава — то рисовалась бы земля с переходом на лаву (другой тайл). Побольше будет вариантов тайлов, но выглядеть будет красивей гораздо.

Вот, например, Warcraft 2 с такими переходами ничего такой, хотя на самом деле вся карта точно из таких же 2D квадратов как у автора:

потому что хотят всё и сразу) на кой хрен разносторонне обучаться, если можно выучить JS по книжке за 100 рублей и вперед в профессию типа «я теперь вебпогромист», вот они и недоуменно пожимают плечами «зачем вообще учиться?», особенно если на протяжении будущих 20-30 лет в профессии им не будут ставить сколько нибудь сложных задач где надо будет думать перед тем как что-то сделать, если там за них другой человек подумает, просчитает, прикинет и выдаст уже готовое мини-ТЗ.
Майкрософт переманили из Борланда вот этого товарища ru.wikipedia.org/wiki/%D0%A5%D0%B5%D0%B9%D0%BB%D1%81%D0%B1%D0%B5%D1%80%D0%B3,_%D0%90%D0%BD%D0%B4%D0%B5%D1%80%D1%81, и он перестал делать Delphi и вместо этого сделал С#

Вот настоящее NES 8-бит, ибо я погромист, меня необманеш

image
Там же написано «может писать», а не «писал и имеет опыт работы 5 лет по каждому из языков». Может писать, а может и не писать.

— Доктор, вот уже пять лет, как я не сплю с женой
— А сколько вам лет?
— 65
— Это возраст, батенька, возраст
— А вот соседу 75, он говорит, что ежедневно…
— Ну, и вы говорите
там разве тоже псевдографические выпуклые кнопки, флажки, выпадающие списки, фреймы, скроллбары делать можно? в VBDOS-е было можно) весь прикол был в простом текстовом режиме 80х25 символов 16 цветов, но в нем были окошки, менюхи и прочие прелести оконного интерфейса, и выглядел он моднее borland-овского, в котором все было более плоское и менее навороченное, чем в VBDOS.

Информация

В рейтинге
Не участвует
Откуда
Подольск, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность