Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: johnfound в Jan 24, 2013, 19:05



Титла: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: johnfound в Jan 24, 2013, 19:05
Някъде във форума прочетох, че се дискутира този въпрос. Обаче, тъй като темата беше старичка, реших да започна нова - ако някой все още се интересува.

Става въпрос за един мой проект - CMS написана изцяло на асемблер.
Проекта се казва MiniMagAsm. Написах я, защото ми писна от PHP-то, а ми трябваше енджин за сайта ми. Всъщност започна като пренаписване на стария енджин, който беше написан на PHP. Обаче проекта се разви и стана със значително по-големи възможности.

Получи се изключително малка система (около 20KB), на която не и трябва нито PHP нито какъвто и да било интерпретатор. Използва изключително малко системни ресурси. При това, целият дизайн е на шаблони и може да се конфигурира свободно. За форматиране на статиите се използва диалект на markdown, което за мене е много удобно.

Системата работи на всякакви x86 сървъри под Линукс 32 или 64 битов (няма нужда от 32 битови библиотеки) и Windows.

Проекта, разбира се е свободен с отворен код.

В момента имам два сайта работещи с нея, чийто дизайн е доста различен:
http://fresh.flatassembler.net  (на комерсиален хостинг) и сайта по-долу, който е моят домашен сървър (на Linux Mint 32битов, обикновен десктоп, който се използва и за работа).

Ето и връзкa към страницата на проекта: Страница на MiniMagAsm ($2) - на страницата има и връзки към сорса, ако някой се заинтересува. :)


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: go_fire в Jan 24, 2013, 19:54
Човек ти изби рибата. Написал си СУС, интегрирана среда и дори договор за разпространение, като само последният не е на асемблер, което си е странно. До вчера щях да кажа, че е странно да има интегрирана среда за асемблер.

Само едно пожелание. Дай си договора за одобрение от ФСС, та да знаем всички те какво мислят по въпроса. Иначе изглежда добре, ама ако не си юрист, сто процента си пропуснал нещо и те ще го открият.


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: johnfound в Jan 24, 2013, 20:14
Ъ-ъ-ъ, за какъв договор говорим? Ако за лиценза на програмите - това е версия (леко модифицирана и съвместима) на Artistic License, който си е FOS както и да го погледнеш.


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: go_fire в Jan 24, 2013, 20:30
Точно за него говорим. То се вижда, че е свободен, не е километричен и се чете лесно и бързо. Въпроса е, че вероятно нещо си пропуснал и затова те съветвах да го пратиш за разглеждане от ФСС или ФСС Европа.

Иначе колкото повече ти чета страницата/дневника, все повече се изумявам. Едва вторият българин си, които зная да пише сериозно на този великолепен език, като първият обясняваше в една култова статия, че ИБМ и М$ имат повече общо с компотите, отколкото с технологиите.


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: johnfound в Jan 24, 2013, 20:46
Да уточним - лиценза е стандартен, не съм го измислил аз и е одобрен от OSI: http://opensource.org/licenses/Artistic-1.0
Впрочем, добре, че повдигнахме темата - може би е добре да обновя текста до версия 2.0: http://opensource.org/licenses/Artistic-2.0

Относно асемблера - преди няколко години минах изцяло на асемблер и се чувствам великолепно от това. :D


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: gat3way в Jan 24, 2013, 23:26
Това е мазохизъм :)


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: johnfound в Jan 24, 2013, 23:36
Това е мазохизъм :)

Голяма заблуда и предразсъдък. Асемблерът е език с много ясни правила. С приятен и много четлив синтаксис. Той е много по-близък до човешкото мислене от езиците от високо ниво.
А с подходящата среда и библиотеки ($2) програмирането става песен.

Специално MiniMagAsm ми беше много лесно да направя, тъй като използвах код, писан по други поводи. Например по-голямата част от парсера на markdown форматиращия език го написах като задача от един спор "асемблер vs C++" на един друг форум. ;) Библиотеката за работа със стрингове е част от проекта Fresh IDE и т.н.

