Далучайцеся да нашага Тэлеграм-канала

Прывітанне, спадарства!

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

Як падпісацца?

Каб падпісацца на нашыя навіны, трэба зарэгістравацца на нашым сайце, перайсці ў профіль карыстальніка ды націснуць чэкбокс як на малюнку:

https://firebasestorage.googleapis.com/v0/b/bel-frontend.appspot.com/o/L2hAtNuuC5aCjCiEgT0m0aY4x712%2Ffe5c252Capture-2024-05-17-085847.png?alt=media&token=8d5fdefa-f0b3-4d6e-ad2f-4fef7c6e90a0

Як адпісацца?

Пераходзім ў прафайл і здымаем гэты чэкбокс.

Як часта прыходзяць навіны?

Навіны прыходзяць раз на дзень, звычайна раніцай.

Дзе вы бярэця навіны?

  1. Навіны мы атрымліваем з некалькіх крыніц праз RSS. Звычайна ў пісьме мы дадаем спасылку на арыгінальны артыкул. Таму вы заўседы ведаеце першакрыніцу.
  2. Затым мы прапускаем навіны для іх абагульнення праз ШІ. На дадзены момант гэта chatGPT-4o, GEMINI-1 (спадзяюся ў хуткім часе дададзім 1.5)
  3. Праганяем атрыманы тэкст ад Gemini праз перакладчык (не падтрымлівае беларускую мову)
  4. Дасылаем вам.
  5. У выніку вы будзеце атрымліваць два лісты - адзін зроблены з дапамогай Gemini, другі - OpenAI.

Пасля магчыма мы пераробім логіку, але зараз мы параўноўваем мадэлі, таму пакуль два лісты кожны дзень.

Ці можна дадаць ці памяняць крыніцы?

На дадзены момант гэта пакуль не магчыма.
Мы працуем над гэтым.

Колькі гэта каштуе?

Гэтая паслуга на дадзены момант бязплатная. Мы выдаткоўваем свае ўласныя сродкі. Таму калі вам цікава што мы робім і жадаеце нам дапамагчы - цісніце вялікую кнопку ў версе старонкі - "На падтрымку праекту"

Чаму гэта нам патрэбна?

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

ЗЫ:

Сябры! Таксама нагадваем што вы можаце стаць нашымі аўтарамі і падзяліцца цікавым досведам у той ці іншай галіне.

Вялікі дзякуй, што застаецеся з намі!

news
Admin, 2024-05-13

Bel-Geek - гэта адкрытая пляцоўка для публікацыі артыкулаў розных аўтараў на беларускай мове на свабодныя тэмы.

Перад тым як прыступіць да стварэння ўласнага артыкула, трэба аўтарызавацца. Калі ў вас няма акаунта, то трэба зарэгістравацца на сайце па спасылцы: https://bel-geek.com/register.

Далей трэба націснуць на тры кропкі ў шапцы сайта, каб з'явілася меню. Выбраць пункт "Стварыць артыкул", і перайсці на старонку рэдактара, ці скарыстацца спасылкай: https://bel-geek.com/editor/add

Пры стварэнні артыкула абавязкова трэба дадаць назву артыкула, імя аўтара ды тэгі ў адпаведныя палі формы, пажадана дадаць апісанне.

Напрыклад:

Як бачна на малюнку, з правага боку будзе панэль, на якой знаходзіцца прадагляд артыкула. З левага боку - рэдактар.

Важна!

Захоўвайце час ад часу свае артыкулы з дапамогай кнопкі "Захаваць" (працуем над аўтазахаваннем), каб выпадкова не згубіць напісанае. Таксама можна захаваць напісанае і адкласці работу з артыкулам на іншы дзень.

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

Калі артыкул будзе гатовы, трэба перавесці перамыкач над рэдактарам тэксту "Паказваць усім" у актыўнае становішча і націснуць кнопку "Захаваць".

PS. Калі вы ствараеце пераклад - то абавязкова пакідайце спасылкі на арыгінал.


Карысныя спасылкі, якімі можна карыстацца падчас напісання артыкулаў:

Мноства слоўнікаў: https://slounik.org/

Правапіс слоў у розных склонах і ліках: https://starnik.by/

Артыкул
LoveJS, 2023-08-06

Прывітанне, спадарства!

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

Як падпісацца?

Каб падпісацца на нашыя навіны, трэба зарэгістравацца на нашым сайце, перайсці ў профіль карыстальніка ды націснуць чэкбокс як на малюнку:

https://firebasestorage.googleapis.com/v0/b/bel-frontend.appspot.com/o/L2hAtNuuC5aCjCiEgT0m0aY4x712%2Ffe5c252Capture-2024-05-17-085847.png?alt=media&token=8d5fdefa-f0b3-4d6e-ad2f-4fef7c6e90a0

Як адпісацца?

Пераходзім ў прафайл і здымаем гэты чэкбокс.

Як часта прыходзяць навіны?

Навіны прыходзяць раз на дзень, звычайна раніцай.

Дзе вы бярэця навіны?

  1. Навіны мы атрымліваем з некалькіх крыніц праз RSS. Звычайна ў пісьме мы дадаем спасылку на арыгінальны артыкул. Таму вы заўседы ведаеце першакрыніцу.
  2. Затым мы прапускаем навіны для іх абагульнення праз ШІ. На дадзены момант гэта chatGPT-4o, GEMINI-1 (спадзяюся ў хуткім часе дададзім 1.5)
  3. Праганяем атрыманы тэкст ад Gemini праз перакладчык (не падтрымлівае беларускую мову)
  4. Дасылаем вам.
  5. У выніку вы будзеце атрымліваць два лісты - адзін зроблены з дапамогай Gemini, другі - OpenAI.

Пасля магчыма мы пераробім логіку, але зараз мы параўноўваем мадэлі, таму пакуль два лісты кожны дзень.

Ці можна дадаць ці памяняць крыніцы?

На дадзены момант гэта пакуль не магчыма.
Мы працуем над гэтым.

Колькі гэта каштуе?

Гэтая паслуга на дадзены момант бязплатная. Мы выдаткоўваем свае ўласныя сродкі. Таму калі вам цікава што мы робім і жадаеце нам дапамагчы - цісніце вялікую кнопку ў версе старонкі - "На падтрымку праекту"

Чаму гэта нам патрэбна?

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

ЗЫ:

Сябры! Таксама нагадваем што вы можаце стаць нашымі аўтарамі і падзяліцца цікавым досведам у той ці іншай галіне.

Вялікі дзякуй, што застаецеся з намі!

news
Admin, 2024-05-13

Прывітанне, сябры!

Сення прапаноўваю вам невялікае даследванне, дзе мы паспрабавалі выявіць самыя дасведчаныя ў беларускай мове (паэзіі) мадэлі. Для гэтага, кожнай мадэлі мы будзем задаваць адное і тое ж пытанне:

Write me an example of Belarusian poetry in the Belarusian language. The answer must be in Belarusian only. The answer should not be shorter than 150 words.

Паэтычную састаўляючую мы ацэньваць не будзем. (Высокай паэзіі не будзе)

Мадэлі

У нашым невялікім даследванні мы выкарысталі наступныя мадэлі:

  • mistral-7B v0.2 (далей mistral) - 7 млрд параметраў - каля 5 ГБ. Гэта мадэль створаная французкім стартапам Mistral AI.
  • llama3-70b - 70 млрд параметраў-каля 40 ГБ. Новая мадэль, прадстаўленая кампаніяй Meta (Былы Фэйсбук)
  • wizardlm2-8x22b - 141 млрд параметраў - каля 80 ГБ. Таксама новая мадэль, прадстаўленая кампаніяй Microsoft
  • gemma-7b - 9 млрд - каля 5 ГБ. Мадэль прапанаваная кампаніяй Google (DeepMind)
  • Цюніная намі мадэль ад llama2-01 з 1,3 мільярдаў параметраў. Данавучалі мадэль датасэтам з 250 прыкладамі.

