V Bostonu probíhá konference Red Hat Summit 2025. Vybrané přednášky lze sledovat na YouTube. Dění lze sledovat na síti 𝕏 (#RHSummit).
Společnost Red Hat oficiálně oznámila vydání Red Hat Enterprise Linuxu 10. Vedle nových vlastností přináší také aktualizaci ovladačů a předběžné ukázky budoucích technologií. Podrobnosti v poznámkách k vydání.
Tuto sobotu 24. května se koná historicky první komunitní den projektu Home Assistant. Zváni jsou všichni příznivci, nadšenci a uživatelé tohoto projektu. Pro účast je potřebná registrace. Odkazy na akce v Praze a v Bratislavě.
Troy Hunt představil Have I Been Pwned 2.0, tj. nový vylepšený web služby, kde si uživatelé mohou zkontrolovat, zda se jejich hesla a osobní údaje neobjevili v únicích dat a případně se nechat na další úniky upozorňovat.
Microsoft představil open source textový editor Edit bežící v terminálu. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.
V Seattlu a také online probíhá konference Microsoft Build 2025. Microsoft představuje své novinky. Windows Subsystem for Linux je nově open source. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.
Z příspěvku Turris Sentinel – co přinesl rok 2024 na blogu CZ.NIC: "Za poslední rok (únor 2024 – únor 2025) jsme zachytili 8,3 miliardy incidentů a to z 232 zemí a z jejich závislých území. Tyto útoky přišly od 6,2 milionu útočníků (respektive unikátních adres). SMTP minipot je stále nejlákavější pastí, zhruba 79 % útoků bylo směřováno na tento minipot, 16 % útoků směřovalo na minipot Telnet, 3 % útoků směřovaly na minipot HTTP a 2 % na minipot FTP. Dále jsme zaznamenali 3,2 milionu unikátních hesel a 318 tisíc unikátních loginů, které útočníci zkoušeli."
Byla vydána (Mastodon, 𝕏) nová verze 3.0.4 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP (GNU Image Manipulation Program). Přehled novinek v oznámení o vydání a v souboru NEWS na GitLabu. Nový GIMP je již k dispozici také na Flathubu.
Byla vydána nová stabilní verze 7.4 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 136. Přehled novinek i s náhledy v příspěvku na blogu.
Spolek vpsFree.cz vydal statistiky týkající se distribucí nasazených na serverech členů. V dlouhodobém pohledu je zřejmé, že většina uživatelů z původního CentOS přechází na Rocky Linux. Pozoruhodný je také nárůst obliby distribuce NixOS, která dnes zaujímá třetí místo po Debianu a Ubuntu.
import ( "database/sql" _ "github.com/go-sql-driver/mysql" ...Balíček sql je univerzální interface pro databáze. Balíček mysql je přejmenován na podtržítko (tzv. blank import), aby překladač nehlásil chybu nepoužitého balíčku.
var Db *sql.DB func init() { var err error Db, err = sql.Open("mysql", "bookman:heslo@/library") if err != nil { // "root:@/library" panic(err) } } func main() { ...Databáze library má pouze jednu tabulku:
CREATE TABLE books ( book_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, title VARCHAR(200) NOT NULL, first_name VARCHAR(20) NOT NULL, last_name VARCHAR(40) NOT NULL, year SMALLINT UNSIGNED NOT NULL, PRIMARY KEY (book_id) );Routes:
mux.HandleFunc("/", index) mux.HandleFunc("/book/create", createBook) mux.HandleFunc("/book/update/", updateBook) mux.HandleFunc("/book/delete/", deleteBook)URL končící lomítkem odpovídá adrese ve formátu
/book/update/1Identifikační číslo (tu jedničku) lze získat takto:
id := r.URL.Path[len("/book/update/"):]Funkce pro přidání knihy:
func createBook(w http.ResponseWriter, r *http.Request) { if r.Method == "GET" { tml.Must(tml.ParseFiles(TmlLayout, TmlBookForm, TmlBookFormC)).ExecuteTemplate(w, "layout", nil) return } book := forms.NewBook() if book.IsValid(r) { queries.CreateBook(Db, book) http.Redirect(w, r, "/", 302) return } tml.Must(tml.ParseFiles(TmlLayout, TmlBookForm, TmlBookFormC)).ExecuteTemplate(w, "layout", book) }Pokud je přístup z běžné stránky (metoda GET), zobrazí se formulář. Když je formulář odeslán (metoda POST), proběhne kontrola zadaných údajů, a pokud jsou v pořádku, uloží se do databáze. Pokud nejsou validní, zobrazí se formulář se zadanými údaji a chybovými hláškami.
type Book struct { Values map[string]string Errors map[string]bool } func (b *Book) IsValid(r *http.Request) bool { r.ParseForm() valid := true for k, v := range r.PostForm { b.Values[k] = v[0] if str.TrimSpace(v[0]) == "" { b.Errors[k] = true valid = false } } if !isYear(b.Values["year"]) { b.Errors["year"] = true valid = false } return valid }PostForm je mapa sliců (haš polí), takže hodnoty z formuláře představují první prvky (v[0]). Před získáním hodnot je nutné zavolat metodu ParseForm.
type BookFormUpdate struct { *forms.Book // pouze typ, zadne jmeno IdURL string } update := BookFormUpdate{ queries.ReadBookToForm(Db, id), id, }Funkce ReadBookToForm vrací strukturu typu *forms.Book (příklad výše). Přístup k Values je update.Values["title"] místo běžného update.x.Values["title"]. Tohle zjednodušení umožňuje mít pro formulář pouze jednu html šablonu.
Tiskni
Sdílej:
Přemýšlím, co na to říct… snad jen, že v Javě tohle jde řešit mnohem elegantněji.
Tenhle kód v Go je tak nějak na úrovni Servletů (cca rok 1998).
V zásadě nic. Resp. je to trochu nízkoúrovňová technologie, nad kterou většinou dává smysl vybudovat nějakou nadstavbu, i když v jednodušších případech můžou posloužit dobře i v aplikaci (ne jen jako základ nějakého frameworku/knihovny).
Jen mne trochu udivuje, že má někdo potřebu je znovu-vynalézat v roce 2019 a ještě se tvářit, že přináší bůhvíjaký pokrok :-) (čímž tedy nemyslím autora tohoto zápisku, ale obecně různé nositele „pokroku“ a „nových“ přístupů)
Cim chces rict, ze eventually vsechny ceka reinventnout Java spagety (tm)?
Co jsou „Java špagety“? Nějaký příklad?
Nemyslim si, ze by to byl ten pripad, Go vede k uplne jinym spagetam tim, ze se v nem neda delat ruzne meta-vylomeniny
Go je hodně jednoduchý jazyk, má omezené jazykové možnosti, takže se pak ta složitost musí objevit v tvém vlastním kódu. Opačný extrém je třeba C++ nebo Perl, kde velkou část složitosti můžeš přenést na ten jazyk (jeho syntaxi, standardní knihovnu) a svůj kód mít jednodušší. A Java je někde mezi tím – nabízí víc možností než Go, ale není tak složitá jako C++.
Z velké míry je to otázka osobních preferencí – jak složitý jazyk člověk chce/dokáže udržet v hlavě a efektivně používat a co raději udělá hrubou silou ve vlastnoručně psaném kódu. U jazyka s bohatšími možnostmi je riziko, že člověk neudrží svoji kreativitu na uzdě a začne je nadužívat. U chudšího jazyka zase hrozí, že budeš v každém svém programu znovu-vynalézat kolo nebo pracovat méně efektivně, než by ti tvoje mozková kapacita umožňovala.
takze je casto jednodussi vykopirovat bloky kodu a pouzit je s trochou uprav jinde
V Javě se tomu říká POJO (Plain Old Java Object) tzn. třída, která nezávisí na ničem jiném než standardní knihovně. Takový kód můžeš snadno přenést jinam, aniž bys tam potřeboval další knihovny a frameworky. A tohle je obecný koncept – můžeš to dělat v libovolném jazyce.
Co jsem viděl u různých „Go evangelizátorů“: když přešli z Javy na Go a pochvalovali si Go, tak se ukázalo, že v tom Go začali psát výrazně jiným (jednodušším) stylem než v Javě. To ovšem o daných jazycích neříká vůbec nic – nikdo jim totiž nebránil v té Javě psát tím jednodušším způsobem. Takže tohle je spíš otázka stylu než jazyka.
Zrovna nedávno se někdo hrozně divil, když jsem mu dával nějaký příklad v Javě, který byl jen jeden soubor a stačilo ho přeložit příkazem javac
a spustit příkazem java
(což zadáš buď ručně nebo si na to uděláš Makefile o pěti řádcích). A dotyčný se ptal, kde je Ant, Maven, frameworky, další knihovny a celkově složitost, kterou od Javy čekal. Tohle je prostě blud, ve kterém spousta lidí žije. Jakým stylem budeš programovat, záleží primárně na tobě, ne na tom jazyku.
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword"
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});
But now i want to try Go language and do the integration with payslipview . You have given really nice explanation here. I will try and let you know on this page , how it works.