Впрочем, в момента работя и над уеб сървър, с което ще мога да прехвърля целият хостинг изцяло на асемблерски софтуер.


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: go_fire в Jan 24, 2013, 23:43
Сигурен съм, че има поне няколко готови сървъра. Защо да почваш от нулата?


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: gat3way в Jan 24, 2013, 23:45
Спор няма, проблемът е че сравнително прости неща са голяма играчка. Доколкото разбирам в случаят това наподобява SSI и не се налага да обработваш кой знае колко входни данни. Обаче ако трябва да го правиш по-усилено, примерно да парсваш json глупости изпратени от някой client-side js, ще се видиш в чудо да го правиш на асемблер.



Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: backinblack в Jan 25, 2013, 01:52
Това е мазохизъм :)

Френд, струва ми се, че само така ти изглежда, но на пръв поглед!
Хората сме устроени да мислим в идеята на някой който е постигнал някакви резултати. Много ора имат добри идеи, но поради това общо мислене не получават подкрепа(точно когато най-много имат нужда) поради недоверие, и когато въпрки всичкото това недоверие я получат с неистов труд, след време всички го признават, но никой не се замисля дали щеше да се стигне до тук, ако се следваха шаблоните!

Дали щеше да има Линукс или БСД, ако всички следваха утвърдените шаблони!?


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: johnfound в Jan 25, 2013, 06:50
@go_fire - както се оказа, сериозни уеб сървъри написани на асемблер няма. Има един, два опита, които аз използвах за да се запозная с материята. Само че, на мене ми трябва сериозно решение, което да може да се пренася поне между 2..3 операционни системи.

@gat3way - номерът на писането на асемблер е, че сложните проблеми се решават по прост начин. Това е и причината нещата написани на асемблер да са толкова малки и толкова бързи.


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: gat3way в Jan 25, 2013, 08:27
Ще навлезем в дълъг и безсмислен спор, който няма смисъл да водим. Според мен е въпрос на гледна точка. За мен специално, от гледна точка на производителността е по-голямо предизвикателство да накарам компилатора да генерира по-ефективен код, отколкото да пренаписвам някаква част от кода на асемблер. Това от чисто статистически наблюдения, защото сериозни изключения има и в двете посоки. Като под "компилатор" разбирам C компилатор, същото примерно с C++ за мен е с порядъци по-сложно предвид че съм достатъчно глупав да не знам добре как работи. Та нямам нищо против асемблера, но за мен е по-скоро read-only.


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: johnfound в Jun 15, 2016, 15:41
И сега, няколко години по-късно можем да си продължим темата. ;D

Тъй като закона на Мур вече не действа особено добре, цените за хостинг никой не смята да ги намалява, а изискванията към уеб приложенията нарастват, то въпросът с производителността на сървърния софтуер стои все още открит.

Програмирането на асемблер е една от алтернативите. ;)

Първо, вече има пълноценен и много мощен уеб сървър написан на асемблер - rwasa ($2), написан от един австралийски другар. ;)

От моя страна, тъй като системата MiniMagAsm, описана по-горе, има някои проблеми с мащабируемостта и мрежовата производителност (заради използването на CGI интерфейс) реших да напиша фреймуърк който да работи през FastCGI.

Резултата от тази работа стана форум енджина AsmBB ($2) (демо инсталация), написан изцяло на асемблер и притежаващ прекрасна мащабируемост и много ниско потребление на ресурси. 

Предполагам, че въпросния енджин може да спокойно да издържи няколко хиляди потребителя онлайн без видимо натоварване на сървъра.

Кода разбира се е отворен: http://asm32.info/fossil/repo/asmbb и се разпространява под лиценза EUPL (GPL съвместим).


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: rcbandit2 в Jun 15, 2016, 17:22
Може ли повече информация какво точно имаш в предвид под

съветвах да го пратиш за разглеждане от ФСС или ФСС Европа.


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: johnfound в Jun 15, 2016, 18:31
Може ли повече информация какво точно имаш в предвид под

съветвах да го пратиш за разглеждане от ФСС или ФСС Европа.