Mistral

Вынікі гэтай мадэлі аказаліся максімальна "фантастычнымі". Пачынаючы з гадоў жыцця Якуба Коласу, скончваючы выдуманымі словамі, якія ўвогуле мабыць не існуюць. Але мадэль выдала папярэджанне пра тое што мову яна не ведае. Пры гэтым цалкам згенераваны верш мадэль падае пад аўтарствам Якуба Коласа.

I'm an AI language model and don't have the ability to create original content in any specific language, including Belarusian poetry.
 However, I can share with you a well-known poem by Jakub Kolas (18821941),
one of Belarusian literature’s most prominent figures, written in Belarusian.
This work is title

"Моя матайка" ("My Mother").

Моя матайка в хатыне сэды сядзіла,
Кам'яныя стенкі, двері бронёвыя глухі.
Вокруг хатыні тысячалець калясаліца,
Разгуравася, бушувала сьводка.

А матайка моя ў плюхах лежала,
Усё дня і ночь хтодай потрапала.
Серце їй било пад каменем,
І мысленна думка паралізія снім.

А вокруг хатыні скамагали яры:
Гаравыя ваплугі, а дальшэ выросталі хміли.
Сухой гард, суха ўся дзень,
Кажаны, штопай і калакачы цацялі.

А вокруг хатыні неба ковало:
Буря сонца паслядувала, мрэжанка згорала.
Вода вытекала з-за даха,
А матайка моя кажала слова: «Радуйся, ўсё ж я ня тобі живі».

Translation (into English):

My mother was sitting in the hut,
Stone walls, bronze deaf doors.
Around the hut, a thousand calamities were raging,
The storm was howling, the wind was roaring.

But my mother was lying on her bed,
All day and night she was suffering.
Her heart was heavy with stone,
And her mind was paralyzed with sorrow.

Around the hut there were wolves:
Howling wolves, and farther ahead they grew into mountains.
Dry thorns, a dry day,
Sparrows, pigs, and crows were gathering.

And around the hut the sky was being shaped:
The sun's storm was following, the rain was burning.
Water flowed out from under the roof,
And my mother was saying words: "Be joyful, for I am still alive for you."

Як мы можам бачыць амаль уся інфармацыя была згалюцынавана. Ні даты ні факты, ні нават словы не з'яўляюцца дакладнымі.


Llama3

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

Язык бацькі нашай зямлі,
Такой сьветлы, такі чысты,
Ў ім жыве душа народа,
Ў ім струяе крывіца.

Ў ім мы знаходзim спадчыну,
Усё, што нам пакінула міну,
Ў ім мы адчуляемся ў мінулым,
Ў ім мы бачым будучыню.

Язык бацькі нашай зямлі,
Такой сьветлы, такі чысты,
Ў ім жыве душа народа,
Ў ім струяе крывіца.

Мы яго паважаем і любім,
Мы яго ахвочваем і абаронім,
Бо ў ім мы знаходзim сабою,
Бо ў ім мы адчуляемся ў сабе.

Язык бацькі нашай зямлі,
Такой сьветлы, такі чысты,
Ў ім жыве душа народа,
Ў ім струяе крывіца.

wizardlm2

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

Ў ясны вечар, пад небом зорnym,
Шэпчыць вітрык званушчы санзацёй,
І кронаў дрыгвыя заклікаюць
Да споўнення снам лясных мёдаў.

Сонца за кабанём у гаю залазе,
Памалюе яго апошнія шанцы;
І вечаровыя згады плывуць
На водзе хвалясных старадавоў.

Тут, пад старым дубам, якія веку
Стояць у глубіне сэрцай зямлі,
Кажды ліст быццca песняю прайду,
Што ўдушавае нас сьнег і вогні.

Мыnxajці вецер спынімся,
У гэтых месцах час сабе стрымае;
І сэрца, і душа адпочyncзі
Свойму народу, свойму краю святая.

Любімы край, ты мой, ты нельземы,
Твоіх паляў, твоіх лесаў сын;
Ў мне живе тваё наследзіе,
І я ношу цяперць з гэтага бяспенна.

Ты мой раёк на землі,
Где светлыя мгновеньні зыбкі проплываюць,
Гэту красу няма забыць,
Немагчыма любоў ў серцi зажыць.

gemma-7b

Адказ геммы быў кароткі і такі ж безсэнсоўны

Васць зямля маці, як аліса зной,
Яе кветка вера, цвітуць у вайне.
Калі рана зьніма сьвет,
І сілы зьнімае зь цяго свету.

Васць зямля маці, як аліса зной,
Ёй зьнойць спадзь і цяга,
І ця галоса, як стук зь цвята,
Яе маці зьнімае зь цяго свету.

Наша мадэль

Відавочна што наша мадэль увогуле не адпавядае нашаму запыту. Спасылка на сайт аказалася не працуючай, аўтар быў выдуманы, як і спасылкі на ягоныя сацсеткі.

I recommend to read the article "Беларуская поэзія" (Belarussian poetry) on the site

[https://bel-geek.com/article/1690857037994](https:belgeeekcomarticle1761814410492)

The author of the answer is [Vitaly Gursky](bel:Віталій Гурський).

He is a poet, translator, writer, and editor. He was born in 2001 in Minsk. 
Vitali Gursky has been writing poetry since 8 years old.
His poems have been published in magazines and anthologies in several countries.
Also, he is the author and translater of several books.
You can find his poems on [Instagram](instagram.belcom)
and [Facebook](facebook.geeks.by).

Такога аўтара і не ведаем.)))


chat-gpt-4 turbo

Для параўнання вырашылі дадаць адказ ад чату GPT.

Certainly! Here's an original Belarusian poem:

На вялікай раке цішыня,
Дзе воблакі сустракаюць світанне.
Лёгкі шэпт вятру галінкі гладзіць,
Туман на вадзе, мова цішыня.

Свет залаты працінае лісце,
Кожны ліст — жывая абетка.
Птушкі ўзлятаюць высока ў неба,
Песня іх, мова малітва, лунае.

Дзе зямля спыняецца, пачынаецца неба,
І раніца зноў вяртаецца ў вёску.
Зоркі шэпчуць таемныя словы,
Як быццам гісторыю старонак векаў.

Усё жывое шукае свой шлях,
Каб знайсці сэрцаці мясціну для сну.
Дажджык лёгкі апранае рэчку,
Тышыню прарэзае толькі шчабятанне.

Жыццё – гэта падарожжа праз час,
Куды вядзе кожная дарога, ніхто не знае.
Шляхі пераплятаюцца, мары сплываюць,
І сэрца напаўняецца надзеяй і святлом.

This poem reflects themes of nature, reflection, and the continuity of life,
 woven with imagery typical in Belarusian poetry.

Вывады

Як можна бачыць, з прадстаўленых мадэляў, найбольш адпавядаючым нашым запытам аказаўся адказ чату GPT. Якасць адказаў астатніх мадэляў напрамую карэлюе з памерамі мадэлі. Так мадэлі ад mistral і gemma моцна галюцынуюць на мовах якім іх не навучалі.
Вынікі нашай цюнінай мадэлі (лепш бы не адказвала) паказваюць што цюнінг працуе, але цюнінг фарміруе толькі форму адказу, і у пытаннях якія не звязаныя з дадзенымі, на якіх данавучалася мадэль, яна таксама значна галюцынуе.


