Proč ten hype okolo Go?

Bacsa

Re:Proč ten hype okolo Go?
« Odpověď #105 kdy: 28. 08. 2018, 15:34:24 »
Uz to v podstate vzdavam a hledam nejaky jinaci jazyk. Budto Python, nebo Go, nebo Node.js.
Nebo Haskell. Ten je vlastně moc málo abstraktní, radší Idris ;)
A zase ten zboj!
Co je, dal ses na zboj?


kkt1

  • *****
  • 796
    • Zobrazit profil
Re:Proč ten hype okolo Go?
« Odpověď #106 kdy: 28. 08. 2018, 15:53:08 »
A co OSTRAJava ?https://github.com/tkohout/OSTRAJava/blob/master/README.md

Kit

Re:Proč ten hype okolo Go?
« Odpověď #107 kdy: 28. 08. 2018, 16:45:57 »
Podla mna je znak neefektivity programatora ked musis furt na vsetko vymyslat odznova koleso.

Když jsou všechna dostupná kola hranatá, tak je občas nutné vymyslet vlastní.

Jano7

Re:Proč ten hype okolo Go?
« Odpověď #108 kdy: 28. 08. 2018, 16:49:21 »
Citace
Chtel jsem ten Node.js, protoze stejne bych se mel ten javascript pomalu zacit poradneji ucit, ale sorry jako, to se proste neda. Pokazde zapnu nejaky example a chce se mi blejt co je to za shit platformu. Funcke treba bere jako parametr fixni String "onError", chces se podivat jake jsou vlastne mozne jine parametry tohoto enumu, a nenajdes nic, ani po rozkliknuti v komentech, proste nic.

Treba dať JavaScriptu šancu, je to geniálny jazyk a platforma. Neveril by som, že také niečo niekedy napíšem.
Hej, natvrdo nastavený názov eventu vyzerá nedobre. Ako však bolo už spomenuté, netreba používať priamo Node http  ale Express knižnicu. Nie náhodou si v Mozille zvolili Django a Express ako frameworky pre svoj začiatočnícky web developent tutoriál.

Kód: [Vybrat]
const express = require("express");
const path = require("path");

const app = express();

app.use('/', express.static(path.join(__dirname, 'public')));

app.set('views', path.resolve(__dirname, "views"));
app.set('view engine', 'ejs');

app.get("/today", (req, res) => {

    let today = new Date();
    res.render("show_date", {now: today});
});

app.use((req, res) => {
    res.statusCode = 404;
    res.end("404 - page not found");
});

app.listen(3000, () => {

    console.log("Application started on port 3000");
})

V pár riadkoch kódu si nastavím posielanie statických stránok, template engine, jednu route cestu, a 404.
Tomuto sa môže vyrovnať jedine Python Flask. Porovnajme takýto prístup trebárs s klasickou Java webovou
aplikáciou, a jej WAR súbormi, WEB-INF adresármom, XML deskriptormi či anotáciami, zbytočne komplexnými servletmi... X zbytočne komplexných úkonov navyše.