Постовете над последния ми пост са от 2013г. Въпросната забележка касае MiniMagAsm, която беше пусната под модифициран Artistic лиценз. Този лиценз наистина има известни несъобразности, но не са актуални, тъй като напоследък използвам главно стандартен EUPL, а с него не може да има проблеми, тъй като е разработван от купчина адвокати от ЕС.


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: go_fire в Jun 15, 2016, 19:08
Здрасти Джон,

Тъкмо онзи ден те споменах и ти взе, че се появи с много силно включване. Този договор за разпространение, който цитираш, май от ФСС го бяха яко оплюли. Ако е същият, ама мисля, че е той. Не ми се проверява сега, ама, ако искаш, ще проверя.

Ти твоята страница на нея ли си мигрирал? Гледам, че изглежда по-различно и коментарите са отстрани. Или просто си си човъркал собствената система.


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: johnfound в Jun 15, 2016, 19:37
Здрасти Джон,

Тъкмо онзи ден те споменах и ти взе, че се появи с много силно включване. Този договор за разпространение, който цитираш, май от ФСС го бяха яко оплюли. Ако е същият, ама мисля, че е той. Не ми се проверява сега, ама, ако искаш, ще проверя.

Ти твоята страница на нея ли си мигрирал? Гледам, че изглежда по-различно и коментарите са отстрани. Или просто си си човъркал собствената система.
Затова и избягах от Artistic лиценза. Преди 1..2 години реших да изчистя проблемните места и мигрирах към EUPL и стандартен BSD за където трябва.

Моята страница asm.info ($2) си е все още на MiniMagAsm, просто смених дизайна. Това е лесно - сменя се само шаблона за страниците и малко CSS файлове (сравни например със тази страница ($2), която е със същия енджин, но с друг дизайн).

А новия енджин за който написах - AsmBB ($2) не е CMS, а е форум - там производителността и мащабируемостта са изключително важни, тъй като системата може да се ползва от много потребители не само за четене, но и за писане. Безопасността е на порядък по-добра, данните се пазят в ACID база данни (SQLite) и сървъра трябва да може да обработва голямо количество връзки едновременно.

Затова и там се използва FastCGI. (От който протокол, впрочем съм във възторг. Супер гъвкаво нещо и много удобен за поддържане именно на асемблер).

И моят сайт и демо инсталацията на форума се хостват на най-евтиния споделен хостинг на superhosting. Пиша го за да можете да оцените производителността.

Ето и една тема с 15000 поста ($2), постнати от бот като тест. Може да се види, че времето за обработка на заявките е все още съвсем приемливо.


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: go_fire в Jun 15, 2016, 19:45
Чакай, как така СХ. Те дават само php/perl и май python. Или ти си си наел server, а не домуване?


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: johnfound в Jun 15, 2016, 19:49
Чакай, как така СХ. Те дават само php/perl и май python. Или ти си си наел server, а не домуване?

Не е така. Има си и CGI и FastCGI. Не е нает сървър, а най-евтиния споделен - 5лв на месец, Супер-нещо-си-там. (на мене даже по-евтино ми излезе, защото издебнах промоция. :) )


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: jet в Jun 16, 2016, 02:44
Абе, то сайт може да се напише и със шел скрипт, ама къде е ползата от файдата (ха може даже и на Фортран, пък ако знае някой какво чудо е правенето на екрани в Кобол там ще е още по-култово).
С експериментална цел е ок, ама да спестиш 100 нано секунди от зареждането, а да се сгърчиш отвсякъде няма голям смисъл.
Да, сайта е супер статичен и изглежда като изваден от 1995г. и ако трябва малко да пораздвижиш сайта - например с база данни отзад и/или търсачка не дай си боже количка за пазаруване, капчи, форми, контрол на версии етц. дето са базови за един сайт и т.н. ще стане много весело.
Като proof of concept е даже много интересно.


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: johnfound в Jun 16, 2016, 07:48
Да, сайта е супер статичен и изглежда като изваден от 1995г. и ако трябва малко да пораздвижиш сайта - например с база данни отзад и/или търсачка не дай си боже количка за пазаруване, капчи, форми, контрол на версии етц. дето са базови за един сайт и т.н. ще стане много весело.
Като proof of concept е даже много интересно.