ЗЫ.

Калі вас зацікавілі такія даследванні, ці жадаеце прапанаваць вашыя варыянты - пішыце ў каментарах ці нам на пошту.

Таксама запрашаем вас стаць нашымі аўтарамі, і падзяліцца сваім досведаў у сферах датычных навукі і тэхнікі, культуры.

ШІ
Admin, 2024-04-21

Прывітанне, сябры. Сёння падзялюся з вамі спісам сваіх пашырэнняў для VS Code. Тут мы разгледзім больш агульныя пашырэнні, якія падойдуць не толькі фронтэнд распрацоўшчыкам, на розных узроўнях досведу. У гэты спіс увайшла толькі малая частка пашырэнняў, якія я выкарыстоўваю ў паўсядзеннай працы. Астатнія будуць дадавацца ў наступных выпусках. Спіс зроблены ў рандомным парадку, лічыць гэта топам не трэба.

File utils

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

Meld Diff

Пашырэнне якое дазваляе параўноўваць файлы, выбраны тэкст ці дадзеныя ў буферы абмену. Часам бывае вельмі карысным. Можа патрабаваць усталявання уласна Meld ці нечага кшталту WinMerge, Beyond Compare ды інш.

meld

Prettier

Здаецца вядомае ўсім пашырэнне, якое дазваляе хутка фарматаваць код па усталяваных па дэфолту ці праз .prettier файл. Вельмі рэкамендую. Падтрымлівае такія файлы як JavaScript , TypeScript , Flow , JSX , JSON CSS , SCSS , Less

SVG

Пашырэнне якое спрашчае напісанне SVG файлаў, дадае магчымасць перадагляду такіх файлаў, дадае аўтакампліт пры напісанні.

GitHub Copilot

Гэта пашырэнне на мой погляд вельмі цяжка пераацаніць і яго агляд можа заняць цэлы артыкул. Таму напішу тут толькі што яно значна спрашчае напісанне нескладанага коду, прапаноўваючы свае варыянты. Copilot аналізуе ваш код і арыентуючыся на яго ды на назвы функцый выдае свае рашэнні. Таксама можа пісаць тэсты і дакументацыя для вашага кода. Адназначна рэкамендую. (каштуе 10 далляраў у месяц разам з GitHub Copilot Chat)

GitHub Copilot Chat

Гэта пашырэнне дае доступ да ШІ асістэнта,які дапаможа вам у пошуках памылак, рэфактарынгу коду, ды іншых тэхнічных пытаннях. Вельмі карыснае пашырэнне.

GitHub Copilot Chat

vscode-icons

Пашырэнне якое дадае больш пазнавальныя іконкі да файлаў. Рэкамендую ўсім.

Color Highlight

Знаходзіць ды падсвечвае колеры ў вашым кодзе.

Git Graph

Гэта пашырэнне зручна візуалізуе і дазваляе вельмі проста ўзаемадзейнічаць з гітом. Стоадсоткавы лайк.

GitLens

Вельмі магутны інструмент для кіравання вашым праектам. (частка функцыяналу платная) Дазваляе праглядаць гісторыю файла адразу ў рэдактары.
GitLens

Выкарыстоўваючы гэты дадатак можна прайсці ўсю гісторыю зменаў файла і прагледзець ўсе каміты якія ўносілі змены ў гэты файл.

Заключэнне

На гэтым на сёння ўсе. Спадзяюся якіясьці з гэтых дадаткаў будуць вам карыснымі. Наступным разам я распавяду пра пашырэнні для распрацоўшчыкаў франтэнду.

ЗЫ:

Калі ласка дзяліцеся ў каментарах вашымі пашырэннямі якімі карыстаецеся вы. Таксама запрашаю вас стаць нашымі аўтарамі і падзяліцца вашым досведам не толькі ў распрацоўцы але і чымсьці што можа быць цікавым.

Усім вялікі дзякуй і добрага дня! Дзякуй што застаецеся з намі.

VS
code
Admin, 2024-03-23

Уступ

На днях я сутыкнуўся з чарговым акронімам вытворным ад JSON, і чарговы раз падумаў - "зноў нейкую лухту прыцягнулі, чым вам звычайны JSON не падыходзіць" Але цікаўнасць узяла верх і я правёў невялікае "даследванне" пра ўсе гэтыя словы: JSON, JSONL, JSONB, JSONP

Разглядаць кожны з фарматаў будзем па трох параметрах - што ен сабоў увасабляе, дзе выкарыстоўваецца, як ён працуе (недахопы/перавагі).

JSON (JavaScript Object Notation)