Skutočná sila JavaScriptu sa skrýva vo  funkcionálnom programovaní. Nasledujúci kód vytvorí niekoľko objektov
pomocou JSON notácie (porovnajte s komplikovanou tvorbou objektov v Jave alebo C#) a spracuje ich pomocou
funkcionálnej knižnice ramda. Čistá krása.

Kód: [Vybrat]
const R = require('ramda');
const moment = require('moment');

const users = [
  { name: 'John', city: 'London', born: '2001-04-01' },
  { name: 'Lenny', city: 'New York', born: '1997-12-11' },
  { name: 'Andrew', city: 'Boston', born: '1987-02-22' },
  { name: 'Peter', city: 'Prague', born: '1936-03-24' },
  { name: 'Anna', city: 'Bratislava', born: '1973-11-12' },
  { name: 'Albert', city: 'Bratislava', born: '1940-18-19' },
  { name: 'Adam', city: 'Trnava', born: '1983-12-01' },
  { name: 'Robert', city: 'Bratislava', born: '1935-05-15' },
  { name: 'Robert', city: 'Prague', born: '1998-03-14' }
];

let res1 = R.filter(R.where({ city: R.equals('Bratislava') }))(users);
console.log(res1);

let res2 = R.filter(R.where({
  city: R.equals('Bratislava'),
  name: R.startsWith('A')
}))(users);

console.log(res2);

let res3 = R.filter(R.where({
  born: (dt) => getAge(dt) > 40}))(users);

console.log(res3);

function getAge(dt) {

    return moment.duration(moment() - moment(dt)).years();
}

MarSik

Re:Proč ten hype okolo Go?
« Odpověď #109 kdy: 28. 08. 2018, 17:10:59 »
Porovnajme takýto prístup trebárs s klasickou Java webovou
aplikáciou, a jej WAR súbormi, WEB-INF adresármom, XML deskriptormi či anotáciami, zbytočne komplexnými servletmi... X zbytočne komplexných úkonov navyše.

Ehm.. jen pokud chcete. Už zmíněný Spark (http://sparkjava.com/) nebo třeba Pippo (http://www.pippo.ro/) nic takového totiž nepotřebují.


era

Re:Proč ten hype okolo Go?
« Odpověď #110 kdy: 28. 08. 2018, 17:55:58 »
Skutočná sila JavaScriptu sa skrýva vo  funkcionálnom programovaní. Nasledujúci kód vytvorí niekoľko objektov
pomocou JSON notácie (porovnajte s komplikovanou tvorbou objektov v Jave alebo C#) a spracuje ich pomocou
funkcionálnej knižnice ramda. Čistá krása.

LINQ v c# mi prijde jeste hezci. Mimochodem ten vas slavny javascript vam ani neda vedet ze 18 neni platny mesic. Na neco je js samozrejme fajn, ale ostatni jazyky toho maji taky dost co nabidnout.

Kód: [Vybrat]
using System;
using System.Linq;

namespace ConsoleApp9
{
    class Program
    {
        static void Main(string[] args)
        {
            var users = new[]
            {
                new { name = "John", city = "London", born = new DateTime(2001, 04, 01) },
                new { name = "Lenny", city =  "New York", born = new DateTime(1997,12,11) },
                new { name = "Andrew", city = "Boston", born = new DateTime(1987,2,22) },
                new { name = "Peter", city = "Prague", born = new DateTime(1936, 3, 24) },
                new { name = "Anna", city = "Bratislava", born = new DateTime(1973, 11, 12) },
                new { name = "Albert", city = "Bratislava", born = new DateTime(1940, 8, 19) },
                new { name = "Adam", city = "Trnava", born = new DateTime(1983, 12, 01) },
                new { name = "Robert", city = "Bratislava", born = new DateTime(1935, 05, 15) },
                new { name = "Robert", city = "Prague", born = new DateTime(1998,03,14) }
            };

            var res1 = users.Where(user => user.city == "Bratislava");
            Console.WriteLine(string.Join(",", res1.Select(user => $"{user.name} {user.city}")));

            var res2 = users.Where(user => user.city == "Bratislava" && user.name.StartsWith("A"));
            Console.WriteLine(string.Join(",", res2.Select(user => $"{user.name} {user.city}")));

            Func<DateTime, int> getAge = birthDate =>
            {
                DateTime n = DateTime.Now;
                int age = n.Year - birthDate.Year;

                if (birthDate.AddYears(age) < n) age--;

                return age;
            };

            var res3 = users.Where(user => getAge(user.born) > 40);
            Console.WriteLine(string.Join(",", res3.Select(user => $"{user.name} {user.city} {getAge(user.born)}")));

            Console.ReadKey();
        }
    }
}




Rado2

Re:Proč ten hype okolo Go?
« Odpověď #111 kdy: 28. 08. 2018, 18:27:02 »

LINQ v c# mi prijde jeste hezci. Mimochodem ten vas slavny javascript vam ani neda vedet ze 18 neni platny mesic. Na neco je js samozrejme fajn, ale ostatni jazyky toho maji taky dost co nabidnout.


Tiež hlasujem za C# :) Len taký detail, aj keď funkcia getAge() vyzerá v C# zložitejšie, podľa mňa aj je správnejšie, i keď neoveroval som to, ale ten výpočet v JS príklade podľa mňa neberie do úvahy prestupné roky. (C# verziu sum skúsil a tá má problém len v deň narodenín - vráti ešte o rok menej)

oss

Re:Proč ten hype okolo Go?
« Odpověď #112 kdy: 28. 08. 2018, 19:21:57 »
to getAge
Kód: [Vybrat]
Func<DateTime, int> getAge = birthDate => Math.Floor((DateTime.Now - birthDate).TotalDays/365.0);

Bacsa

Re:Proč ten hype okolo Go?
« Odpověď #113 kdy: 28. 08. 2018, 19:29:41 »
to getAge
Kód: [Vybrat]
Func<DateTime, int> getAge = birthDate => Math.Floor((DateTime.Now - birthDate).TotalDays/365.0);
To je zcela špatně.

Ovce

Re:Proč ten hype okolo Go?
« Odpověď #114 kdy: 28. 08. 2018, 19:35:06 »
to getAge
Kód: [Vybrat]
Func<DateTime, int> getAge = birthDate => Math.Floor((DateTime.Now - birthDate).TotalDays/365.0);
To je zcela špatně.
Jasně třeba je, ale tak to napiš, co je špatně. Co tě pozoruji, tak budeš ten druh dementa co natahuje diskuzi aby ukázal jak je chytrej.

Rado2

Re:Proč ten hype okolo Go?
« Odpověď #115 kdy: 28. 08. 2018, 19:45:21 »
to getAge
Kód: [Vybrat]
Func<DateTime, int> getAge = birthDate => Math.Floor((DateTime.Now - birthDate).TotalDays/365.0);
To je zcela špatně.
Jasně třeba je, ale tak to napiš, co je špatně. Co tě pozoruji, tak budeš ten druh dementa co natahuje diskuzi aby ukázal jak je chytrej.

Asi tým myslí, že nie každý rok má 365 dní, ale podľa mňa to je ekvivalent toho príkladu v JavaScripte

Jano7

Re:Proč ten hype okolo Go?
« Odpověď #116 kdy: 28. 08. 2018, 20:42:49 »
Citace
Ehm.. jen pokud chcete. Už zmíněný Spark (http://sparkjava.com/) nebo třeba Pippo (http://www.pippo.ro/) nic takového totiž nepotřebují.

Kiež by to bolo tak. Spark aj Pippo sú malé, hobby projekty. Na Sparku aktívne pracuje pár ľudí.
Spark funguje defaultne s embedded Jetty, ktorý však nemá možnosť nakonfigurovať si connection pooling. Takže v skutočnosti sa nevyhneme nasadeniu na Tomcat serveri a WARku, XMLkám atď.


Jano7

Re:Proč ten hype okolo Go?
« Odpověď #117 kdy: 28. 08. 2018, 20:54:15 »
Citace
LINQ v c# mi prijde jeste hezci. Mimochodem ten vas slavny javascript vam ani neda vedet ze 18 neni platny mesic.

Dobrý postreh. Moment.js funguje defaultne vo forgiving móde; na validáciu treba zapnúť strict mód a zavolať isValid() metódu.

Citace
Tiež hlasujem za C# :) Len taký detail, aj keď funkcia getAge() vyzerá v C# zložitejšie, podľa mňa aj je správnejšie, i keď neoveroval som to, ale ten výpočet v JS príklade podľa mňa neberie do úvahy prestupné roky. (C# verziu sum skúsil a tá má problém len v deň narodenín - vráti ešte o rok menej)

Nie som si istý pri tej duration() metóde, tam je to nejako zamotané; dokumentácia odporúča použiť diff() metódu.

Kód: [Vybrat]
const moment = require('moment');

let borodinoBattle = moment('1812-09-07');

let now = moment();
let days = now.diff(borodinoBattle, 'days');

console.log(`On ${now.format('ll')}, ${days} days have passed since the Borodino battle.`);

K dnešnému dňu uplynulo od Bitky pri Borodine 75230 dní
podľa https://www.timeanddate.com/date/durationresult.html?m1=09&d1=07&y1=1812&m2=8&d2=28&y2=2018

A JavaScript príklad vráti presnú hodnotu.

Rado2

Re:Proč ten hype okolo Go?
« Odpověď #118 kdy: 28. 08. 2018, 21:03:13 »

K dnešnému dňu uplynulo od Bitky pri Borodine 75230 dní
podľa https://www.timeanddate.com/date/durationresult.html?m1=09&d1=07&y1=1812&m2=8&d2=28&y2=2018

A JavaScript príklad vráti presnú hodnotu.

Ale počet dní je niečo iné, ako počet rokov. Rozdiel dvoch dátumov je napr. 365 dní. Je to rok, alebo nie? To záleží od toho, či interval začal v prestupný rok, ale tú informáciu už po odpočítaní dvoch dátumov nemáš. Takže moment  síce nepoznám, ale ako vravím pochybujem, že by si k intervalu pamätal aj jeho začiatok a na jeho základe vrátil správny počet rokov. Ale je to už debata dosť mimo témy.

anonym

Re:Proč ten hype okolo Go?
« Odpověď #119 kdy: 28. 08. 2018, 22:28:14 »
Citace
Ehm.. jen pokud chcete. Už zmíněný Spark (http://sparkjava.com/) nebo třeba Pippo (http://www.pippo.ro/) nic takového totiž nepotřebují.

Kiež by to bolo tak. Spark aj Pippo sú malé, hobby projekty. Na Sparku aktívne pracuje pár ľudí.
Spark funguje defaultne s embedded Jetty, ktorý však nemá možnosť nakonfigurovať si connection pooling. Takže v skutočnosti sa nevyhneme nasadeniu na Tomcat serveri a WARku, XMLkám atď.

Tak zrovna connection pool je to nejmensi co me trapi, na to je HikariCP a mozna ze je to i rychlejsi nez ten Tomcatuv.