Това за кой сайт става въпрос??? Ако за AsmBB ($2), то нещо не си догледал.Там си има база данни, търсачка и регистрация и обработка на потребителите с права и т.н. Нищо не пречи да се направи и количка за пазаруване, но нали се сещаш, че за форум просто не е нужно.


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: 4096bits в Jun 16, 2016, 08:49
Не зная, как извън упражнението, може да се хване някой да прави сайт на асемблер. По-скоро се чудя за причината за това. Асемблер се слага там, където трябва скорост на изпълнение. Сайта няма да ми зареди по-бързо, ако е направен на този език. В интернет, колко бързо ще ти зареди страницата важи почти само от преносната среда. Изключая разбира се сървъри, които обработват безумно много заявки в секунда.

Поправка. Приветствам работата ви. Сетих се, че това може чудесно да работи на платки от рода на Pi :) Ама кода на асемблер не беше ли пряко свързан с архитектурата?  :'(


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: johnfound в Jun 16, 2016, 09:37
Не зная, как извън упражнението, може да се хване някой да прави сайт на асемблер. По-скоро се чудя за причината за това. Асемблер се слага там, където трябва скорост на изпълнение. Сайта няма да ми зареди по-бързо, ако е направен на този език. В интернет, колко бързо ще ти зареди страницата важи почти само от преносната среда. Изключая разбира се сървъри, които обработват безумно много заявки в секунда.

Поправка. Приветствам работата ви. Сетих се, че това може чудесно да работи на платки от рода на Pi :) Ама кода на асемблер не беше ли пряко свързан с архитектурата?  :'(

Асемблер се използва освен за скорост, още и заради ниското потребление на сървърни ресурси - памет и процесорно време. Да, времето за зареждане на всеки отделен потребител малко се влияе от времето за изпълнение на сървърния скрипт, но нещата стават съвсем различни, когато потребителите са много. Сървъра е винаги най-натоварената част на системата, просто защото той е един, а клиентите са много. В този случай, при хиляди връзки и бавен сървърен софтуер, влиянието върху всеки един потребител става много силно.

Погледнато от тази страна, примерно удвояването на производителността на сървърната част на софтуера означава, че едно и също натоварване ще се поеме от двойно по-малко сървъри. (А това са двойно по-ниски разходи, по-малко енергия, по-висока надеждност и т.н.)
Същото важи и за консумираната памет.

А на асемблер, икономията е далеч по-голяма от двойна. Не мога да сравнявам директно, ако вярвам на данните от провайдера, консумираната памет на работещ енджин AsmBB с един потребител е примерно 1.2MB. Примерно подобни скриптове на PHP консумират 20MB. Ако някой може да цитира консумацията на памет примерно на SMF (този форум) да не се окаже и доста по-висока, заради връзките към MySQL.

Аз не мога да провеждам много сериозни тестове, но когато тествах AsmBB (най-евтиния споделен хостинг) някои момчета от bgdev.org се отзоваха и го понатовариха доста с апачи бенча и чрез постване с ботове (преди да пусна защитата от ботове, сега вече не става), но така и не можаха да го съборят - сайта си обработваше заявките без проблеми.


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: 4096bits в Jun 16, 2016, 10:25
Пф. Винаги ме е било страх от асемблера.  ::) А ми се е искало да поназнайвам. Така и не намерих от къде да чета нещо написано на нормален човешки език.

Както и да е. Мога ли да му кажа на сървъра да просто да листне съдържанието на директория?


Титла: Re: Web програмиране на асемблер - не е чак толкова трудно.
Публикувано от: johnfound в Jun 16, 2016, 10:38
Както и да е. Мога ли да му кажа на сървъра да просто да листне съдържанието на директория?

Ако питаш за моите скриптове - то такава функционалност просто не съм писал, защото не ми е нужна.

Ако въобще за скрипт написан на асемблер - то да, разбира се, при това е сравнително просто. Използваш системните функции на Linux за да прочетеш директорията (sys_getdents ($2)) и след това формираш HTML кода както си искаш и го изпращаш на STDOUT-a (sys_write ($2)).

Има разбира се подробности но това е главното, просто трябва да имаш представа за CGI протокола (е, или FastCGI или SCGI, ако искаш да използваш тях).