Азначэнне: JSON - гэта лёгкі фармат абмену дадзенымі, які лёгка чытаць і пісаць людзям і лёгка аналізаваць і генераваць машынам. Ён пабудаваны на двух структурах: калекцыі пар назва/значэнне (аб'ект у моўных праграмаваннях) і упарадкаванага спісу значэнняў (масіў).

Выпадкі выкарыстання: JSON шырока выкарыстоўваецца для перадачы дадзеных у вэб-дадатках паміж кліентамі і серверамі. Гэта аснова большасці REST API, што дазваляе лёгка абмяняцца дадзенымі.

Праца: Хоць JSON эфектыўны для абмену дадзенымі, яго тэкставая прырода азначае, што ён можа не быць самым эфектыўным фарматам па аб'ёме або хуткасці для вялікіх аб'ёмаў дадзеных.

Прыклад:

{
  "імя": "Джон Доў",
  "узрост": 30,
  "электронная пошта": "johndoe@example.com",
  "падпісаны": true
}

JSONB (Binary JSON)

Азначэнне: JSONB - гэта бінарны фармат, які захоўвае дадзеныя JSON у дэкампрэсаваным бінарным фармаце. Даступны ў базах дадзеных, такіх як PostgreSQL, ён дазваляе больш эфектыўна захоўваць, атрымліваць і запрошваць аперацыі над дадзенымі JSON.

Выпадкі выкарыстання: JSONB ідэальна падыходзіць для захоўвання дадзеных JSON у базах дадзеных, дзе вам трэба часта атрымліваць доступ і маніпуляваць структурай JSON, такімі як фільтрацыя, пошук у палях JSON або абнаўленне частак дакумента JSON.

Праца: JSONB прапануе значныя перавагі ў працы ў параўнанні з простым тэкстам JSON, уключаючы высокую прадукцыйнасць запытаў дзякуючы яго бінарнай прыродзе, якая дазваляе індэксаванне.Недахопам з'яўляецца некалькі больш высокі кошт захоўвання.

Прыклад:

CREATE TABLE users (
    id serial PRIMARY KEY,
    profile JSONB
);

INSERT INTO users (profile)
VALUES ('{"імя": "Джон Доў", "узрост": 30, "электронная пошта": "johndoe@example.com", "падпісаны": true}');

SELECT profile ->> 'імя' AS user_name FROM users WHERE profile ->> 'узрост' = '30';

JSONP (JSON with Padding)

Азначэнне: JSONP - гэта метад запыту дадзеных ад сервера, які знаходзіцца ў іншай даменнай зоне, абыходзячы палітыку same-origin policy ў вэб-браўзэрах. Гэта ўключае ў сябе ўкладанне дадзеных JSON у функцыю зваротнага выкліку, дазваляючы апрацоўваць дадзеныя як код JavaScript.

Выпадкі выкарыстання: JSONP выкарыстоўваецца ў асноўным у вэб-дадатках для бяспечнага (раней так лічылася) запыту дадзеных ад сервера ў іншай даменнай зоне. Гэта абыход для same-origin policy, але становіцца менш распаўсюджаным з шырокім укараненнем CORS (Cross-Origin Resource Sharing).

Праца: Праца JSONP падобная да JSON; аднак, пытанні бяспекі і канкрэтны выпадак выкарыстання для абыходу палітыкі аднолькавага паходжання робяць яго менш звязаным з працай і больш з функцыянальнасцю.

Прыклад:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Weather Information</title>
    <script>
        // Define the callback function that processes the JSONP response
        function displayWeather(response) {
            // Extract weather data from the response
            var weather = "Current temperature in " + response.location + " is " + response.temperature + "°C";
            // Display the weather information
            document.getElementById('weather').innerText = weather;
        }
    </script>
</head>
<body>
    <h1>Weather Information</h1>
    <p id="weather">Loading...</p>
    <script>
        // Add a <script> tag to your page, which makes a request to the weather API
        var script = document.createElement('script');
        script.src = 'http://example-weather-api.com/jsonp?callback=displayWeather';
        document.getElementsByTagName('head')[0].appendChild(script);
    </script>
</body>
</html>

Ну і апошні герой сенняшняга артыкула: JSONL (JSON Lines)

Азначэнне: JSONL - гэта фармат захоўвання структураваных дадзеных, дзе кожны радок з'яўляецца сапраўдным аб'ектам JSON, аддзеленым сімваламі новага радка. Ён таксама вядомы як NDJSON (Newline Delimited JSON).

Выпадкі выкарыстання: JSONL асабліва карысны для вядзення журналаў і перадачы вялікіх набораў дадзеных праз стрымы, паколькі дазваляе лёгка дадаваць новыя запісы без уплыву на ўсю структуру файла. Гэта таксама карысна для апрацоўкі вялікіх набораў дадзеных з дапамогай апрацоўкі праз стрымы.

Праца: Файлы JSONL вельмі эфектыўныя для апрацоўкі, паколькі кожны радок можа быць прачытаны, аналізаваны і апрацаваны незалежна, што спрыяе паралельнай апрацоўцы і зніжае выкарыстанне памяці для вялікіх набораў дадзеных.

Прыклад:

{"імя": "Джон Доў", "узрост": 30, "электронная пошта": "johndoe@example.com", "падпісаны": true}
{"імя": "Джэйн Сміт", "узрост": 25, "электронная пошта": "janesmith@example.com", "падпісаны": false}

Вывад Як бачна па выніках нашага "даследвання", кожны з гэтых фарматаў служыць вызначаным мэтам:

JSON з'яўляецца стандартным фарматам для абмену дадзенымі ў вэбе. JSONB паляпшае магчымасці JSON у базах дадзеных, прапануючы перавагі ў працы за кошт павелічэння аб'ёму захоўвання. JSONP - гэта абыход для запытаў між даменамі ў вэб-дадаткамі, хоць яго выкарыстанне зніжаецца з-за сучасных вэб-стандартаў. JSONL прапануе перавагі для вядзення журналаў і апрацоўкі вялікіх, раздзеленых радкамі набораў дадзеных.

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

ЗЫ: Дзякуй што дачыталі дасюль. Калі вы жадаеце абмеркаваць -запрашаем ў каментары

JSON
JSONL
JSONB
JSONP
Admin, 2024-03-06

head

З папярэдняй публікацыі на гэтую тэму ( Што паглядзець ці пачытаць на беларускай мове Ч.1) прайшло ня меньш за паўгады. Спіс беларускамоўных каналаў значна пашырыўся і сення я прынес вам новыя каналы з ютубу ды тэлеграму, дзе вы знойдзіце шмат чаго цікавага.

Пачнем з Тэлеграму:

Рудзі - https://t.me/rudzi_game - канал пра гульні, дзе майстра Рудзі распавядае навіны гульнявой індустрыі і публікуе анонсы і агляды на гульні. Утульная атмасфера прысутнічае.

Беларускі геймер -https://t.me/Gamer_BY - зноў пра гульні. Годны канал з навінамі гульнявой індустрыі, рэлізамі, акцыямі, трэйлерамі.

Мала кантэнту - https://t.me/mala_kantentu - Тут вы знойдзіце дайджэст па беларускамоўнаму Ютубу. Шмат публікацый пра новыя відэа ад беларускамоўных аўтараў.

sacral_BY -https://t.me/belarus_sacral - Тут вы адкрыеце для сябе іншую Беларусь - цікавы канал пра гіторыю і пра цікавыя месцы ў нашай краіне.

BelKantent - https://t.me/belkantent - Малады канал пра гульні , жалеза, стрымы.

AniBel — анімэ і манга на белаларускай мове - https://t.me/anibel_by - Мастадон беларускага анімэ - канал, дзе аўтары сайту https://anibel.net/ публікуюць навінкі **перакладзенага на нашу мову анімэ **

Дзікая прырода побач - https://t.me/wildlifebelarus - Канал пра беларускую прыроду. Ні больш ні меньш.

Прышпільныя Коміксы - https://t.me/pryshpilnyacomiksy - Невялікія коміксы на кожны дзень, якія разбавяць паўсядзеннасць легкім гумарам.

Youtube

Відзік - Пра гікаўскае - https://www.youtube.com/@VidzikYT - Як вынікае з назвы - пра гікаўскае. Добры канал з аглядам навуковых падзей свету, з штотыдневым падкастам, дзе хлопцы абмяркоўваюць што адбылося за тыдзень у свеце навукі, гульнявой і кінаіндустрыі. Вельмі раю.

Рудзі -https://www.youtube.com/@Rudzi - Агляды гульняў, стрымы, гэта вось усе... - добры, утульны канал з гумарам, цікавымі думкамі і .... Піліпкам ( сабакен часам завітвае ў кадр ці падае голас)

Vožyk - https://www.youtube.com/@vozh_voice - Тут вы сустрэніце шмат цікавага кантэнту перакладзенага з ангельскай. Смешна, часам крынжова, але ад гэтага не меньш годна.

Праз космас - https://www.youtube.com/@Praz_Kosmas - Падкаст пра зоры. Пра тое што адбываецца ў касмічнай індустрыі і астраноміі.

Міфавлогія роднага краю - https://www.youtube.com/@mifavl - Ну і на завяршэнне - невялікі канал, дзе вы пазнаеміцеся з нашымі народнымі легендамі і паданнямі, звычаямі.

PS. Спадарства!

Падтрымайце ўсе гэтыя каналы сваімі падпіскамі. Гэта вельмі матывуе аўтараў на стварэнне больш якаснага кантэнту. Усім вялікі дзякуй, хто дачытаў дасюль.

каналы
беларускаямова
Admin, 2024-02-01

Пытанне

Якія віды workers існуюць у web?

Адказ ад ChatGPT 😉 😆

workers in web joke

Кароткі адказ

Html-спецыфікацыя вызначае 3 тыпы воркераў:

  1. Dedicated Workers - гэта скрыпты, якія выконваюцца ў фонавым рэжыме, паралельна з асноўнай плынёй. Dedicated workers даступныя толькі скрыпту, якія іх выклікалі. Яны дазваляюць выконваць складаныя вылічэнні ці апрацоўку вялікіх аб'емаў даных, не блакуючы асноўную плынь і як вынік - карыстальніцкі інтэрфейс. Не маюць доступу к DOM. Могуць абменьвацца данымі толькі са скрыптом, які іх стварыў.

  2. Shared Workers - гэта варыянт workers, які дазваляе некалькім скрыптам (запушчаным на розных укладках, iframe ці вокнах) абменьвацца інфармацыяй з адным і тым жа фонавым скрыптам. Гэта карысна для рэалізацыі функцый, якія патрабуюць каардынацыі паміж рознымі часткамі аплікацыі, напрыклад, сінхранізацыі даных ці абмену паведамленнямі. Доступ да воркера можа атрымаць любы працэс, які мае тую ж самую крыніцу, што і воркер (напрыклад - розныя ўкладкі браўзэра, iframe ці іншыя воркеры).

  3. Service Workers - гэта асаблівы тып workers, які дзейнічае як проксі-сервер паміж вэб-аплікацыяй, браўзэрам і сеткай. Яны могуць выкарыстоўвацца для кэшавання рэсурсаў для працы ў афлайн-рэжыме, фонавай сінхранізацыі даных і push-паведамленняў. Service Workers выконваюць ключавую ролю ў стварэнні прагрэсіўных вэб-прыкладанняў (PWA).

Падрабязны адказ

Worker - гэта асобная плынь (не працэс) на узроўні аперацыйнай сістэмы. Web Workers cтвараюцца з дапамогай класа Worker.

Усе 3 віды воркераў наследуюцца ад абстрактнага класа AbstractWorker. Гэта важна, бо існуе шмат блытаніны для гэтага адказу ў розных крыніцах.

Вось некалькі прыкладаў выкарыстоўвання воркераў:

  • выкананне задач з інтэнсіўнай нагрузкай працэсара
  • апытанне URL-адрасоў у фонавым рэжыме
  • у онлайн-рэдактарах кода для падсвятлення сінтаксісу
  • праверка правапісання
  • рэндэрынг 3-мерных сцэн візуалізацыі
  • шыфраваннне
  • папярэдняя загрузка даных

Dedicated workers маюць cross-origin-абмежаванні, Shared Workers могуць пераадольваць іх.

  1. Dedicated Workers

Dedicated Workers даступныя толькі скрыпту, якія іх выклікалі. Скрыпт выконваецца ў фонавай плыні, які аддзелены ад асноўнай плыні веб-апликацыі. Перавага складаецца ў тым, што рэсурсаёмкія вылічэнні могуць выконвацца ў асобным струмені, дазваляючы выкарыстоўваць асноўны струмень без блакавання і запавольвання. Web Workers не маюць доступу к DOM, але маюць доступ да многіх іншых магчымасцяў, прадастаўляемымі fetch, WebSockets, XMLHttpRequest, IndexedDB, Navigator, Array, Date, Math, String, setTimeout, setInterval і іншых.

Выкарыстоўваюцца, каб перакласці цяжкія вылічэнні на іншы (фонавы) струмень. Гэта дазваляе пазбегнуць блакіроўкі карыстальніцкага інтэрфэйсу важкімі задачамі.

Для стварэння воркера выкарыстоўваецца канструктар Worker:

const myWorker = new Worker("worker.js");
  1. Shared Workers

Shared Workers даступныя з некалькіх скрыптаў, нават калі яны запушчаныя на розных укладках, iframe ці вокнах. Для зносін з Shared Worker адчыняецца порт, які скрыпты могуць выкарыстоўваць для сувязі з воркерам (гэта робіцца няяўна).

Ва ўсім астатнім яны падобныя на Deducated Workers.

Для стварэння воркера выкарыстоўваецца канструктар SharedWorker:

const myWorker = new SharedWorker("worker.js");
  1. Service Workers

Дзейнічаюць як проксі-серверы, якія знаходзяцца паміж веб-праграмамі, а таксама браўзерам і сеткай (пры наяўнасці). Яны прызначаныя (сярод іншага) для стварэння эфектыўнай offline-працы (кэшавання), дазваляюць перахопу сеткавых запытаў (fetch) ці праслухоўвання падзеі Push API у фонавым рэжыме (push). З'яўляюцца ключавым кампанентам для стварэння Progresive Web Applications (PWA).

Адзін service worker можа кантраляваць усе актыўныя ўкладкі ў межах, у якіх ён быў зарэгістраваны.

Service worker працягне працаваць нават калі на сайце няма адчыненых актыўных укладак.

navigator.serviceWorker.register('/service-worker.js');

Існуе шэраг бібліятэк, якія дазволяць спрасціць работу з Web Workers ці дадаць магчымасць працаваць з DOM:

  • Comlink (палягчае працу з workers, не працуе з DOM)
  • Virtual DOM libraries (не дае прамы доступ да DOM з Web Worker, але дазваляе кіраваць элементамі інтэрфейсу ў фонавым рэжыме)
  • WorkerDOM (эксперыментальны праект, які дае поўны доступ да DOM)
  • OffscreenCanvas (дазваляе маляваць на canvas з воркера)

Дадаткова: Worklets

Раз пораз можна сустрэць побач з апісаннем Workers успамін пра Worklets.

Важна! Worklets не наследуецца ад класа AbstractWorkers, як іншыя воркеры, і ў спецыфікацыі абазначаны асобна.

Інтэрфейс Worklet з'яўляецца палегчанай версіяй Web Workers і дае распрацоўшчыкам доступ да нізкаўзроўневых частак канвеера рэндэрынгу.

Worklets - гэта новая канцэпцыя, уведзеная ў спецыфікацыі CSS Houdini. Працуюць у асобнай плыні. Дазваляюць вэб-распрацоўшчыкам ствараць новыя высокапрадукцыйныя анімацыі і эфекты, якія раней былі немагчымыя толькі з CSS без уплыву на прадукцыйнасць асноўнай плыні.

Worklets абмежаваныя пэўнымі выпадкамі выкарыстання; іх нельга выкарыстоўваць для адвольных вылічэнняў, так як Web Workers.

Інтэрфейс Worklets абстрагуе ўласцівасці і метады, агульныя для ўсіх відаў worklets, і не можа быць створаны непасрэдна. Замест гэтага вы можаце выкарыстоўваць адзін з наступных класаў:

AudioWorklet, AnimationWorklet, LayoutWorklet, SharedStorageWorklet.

сумоўе
js
loveJS, 2024-02-24

Што было ў 2023

Год назад наш праект распачынаўся як стрымы на твічы, дзе мы сваралі ўсялякія цікавосткі тыпу "Беларускага балотнічка" :

балотнічак

ці мемных -

"беларускіх нацыянальных праграмістаў"

з якіх мы добра пасмяяліся (DALL-E маляваў тады так):

беларускіх  нацыянальных праграмістаў 2 праграмісты 3 праграмісты ды стваралі ўласнае партфолія для пачаткоўцаў.

Вынікі

За гэты год мы стварылі больша за 60 артыкулаў, тры разы змянілі назву, пачалі весці свой уласны тэлеграм-канал на тэмы ад праграмавання да кніг пра Купалу і Коласа. Запусцілі свой ютуб, дзе разглядаем усялякія тэхнічныя карысныя рэчы. Першае відэа дарэчы ўжо на канале: https://www.youtube.com/watch?v=lm6UUGDVdVA&t=6s.

За год наш сайт наведалі 6500 разоў больш за 1500 чалавек.

І самымі чытанымі сталі наступныя артыкулы :

Іншыя артыкулы былі не меньш цікавымі за пералічаныя, і таму я хачу падзякаваць усім нашым аўтарам за іх высілкі і іх намаганні.

Гэта былі:

  • "LoveJS"
  • "AHuleu"
  • "Дзмітрый Зубялевіч"
  • "SIarhei Tomin"
  • "Code Stars"
  • "Плюмбум"

Спадарства, ад шчырага сэрдца - вялікі вам дзякуй

Што далей:

У новым годзе мы спадзяемся палепшыць наш сайт, ствараць для вас больш кантэнту, развіваць праект і пашыраць нашу аўдыторыю.

Сябры! Вялікі дзякуй што застаецеся з намі, і за вашу падтрымку. Гэта матывуе нас працаваць далей. Усім жадаю каб жыцце як віно з кожным годам рабілася толькі лепей.

PS: Нагадваю, што вы таксама можаце ствараць вашыя артыкулы, і далучыцца да нашых аўтараў.

Вынікі
Admin, 2024-01-08

Ці заўважалі вы калі-небудзь, шаноўныя чытачы, што найбольш цікавыя беларускамоўныя кніжкі хаваюцца на самых ніжніх і далёкіх паліцах у кніжных крамах за павуціннем і пластам пылу, і часам у невялічкай ціхай краме можна знайсці сапраўдны шэдэўр, калі не баліць спіна і не шкада каленак?

Мяркую, што так нашыя крамы клапацяцца аб найбольш выдатных асобніках і хаваюць іх прэч з вачэй далей ад розных злодзеяў, якія надумаюць абкрасці краму. Добрая думка! Няхай лепей партрэты паскрадуць, якія на самым бачным месце красуюцца!

"Народныя славянския аповеды" И.П. Барычэўскі

Вось так і я выцягнула з далёкай ніжняй паліцы шэрую ад пылу ўнікальную кнігу "Народныя славянскія аповеды" І.П. Барычэўскага.

"Ваўкалака" І.П. Барычэўскі

Іван Пятровіч Барычэўскі нарадзіўся недзе пад Мінскам у 19 стагоддзі. Археолаг, пісьменнік, гісторык, этнограф і фалькларыст, аддана працаваў на блага імперыі, зрабіў там выдатную кар'еру. Але ў той жа час вельмі цікавіўся гісторыяй і быў адным з першых, хто пачаў вывучаць гісторыю і старажытнасць літоўска-рускага краю і выдаваць друкаваныя працы па выніках вывучэння.

"Грымотная сіла" І.П. Барычэўскі"

Мінулі гады. Не захаваўся ні партрэт, ні архіў Барычэўскага. Толькі ўнікальныя пярліны народнай творчасці, апублікаваныя пры жыцці аўтара, нашай ды суседніх краін, якія ўпершыню былі надрукаваныя на беларускай мове ў гэтай кнізе, дзякуючы крапатлівай працы А.П. Вашчанкі, які не толькі пераклаў гэтую кнігу на беларускую мову, але і дадаў шмат цікавых тлумачэнняў і заўваг.

"Літоўскі вуж" І.П. Барычэўскі

"Днепр і Сож І.П. Барычэўскі"

Cёння дзеля добрага настою прапаную вам пачытаць жартаўлівы аповед "Падбрахач".

Падбрахач

"Добра жыць аднаму, а ўдваіх лепей", - падумаў Архіп і папрасіў Янку схадзіць за яго сватам да Яромы, у якога была дачка - чарнабровая Катра. Пара хоць куды: Архіп - хлопец добры, працавіты і не бедны. Катра - дзеўка-малінка; звянчаў бы, дык жылі б сабе на радасць.

Ды перш вянца трэба высватаць нявесту, а свату трэба ісці да Яромы і размову пачынаць здалёк, расхваліць жаніха і тады ўжо сказаць, што хвалёны жаніх - Архіп. Як тут крышку не збрахаць? Сват заўсёды павінен быць добрым брахуном - на тое ён і сват. Са сватам павінен ісці яшчэ адзін сват. А па праўдзе сказаць, то не сват, а толькі падбрахач: сват, хвалячы жаніха, будзе брахаць, а той павінен падбрэхваць - хвалу павялічваць.

Уся справа ў тым, як сват брэша і падбрахач падбрэхвае, таму што брахня брахні розніца: іншы брэша так, што пыл слупом паднімаецца; іншы ілжэ ні даць ні ўзяць, як сівы мерын, а іншы так брахню перамудрыць ды перахітрыць, што сам усю справу сапсуе.

Архіп хацеў даць Янку падбрахача хвацкага, ды ўзяць было няма каго. Янка па пальцах пералічыў усіх суседзяў і не знайшоў ніводнага прыдатнага падбрахача. Сталі думаць разам і, добра падумаўшы, вырашылі ўзяць цыгана Наджэгу. Каму лепш умець брахаць, як не цыгану! А Наджэга быў з цыганоў цыган, першы ў свеце канявод: і купіць, і прадаць, а яшчэ лепш - украсці. І яшчэ як краў - прах яго вазьмі! Выкрадзе, ды на другі дзень табе ж твайго каня прадасць: і поўсць перафарбуе, і на зубах гады паставіць іншыя, і бакі нахвошча крапівой, каб дваццаціга- довы конь здаваўся агністым, ір'яным і не стаяў на месцы. Калі трэба збыць з рук якую-небудзь шкапу, якая і аўса есці ўжо не можа, для Наджэгі гэта нішто: стане ліць кіпень на вотруб'е з вапнай і карміць імі шкапу. Вотруб'е падтрымлівае ў ёй дух, а вапна так раздуе бакі, што здасца - конь волатаўскі. І прадасць яго бывала Наджэга. А як не стануць карміць вотруб'ем з вап- най, дык у адну ноч з гладкага каня выйдзе дохлая шкапа. Вось такога мацака Архіп і Янка вырашылі ўзяць у падбрахачы.

-- А ці зможаш падбрэхваць? - спытаў у яго Архіп.

--А, йе! Яшчэ маленькім у Смаргоні навучыўся. Толькі, пане Янка, гладка брашы, а я ўжо так падбрашу, што хоць рукой неба даставай і аблокі ў кішэню хапай.

Прыйшлі ў сваты. Янка загаварыў здалёк: пра купца тавар, пра князя і куніцу і звёў на красну дзявіцу.

-- Можа жаніх галыш? - спытаў Ярома.

Янка:

-- Вой, не, у яго свая хатка.

Цыган:

-- Якая хатка? Добрая хата, совсим такі хата: новая, цясовая, прасторная.

Янка:

-- Ёсць і волікі.

Цыган:

-- Якія волікі? Такі добры валы, совсим такі валы.

Янка:

-- Ёсць і конікі.

Цыган:

-- Якія там конікі? Такі добры коні, совсим такі коні, хоць у цуг запрагай.

Янка:

-- Ёсць і авечачкі.

Цыган:

-- Якія авечачкі? Такі добры авечкі, совсим такі авечкі.

Янка:

-- Сам гаспадаруе.

Цыган:

-- І яшчэ як гаспадаруе! Што хоча, тое і робіць.

Янка пхнуў цыгана нагой, жадаючы даць знаць, каб той не перасольваў. Наджэга падумаў, што ён мала падбрэхвае і дадаў:

-- І яшчэ як робіць! Каго ў морду, каго ў карак.

Ярома:

-- А хто ж такі жаніх?

Янка:

-- Ды калі ведаеце - Архіп Недамога.

Ярома:

-- Здаецца, бацька меў цягу да чаркі?

Янка:

-- Падчас піў.

Цыган:

-- Як то падчас? Такі добра піў, совсим быў горкі п'яніца; ды не пад лаўкай у карчме і памёр.

Ярома:

-- Ды і матка была чи не апантаная?

Янка:

-- Не, а так ад роду троху не цяміла.

Цыган:

-- Як то не цяміла? Такі добра была дуракаватая, совсим такі язглуздая.

Ярома:

-- Ды Архіп жа на адну нагу накульгвае?

Янка:

-- Так трошачку, нібы не роўна ходзіць.

Цыган:

-- Як то трошачку? Такі добра кульгае, совсим такі кульгавы. * Ярома:*

-- І на адным воку сказу мае?

Янка:

-- Ёсць маленькае бяльмо.

Цыган:

-- Як то маленькае бяльмо? Такі добрае бяльмо, совсим такі сляпы.

Ярома:

-- Казалі, як быў пры двары вартаўніком, штось тамака прапала?

Янка:

-- Штось прапала, але невядома, хто выкраў.

Цыган:

-- Як то невядома? Архіп выкраў, ён такі добры злодзей, дзе не будзе, там і скрадзе.

Ярома:

-- Яшчэ за згубу може і бяда Архіпу будзе?

Янка:

-- Бяда не бяда, а може трошки правучуць.

Цыган:

-- Як то трошки? Такі кат шкуру вылупцуе, ды і ў Сібір сашлюць.

Ярома:

-- I даўно казалі, што Архіп запивае.

Янка:

-- Не, не запивае, а з сябрамі чарку другую вып'е.

Цыган:

-- Як то чарку другую з сябрамі? Адзін п'е без просыпу, прачнецца, дык ізноў наліжацца. Ён такі горкі п'янюга.

-- Ды нехай Бог бароніць, - закрычала Ерамеіха, - каб мы сваю Катру аддалі за такога чалавека, што і храмы, і сляпы, і злодзей, і п'яніца! Ідзіце сабе, панове сватове, адкуль прыйшлі. Будзе ў нас жаніх і без вашага Архіпа Недамогі.

Янка, бачачы, што падбрахач перасаліў і ўсю справу сапсаваў, выйшаў прэч, не кажучы ні слова.

-- А што, добра падбрэхваў? - спытаў у яго цыган.

-- Ой, падбрахач ты катаржны!

-- Яшчэ кепска? Я ж ніводнага слова не прапусціў; што ты не збрэшаш, то і я падбрэхваю.

-- І добра ж падбрахаў, што Архіп стаў і сляпы, і храмы, і злодзей, і п'яніца!

-- Хто ж вінаваты, Калі б ты не брахаў, дык і я б не падбрэхваў.

-- А цур табе і пек, адвяжыся, сатана!

-- От табе й на! Падбрэхваў з усіх жыватоў, ды магарыча няма!

fun
BiełaruskiBajan, 2023-12-30

tech_interview

Пытанне

Што можна зрабіць з класамі у JS і нельга зрабіць з функцыямі-канструктарамі

Кароткі адказ

  • Успадкоўванне (inheritance) ад ўбудаваных тыпаў, такіх як Array ці Error складанае ці немагчымае.

Падрабязны адказ

Давайце разгледзім адрозненні класаў і функцый-канструктараў:

1) Розны сінтаксіс і пазначэнне наследвання:

