Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - linuxtardis

Stran: 1 [2] 3
17
IntelliJ IDEA a všechny IDE na něm postavené.
GeoGebra.

18
Vývoj / Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« kdy: 12. 11. 2016, 21:14:35 »
Jen nejsou tak dobré. Plno skriptovacích věcí běží všude, ale kdo by chtěl dělat v jazycích na malé skriptíky. Plus jsou obvykle brutálně pomalé.
Mám to chápat tak, že např. GitHub a GitLab napsaly samé lopaty?

19
Windows a jiné systémy / Re:Je lepší Windows nebo Linux?
« kdy: 27. 10. 2016, 21:34:07 »
Your browser doesn’t support live streaming of the event.
Zkus Chromium + Pepper Flash. Ale zatím jsem to nezkoušel.

20
Windows a jiné systémy / Re:Je lepší Windows nebo Linux?
« kdy: 27. 10. 2016, 16:01:40 »
pamatovat si hromadu prikazu vcetne parametru, abych to umel ovladat pres command-line a uz vubec ne hrabat se v hromade zdrojaku a upravovat si kod.
a
rozsireni vedomosti v oblasti ve ktere pracuji
se nevylučují.

21
Windows a jiné systémy / Re:Je lepší Windows nebo Linux?
« kdy: 24. 10. 2016, 17:11:13 »
to ze tebe nejdu tlaciarne na windows10, tak je to tvoj problem a amaterizmus. mne funguju moja 7 rocna tlaciaren. Kde je chyba? Si len ty taky obmedzeny a mas neustale potrebu picovat na windows? Radsej spravuj a nechaj programovanie na ozajstnych ludi.
Unáhlené zobecnění + argumentum ad hominem.
samozrejme, ze robite vo Vime, robit si sam makefile je uz davno za opicami. to len ti, co to vykonavaju sa povazuju za coool, aki su oni dobri. kym oni kodia vo Vime, za ten cas uz ja pijem kavicku s kolegynou, lebo vysledny produkt uz nasadzujeme, zatial co oni este len robia makefile :D
Větší projekty v C++ dělám v CLionu, který mi generuje soubory pro CMake. V Javě mi bohatě stačí IDEA. Na věci okolo stačí Geany.
...Pracovat ve Widlich take jde, prestoze pro programatory*, adminy atp. je lepsi Linux (napr. prikazova radka je o rady silnejsi...
K programátorům...
Mohl by prosím nějaký zkušený čistý Céčkář tohle rozsvést? Nijak mě neoslovilo učení vimu, debugování a kompilování v konzoli, matlání Makefilů  (v plnohodnotém IDE mám vše v jednom) - někdo mi tvrdil, že je to jako vracet se xx let za opicema...asi něco dělám blbě
Nejsem v žádném případě zkušený a ani čistý céčkař, ale rozvedu ti to.
  • vim – používám CLion (i když nad Boostem se neskutečně laguje). Na rychlejší opravy mi stačí Nano (ale není to ono). Vim a Emacs jsem zkoušel, a bohužel jenom vyzkoušel.
  • debugování – Opět to jde i ve CLionu. Ve výjimečných případech se ti ale do RAMky nemusí zároveň aplikace a IDE vejít. Nebo když ladíš na embedded zařízení, tak jsi za GDB rád. Jinak uznávám, GUI je přehlednější.
  • kompilování v konzoli – pokud se v konzoli pohybuješ běžně, přijde ti to pak přehlednější.
  • matlání Makefilů – Taky nepatlám Makefily. CMake je mnohem jednodušší, navíc mi ho generuje IDE.
Takže teoreticky můj user-experience z Windows by mohl vyrovnat Linuxu, je to akorát o zvyku na ovládání a prostředí.

22
Windows a jiné systémy / Re:Je lepší Windows nebo Linux?
« kdy: 23. 10. 2016, 20:04:43 »
ja bych chtel umet ovladat komplet linux z terminalu (zadne GUI klikatka) ale je to proste pro mne tezke ... spojovani prikazu pres roury atd ... nez bych pres man vychytal jeden radek, byly by to hodiny studia ... je to skoda protoze si myslim ze ze vetsina z adminu se setkava vicemene se stejnymi pozadavky ale nikdo to nehodil na papir ...
Sakra, vždyť je tu Google.

23
Vývoj / Re:Spojový seznam v C - zápis do souboru
« kdy: 23. 10. 2016, 00:14:20 »
Citace
operace přidání, mazání, hledání
  • Přídání:
    • na konec: získáš poslední položku seznamu a ukazatel nasledujici nastavíš na pointer na novou položku.
    • doprostřed:
Výchozí stav je toto:
Kód: [Vybrat]
[0]->[2]
Pak vytvoříš položku a jako její nasledujici nastavíš budoucí následující položku ([2]):
Kód: [Vybrat]
[0]->[2]
[1]--^
Pak upravíš [0], aby ukazovala na [1]:
Kód: [Vybrat]
[0]->[1]->[2]
  • Mazání:
Výchozí pseudostav:
Kód: [Vybrat]
[0]->[1]->[2]
Pak v [0] nastavíš ukazatel nasledujici na [2]:
Kód: [Vybrat]
[0]->[2]
[1]--^
Pak smažeš [1].
Něco zajímavého: https://en.wikipedia.org/wiki/Read-copy-update.
  • Hledání: Uchováváš ukazatel na aktuální položku. Tu zkontroluješ, jestli odpovídá. Když ne, tak jako aktuální nastavíš nasledujici položku. Když dojdeš k NULL, prošel jsi celý seznam.

24
Vývoj / Re:Spojový seznam v C - zápis do souboru
« kdy: 22. 10. 2016, 23:57:29 »
Okej, patnáctiletej beďatej tydýt se právě vyřádil. :D

Pevně doufám, že to budeš brát jenom jako návrh řešení a ne jako hotovou věc. Byl bych rád, kdyby sis všiml některých kontrol na selhání funkcí (např. scanf).

Soubor jsem změnil na /tmp/soubor.txt, kdybys jej hledal.
Kód: (parametry.h) [Vybrat]
/*
 * Projekt Bla
 *
 * Datové struktury katalogu.
 */

#ifndef PARAMETRY_H
#define PARAMETRY_H

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <malloc.h>
#include <string.h>



///////////////
// STRUKTURY //
///////////////

/// \brief položka seznamu
typedef struct katalog {
    int radial_rychlost;
    int jasnost;
    int hmotnost;
    char *nazev;
   
    struct katalog *nasledujici;
} KATALOG;



//////////////////////
// PROTOTYPY FUNKCÍ //
//////////////////////


/// \brief Vytvoří položku spojového seznamu.
///
/// \param p_p_clanek    Ukazatel k ukazateli článku.
/// \param rychlost      Rychlost položky.
/// \param jas           Jas položky.
/// \param hmotnost      Hmotnost položky.
/// \param nazev         Název položky.
/// \return              EXIT_SUCCESS při úspěchu, EXIT_FAILURE při selhání.
int nova_polozka(KATALOG **p_p_clanek, int rychlost, int jas, int hmotnost, char *nazev);

/// \brief Smaže položku spojového seznamu.
///
/// POZOR: Na položku již nesmí být ukazováno.
///
/// \param p_clanek      Článek ke smazání.
/// \return              EXIT_SUCCESS při úspěchu, EXIT_FAILURE při selhání.
int smaz_polozku(KATALOG *p_clanek);

/// \brief Smaže katalog (spojový seznam).
///
/// \param p_clanek      První článek seznamu.
/// \return              EXIT_SUCCESS při úspěchu, EXIT_FAILURE při selhání.
int smaz_katalog(KATALOG *p_clanek);

/// \brief Vypíše na standardní výstup informace o položce.
///
/// \param p_clanek      Ukazatel na položku.
void vypis_polozku(const KATALOG *p_clanek);

/// \brief Vypíše všechny položky z katalogu.
///
/// \param p_polozka     Ukazatel na první položku.
void vypis_katalog(const KATALOG *p_clanek);


/////////////////////////
// IMPLEMENTACE FUNKCÍ //
/////////////////////////

int nova_polozka(KATALOG **p_p_clanek, int rychlost, int jas, int hmotnost, char *nazev) {
   
    // -- deklarace -- //
    KATALOG *p_clanek;
    size_t nazev_delka;
    char *nazev_kopie;
   
    // -- kontrola argumentů -- //
   
    if (p_p_clanek == NULL) {
        fputs("CHYBA V PROGRAMU: nova_polozka() zavolána s NULL-ovým cílovým umístěním.\n", stderr);
        return EXIT_FAILURE;
    }
   
    if (nazev == NULL) {
        fputs("CHYBA V PROGRAMU: nova_polozka() zavolána s NULL-ovým názvem.\n", stderr);
        return EXIT_FAILURE;
    }
   
    // -- zkopírování názvu -- //
   
    // zjištění délky původního názvu ve znacích
    nazev_delka = strlen(nazev);
   
    // alokace kopie o délce počet znaků + null terminator
    nazev_kopie = malloc(nazev_delka + 1);
   
    // kontrola alokace
    if (nazev_kopie == NULL) {
        fputs("Chyba: nemohu alokovat pamet pro nazev polozky.\n", stderr);
       
        return EXIT_FAILURE;
    }
   
    // samotné kopírování
    strncpy(nazev_kopie, nazev, nazev_delka);
   
    // kontrola na null terminator
    nazev_kopie[nazev_delka] = '\0';
   
    // -- vytvoření položky -- //
   
    // alokace položky
    p_clanek = (KATALOG *) malloc(sizeof(KATALOG));
   
    // kontrola alokace
    if(p_clanek == NULL) {
        fputs("Chybna nemohu alokovat pamet pro datovou polozku.\n", stderr);
       
        return EXIT_FAILURE;
    }
    // kopírování dat
    p_clanek->radial_rychlost = rychlost;
    p_clanek->jasnost         = jas;
    p_clanek->hmotnost        = hmotnost;
    p_clanek->nazev           = nazev_kopie;
    p_clanek->nasledujici     = NULL;
    // navrácení ukazatele na novou položku
    *p_p_clanek = p_clanek;   
   
    return EXIT_SUCCESS;
};


int smaz_polozku(KATALOG *p_clanek) {
   
    // -- kontrola argumentu -- //
    if (p_clanek == NULL) {
        fputs("CHYBA V PROGRAMU: smaz_polozku() zavolána s NULL-ovým pointerem.\n", stderr);
       
        return EXIT_FAILURE;
    }
   
    // smazání kopie názvu
    if (p_clanek->nazev != NULL)
        free(p_clanek->nazev);
   
    // smazání položky
    free(p_clanek);
   
    return EXIT_SUCCESS;
}

int smaz_katalog(KATALOG *p_katalog) {
    KATALOG *p_clanek = p_katalog;
   
    while (p_clanek != NULL) {
        KATALOG *p_dalsi = p_clanek->nasledujici;
       
        if (!smaz_polozku(p_clanek))
            return EXIT_FAILURE;
       
        p_clanek = p_dalsi;
    }
}

void vypis_polozku(const KATALOG *p_clanek) {
   
    // kontrola argumentů
    if(p_clanek == NULL)
        return;
   
    // výpis na standardní výstup
    printf("\"%s\":\n", p_clanek->nazev);
    printf(" * Hmotnost:          %d\n", p_clanek->hmotnost);
    printf(" * Jasnost:           %d\n", p_clanek->jasnost);
    printf(" * Radialni rychlost: %d\n", p_clanek->radial_rychlost);
    printf("\n");
   
};

void vypis_katalog(const KATALOG *p_katalog) {
    const KATALOG *p_clanek = p_katalog;
   
    int n = 1;
    while (p_clanek != NULL) {
   
        printf("%d. ", n++);
        vypis_polozku(p_clanek);
       
        p_clanek = p_clanek->nasledujici;
    }
}

#endif
Kód: (main.c) [Vybrat]
/*
 * Projekt Bla
 *
 * Hlavní část programu.
 */
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include "parametry.h"

// maximální délka názvu
#define INPUT_BUFFER 256

//////////////////////
// PROTOTYPY FUNKCÍ //
//////////////////////

/// \brief Vstupní bod programu.
///
/// \return     0 při úspěchu, 1 při chybě.
int main(void);

/// \brief Přečte od uživatele číselnou hodnotu.
///
/// \param vyzva    Výzva k zadání údaje.
/// \return         Přečtené číslo.
int ziskej_cislo(const char *vyzva);

/// \brief Přečte od uživatele text.
///
/// \param vyzva     Výzva k zadání údaje.
/// \param buffer    Buffer pro uložení textu.
/// \param max       Maximální počet přečtených znaků.
void ziskej_text(const char *vyzva, char *buffer, size_t max);

/// \brief Přečte všechny dostupné znaky ze standardního vstupu a zahodí je.
void vycisti_vstup(void);

/// \brief Vypíše exoplanety do souboru.
///
/// \param soubor       Soubor, do kterého zapisovat.
/// \param p_katalog    Katalog k vypsání.
/// \return             EXIT_SUCCESS při úspěchu, EXIT_FAILURE při selhání.
void vypis_soubor(FILE *soubor, KATALOG *p_katalog);

/////////////////////////
// IMPLEMENTACE FUNKCÍ //
/////////////////////////


void vycisti_vstup(void) {
    char ch;
       
    do {
        ch = getchar();
    } while (ch != '\n' && ch != EOF);
}


int ziskej_cislo(const char *vyzva) {
    int hodnota;
   
    // opakuj, dokud nezískáš platnou hodnotu
    while (1) {
        int precteno;
       
        if (vyzva != NULL) {
            fputs(vyzva, stdout);
            fflush(stdout);
        }
       
        precteno = scanf(" %d", &hodnota);
       
        vycisti_vstup();
        if (precteno == 1) {
            break;
        }
    }
   
    return hodnota;
}

void ziskej_text(const char *vyzva, char *buffer, size_t max) {
    // stackoverflow: http://stackoverflow.com/a/4023921/1561345
    size_t delka;
   
    // opakuj, dokud nezískáš neprázdnou hodnotu
    do {       
        if (vyzva != NULL) {
            fputs(vyzva, stdout);
            fflush(stdout);
        }
    } while (fgets(buffer, max, stdin) == NULL);
   
    delka = strlen(buffer);
   
    // pokud uživatel zadal příliš dlouhé jméno, je třeba odhodit zbytek v zásobě.
    if (buffer[delka-1] != '\n') {
        vycisti_vstup();
        return;
    }

    // jinak jen ořízneme nový řádek.
    buffer[delka-1] = '\0';
    return;
}

void vypis_soubor(FILE *soubor, KATALOG *p_katalog) {
    KATALOG *p_clanek = p_katalog;
    while (p_clanek != NULL) {
        fprintf(soubor, "%s,%d,%d,%d\n",
                          p_clanek->nazev,
                          p_clanek->hmotnost,
                          p_clanek->jasnost,
                          p_clanek->radial_rychlost);
        p_clanek = p_clanek->nasledujici;
    }
}

int main(void) {
    FILE *fa = NULL;
    KATALOG *p_katalog = NULL, *p_clanek_posledni = NULL;
    int n = 1;
    char vstup[INPUT_BUFFER];
   
    // -- otevření souboru -- //
    fa = fopen("/tmp/soubor.txt", "w");
   
    if (fa == NULL) {
        fprintf(stderr, "Nepodarilo se otevrit soubor: %s!\n", strerror(errno));
       
        return EXIT_FAILURE;
       
    }
    printf("Soubor uspesne otevren!\n");
   
   
    // -- čtení exoplanet ze standardního vstupu -- //
    while(1) {
        int rychlost, jasnost, hmotnost;
        KATALOG *p_polozka = NULL;
       
        printf("Exoplaneta cislo %i\n", n++);
        ziskej_text("Zadejte nazev: \n", vstup, INPUT_BUFFER);
        hmotnost = ziskej_cislo("Zadejte hmotnost: \n");
        jasnost  = ziskej_cislo("Zadejte jasnost: \n");
        rychlost = ziskej_cislo("Zadejte radialni rychlost: \n");
       
        if (nova_polozka(&p_polozka, rychlost, jasnost, hmotnost, vstup) == EXIT_FAILURE)
            return EXIT_FAILURE;
       
        // aktualizace ukazatelů
        if (p_katalog == NULL) {
            p_katalog = p_polozka;
        }
        if (p_clanek_posledni != NULL) {
            p_clanek_posledni->nasledujici = p_polozka;
        }
        p_clanek_posledni = p_polozka;
       
        // dotaz na pokračování
        ziskej_text("Prejete si pridat dalsi exoplanety? [Y/n] ", vstup, INPUT_BUFFER);
        if (strcmp(vstup, "n") == 0 || strcmp(vstup, "N") == 0)
            break;
       
    }
   
    // -- výpis exoplanet na standardní výstup -- //
   
    fputs("\nExoplanety:\n\n", stdout);
    vypis_katalog(p_katalog);

    // -- výpis exoplanet do souboru -- //
   
    vypis_soubor(fa, p_katalog);

    // -- smazání seznamu -- //
   
    if (!smaz_katalog(p_katalog)) {
        return EXIT_FAILURE;
    }
   
    // -- uzavření souboru -- //
   
    if (fclose(fa) == EOF) {
        printf("Soubor se nepodarilo uzavrit: %s.\n", strerror(errno));
        return EXIT_FAILURE;
    }
   
    return EXIT_SUCCESS;
       
}

25
Hardware / Re:Notebook pre Java Vyvojara
« kdy: 02. 10. 2016, 17:12:55 »
Java Card nekdo?

Ne ze by to nejak tazateli pomohlo, samozrejme...
The minimum system requirement is 16 kilobytes of read-only memory (ROM), 8 kilobytes of EEPROM, and 256 bytes of random access memory (RAM).
To je ještě lepší! :D

26
Hardware / Re:Notebook pre Java Vyvojara
« kdy: 02. 10. 2016, 17:05:28 »
A leJOS NXJ se svojí vlastní JVM funguje i na 64 KB RAM a 256 KB Flash.

27
Hardware / Re:Notebook pre Java Vyvojara
« kdy: 02. 10. 2016, 17:02:24 »
vyhrali ste vsak preteky v "spustil som javu na najmensom pocte gigabajtov v tomto threade".
S leJOSem jsem spouštěl javu na EV3 s 64 MB RAM, akorát teda jen JRE, ne JDK.

28
Hardware / Re:Notebook pre Java Vyvojara
« kdy: 02. 10. 2016, 00:10:28 »
To jsem asi ještě neznal objektový enum, protože to by vlastně bylo elegantní řešení. :D

29
Hardware / Re:Notebook pre Java Vyvojara
« kdy: 01. 10. 2016, 23:58:43 »
Nemůžu si pomoct :D
https://bitbucket.org/tuxovatardis/robo2015-zs/src/2a2fb0b6c5ce9ae7d7c8a8f60a72c9964853dad8/program-rewrite/src/TuxTARDIS/Rewrite/?at=master

Vypadá to zajímavě, něco málo je i objektově, ale většina z toho je imperativní jak z doby Pascalu. Proč je např. metoda Pos.directionOf() statická, když k tomu není žádný důvod? Operátor instanceof také není zrovna objektový - polymorfismus je přece mnohem výhodnější. Metoda Pos.modify() je také podivná - proč je statická a k čemu ten switch?

Je to však hezká úloha, zítra se na ni podívám trochu podrobněji.
Ad static v Pos – už nevím, zpětně to vypadá, jako bych vyráběl cosi jako POD, i když to nemá smysl.
Ad Pos.modify – má to dělat posun souřadnice v daném směru (NSEW); přijde mi lepší switch než magie s modulem.
Ad instanceof – preferoval jsem centralizovanou implementaci oproti kódu rozdělenému do více tříd; zase to vypadá jako tendence k POD.

Tohle už by nemuselo být tak imperativní: UI pro Swing a leJOS EV3

Stran: 1 [2] 3