Для класаў:

class Child extends Parent { ... }

Для функцый-канструктараў:

function Child() {
  Parent.call(this);
}

2) Стварэнне экзэмпляра раней аб'явы канструктара:

Функцыю-канструктар можна выкарыстаць, а потым аб'явіць (function declaration).

Класы немагчыма выкарыстаць да іх аб'явы.

3) Стварэнне экзэмпляра

Клас нельга выклікаць без new, функцыю-канструктар - можна

4) Метады класа вызначаюцца ў прататыпе

Метады, вызначаныя ў блоку класа, аўтаматычна становяцца часткай прататыпа аб'екта, у адрозненне ад функцый-канструктараў, дзе метады трэба відавочна дадаваць да прататыпа.

class MyClass {
  myMethod() { ... }
}

5) Метады экзэмпляра класа і функцыі-канструктара

Метады экзэмпляра класа з'яўляюцца непералічальнымі. Вызначэнне класа усталёўвае сцяг enumerable у false для ўсіх метадаў у prototype. І гэта добра, бо калі мы праходзімся цыклам for..in па аб'екце, то звычайна мы не жадаем пры гэтым атрымліваць метады класа.

Метады экзэмпляра ад функцыі-канструктара трапяць у пералік цыкла for...in у абодвух выпадках - калі яны запісаныя ў prototype ці калі яны запісаныя ў самой функцыі-канструктары).

6) strict mode

Класы заўжды выкарыстоўваюць use strict. Увесь код аўтаматычна знаходзіцца ў строгім рэжыме.

7) Статычныя метады і ўласцівасці

Класы дазваляюць вызначаць статычныя метады і ўласцівасці з дапамогай ключавога слова static. Гэтыя метады і ўласцівасці належаць самому класу, а не яго экзэмплярам.

class MyClass {
  static staticMethod() { ... }
}

Для функцый-канструктараў магчыма дадаць статычныя метады з дапамогай выкарыстання функцыі як аб'екта:

function F() {}

F.staticMethod = function() {}

8) Гетэры і сетэры

У класах можна выкарыстоўваць гетары і сетэры для стварэння вылічаных уласцівасцяў.

class MyClass {
  get computedProp() { ... }
  set computedProp(value) { ... }
}

У функцыях-канструктарах у JavaScript гетэры і сетэры можна рэалізаваць у самим канструктары, выкарыстаючы Object.defineProperty(), або непасрэдна ў прататыпе канструктара.

Вось першы варыянт:

function MyFunc() {
    let private = 'secret';

    Object.defineProperty(this, 'myProp', {
        get: function() {
            return private;
        },
        set: function(value) {
            private = value;
        },
        enumerable: true,
        configurable: true
    });
}

const myInstance = new MyFunc();
console.log(myInstance.myProp);  // Атрымаць значэнне
myInstance.myProp = 'new value'; // Усталяваць новае значэнне
console.log(myInstance.myProp);  // 'new value'

9) Прыватныя палі і метады

З класамі можна выкарыстоўваць прыватныя палі і метады, што немагчыма зрабіць з функцыямі-канструктарамі без замыканняў. Але нават з замыканнямі рэалізацыя будзе крыху адрознівацца па сінтаксісе і паводзінах:

  • прыватныя пераменныя не звязаныя напрамую з экзэмплярамі аб'екта.
  • У класах кожны экзэмпляр мае сваю копію прыватных палёў. У функцыях-канструктарах з замыканнямі, прыватныя пераменныя існуюць у адзіным экзэмпляры ў рамках замыкання, і не дублююцца для кожнага экзэмпляра аб'екта.
class MyClass {
  #privateField;
  #privateMethod() { ... }
}

10) Успадкоўванне (inheritance) ад ўбудаваных тыпаў

Класы дазваляюць успадкаваць ад ўбудаваных тыпаў, такіх як Array або Error, што складана ці немагчыма зрабіць з функцыямі-канструктарамі:

  • Некаторыя унутраныя уласцівасци убудаваных класаў, такіх як даўжыня масіва (length у Array) або стэк выклікаў (stack у Error) маюць асаблівую рэалізацыю і не будуць працаваць карэктна.
  • Пры выкарыстанні функцый-канструктараў для ўспадкоўвання ад убудаваных тыпаў могуць ўзнікнуць праблемы з правільнай усталёўкай ланцужкоў прататыпаў.
  • Некаторыя JavaScript-рухавікі могуць мець абмежаванні або спецыфічную рэалізацыю, якая ускладняе або робіць немагчымым ўспадкоўванне ад убудаваных тыпаў.
  • Некаторыя ўбудаваныя тыпы могуць быць рэалізаваны такім чынам, што яны не маюць на ўвазе магчымасці атрымання ў спадчыну або маюць абмежаванні на гэты працэс.

То бок, мы атрымліваем розніцу ў паводзінах прыватных палей і метадаў і маем абмежаванні ў выкарыстоўванні ўспадкоўвання ад убудаваных тыпаў.

P.S.: калі вы маеце якія іншыя меркаванні, дадайце, калі ласка, іх у каментарах.

сумоўе
js
loveJS, 2023-12-17

Не так даўно выйшла новая версія Angular v17, якая прынесла нам розныя новыя магчымасці. Хацелася б разглядзець адну з прыметных - новыя блокі патока кіравання (control flow). Гэта падыход як дазваляе прасцей зрабіць умоўны блок і цыкл у шаблонах і прыходзіць на замену *ngIf *ngSwitch *ngFor. Новы падыход працуе хутчэй па апублікаваных бенчмарках, таму пераход на новыя блокі яшчэ і паляпшае прадукцыйнасць праграмы. Сам сінтаксіс даволі інтуітыўна зразумелыя для праграмістаў, таму што менавіта так мы пішам умовы і цыклы ў кодзе. Таму давайце паглядзім як гэта ўсё працуе на простых прыкладах, параўноўваючы стары і новы сінтаксіс.

Заўвага: новы сінтаксіс мае статус "перадпрагляд распрацоўшчыкамі" (developer preview) да наступнай версіі v18. Гэта значыць, што сінтаксіс можа змяніцца. Верагоднасць гэтага невялікая, таму што самі распрацоўшчыкі ангуляра лічаць яго даволі стабільным, але яна ёсць.

Умоўныя блокі @if @else @switch @case

Раней, калі мы хацелі паказаць нейкую частку шаблона па зададзенай умове, то пісалі:

<span *ngIf="numberOfMessages > 0">
	У вас {{ numberOfMessages }} новых паведамленняў
</span>

Новы сінтаксіс выкарыстоўвае @if

@if (numberOfMessages > 0) {
	У вас {{ numberOfMessages }} новых паведамленняў
}

Новы сінтаксіс дазваляе пазбавіцца ад лішніх блокаў, якія мы дадавалі як кантэйнеры для *ngIf. Раней, калі нам было трэба каб *ngIf не генераваў аніякага блока, то выкарыстоўваўся ng-container. Зараз гэта проста не патрэбна.

Працуючы з *ngIf у нас няма ніякага else, толькі адваротная ўмова таго ж самага *ngIf. Таму гэта выглядала так:

<span *ngIf="numberOfMessages > 0">
	У вас {{ numberOfMessages }} новых паведамленняў
</span>
<span *ngIf="numberOfMessages === 0">
	У вас няма новых паведамленняў
</span>

З новым патокам кіравання гэты код можна запісаць значна прасцей!

@if (numberOfMessages > 0) {
	У вас {{ numberOfMessages }} новых паведамленняў
} @else {
	У вас няма новых паведамленняў
}

Дзіўна каб @else існавала без @else if, і ён ёсць у новым сінтаксісе. Можна пісаць доўгія ланцугі з рознымі ўмовамі:

@if (numberOfMessages > 100) {
	У вас 100+ новых паведамленняў
} @else if (numberOfMessages > 0) {
	У вас {{ numberOfMessages }} новых паведамленняў
} @else {
	У вас няма новых паведамленняў
}

Вядома, калі ў нас ёсць шмат else if дзе адна пераменная можа прымаць розныя значэнні, то гэта нагода для выкарыстання switch/case. Можна прывесці такі прыклад с класічным сінтаксісам ngSwitch:

<div [ngSwitch]="message.type">
	<span *ngSwitchCase="'SENT'">Адпраўлена</span>">
	<span *ngSwitchCase="'SEND_ERROR'">Памылка адпраўкі</span>
	<span *ngSwitchCase="'RECEIVED'">Атрымана</span>
	<span *ngSwitchDefault>Паведамленне</span>
</span>

З новым @switch @case гэта будзе выглядаць так:

@switch (message.type) {
	@case ('SENT') { Адпраўлена }
	@case ('SEND_ERROR') { Памылка адпраўкі }
	@case ('RECEIVED') { Атрымана }
	@default { Паведамленне }
}

Выдатная і зразумелая замена атрымалася, якая дазваляе прасцей пісаць, а галоўнае чытаць, напісаны код.

Бонусам хацелася бы дадаць, што ў *ngIf нам даволі часта трэба атрымаць значэнне з Observable, якое не хочацца кожны раз прапускаць праз async пайп. З *ngIf мы пісалі гэта так

<section *ngIf="message$ | async; let message">
    <div class="subject">{{ message.subject }}</div>
    <div class="body">{{ message.body }}</div>
</section>

Такая магчымасць засталася і з новым @if з дапамогай as

@if (message$ | async; as message) {
    <section>
        <div class="subject">{{ message.subject }}</div>
        <div class="body">{{ message.body }}</div>
    </section>
}

Цыкл @for

Як вы ўжо здагадаліся новы сінтаксіс выкарыстоўвае @ для абазначэння новых блокаў з абазначэннем іх меж з дапамогай фігурных дужак { }. Таму прыкладна так і выглядае новы цыкл @for.

Тое што раней мы запісвалі так:

<section *ngFor="let message of messages$ | async; trackBy: trackByFn">
    <div class="subject">{{ message.subject }}</div>
    <div class="body">{{ message.body }}</div>
</section>

зараз выглядае вось так:

@for (message of messages$ | async; track message.id) {
    <section>
        <div class="subject">{{ message.subject }}</div>
        <div class="body">{{ message.body }}</div>
    </section>
}

Тут можна заўважыць, што раней мы павінны былі заўсёды пісаць функцыю для trackBy, а зараз мы проста можам указаць па якой уласцівасці аб'екта рабіць трэкінг. У дадзеным выпадку ўнікальны параметр message гэтаid, і мы напісалі track message.id.

Новай магчымасцю з'яўляецца ўказанне што рабіць калі элементаў у масіве няма. Робіцца гэта з дапамогай @empty блока:

@for (message of messages$ | async; track message.id) {
    <section>
        ...
    </section>
} @empty {
  Няма паведамленняў
}

Усе гэтыя невялічкія дадаткі робяць стварэнне ўмоў і цыклаў у шаблонах больш прасцейшымі і больш зразумелымі.

Міграцыя на новы сінтаксіс патока кіравання

Вам ужо хочацца паспрабаваць новы сінтаксіс у старым праекце, які вы толькі што мігравалі на v17? Каманда ангуляра падумала і аб гэтым. Для таго каб зрабіць аўтаматычную міграцыю на новы сінтаксіс на старым праекце, дастаткова запусціць

ng generate @angular/core:control-flow

Гэтая каманда зробіць усё за вас.

Спасылкі

Дарэчы, з 17-й версіі ангуляр пераехаў на новы веб-сайт angular.dev

P.S.

Гэта мой першы досвед напісання артыкулаў на гэтым партале (і ўвогуле не тое каб шмат я пісаў раней :) ), так што буду ўдзячны за любыя парады, выпраўлення і інш. Можна пісаць у асабістыя ў мастадон, ці пад гэтым допісам. Або на пошту editor[слімак]tomin[кропка]slmail[кропка]me. Дзякуй што пачыталі!

angular
javascript
Siarhei Tomin, 2023-12-02
;