Jump to content
php.lv forumi

F3llony

Reģistrētie lietotāji
  • Posts

    1,353
  • Joined

  • Last visited

Posts posted by F3llony

  1. Pirmkārt, gar DBMS setupu vajadzētu gramstīties tikai DBA, nevis kaut kādiem node-istiem. Pings, ibio rio...

     

    Otrkārt, servera specifikācijas, network layout, kur atrodas serveris, kur atrodas klients, un pilnu query plan/explainu - galdā. Te nav tantes Ljubovnas zīlēšanas salons, tie tavi skaitļi nezinot setupu, cik daudz dati, kādi indeksi, kāds konfigs utt. pilnīgi un absolūti neko neizsaka.

     

    Kas tur ar tām konekcijām un connection pool?

     

     

    Testu veicu ar ~1000 pieprasījumiem pēc kārtas. ~50 paralēli.

     

    Ugh? Tev ir aplikācija ar 50 sim. paralēlismu un tevi laiž pie DB? :D Bet ja nopietni, 50 paralēlisms un 1000 top, tas ir 20 pieprasījumi uz konekciju. WTF kind of benchmark strategy is that? Ja tev paralēlisms ir 50, tad tas nozīmē, ka vienlaikus var tikt veikti up-to 50 pieprasījumi, rodas jautājums - no kurienes tie nāk - atsevišķas sistēmas vai arī jodelē no tā paša datora, kur tev aplikācija un postgre stāv? :D Un ja tev ir 50 paralēlisms, un teiksim, 50+50%, eg. 75 connection pool, tad kā connection pool var buut piedirsts? Kaut kā nedarbojas tā tava matemātika.

     

    Pie reizes būtu svētīgi pateikt, kas par ORM. Tas arī jāuzmin?....

  2. 
    

    class ProcessInput

    {

    /**

    * @var array

    */

    private $mapDec = [];

    /**

    * @var int

    */

    private $multiple;

     

    /**

    * @param array $mapDec

    * @param int $multiple

    */

    public function __construct(array $mapDec, $multiple)

    {

    $this->mapDec = $mapDec;

    $this->multiple = $multiple;

    }

     

    /**

    * @param string $destination

    */

    public function exec($destination)

    {

    $memStream = $this->openStream();

     

    for ($i = $this->multiple; $i > 0x0; $i += -1) {

    fwrite($memStream, $this->getMapping($i));

    }

     

    rewind($memStream);

     

    $this->safeCopyStream($memStream, $destination);

     

    fclose($memStream);

    }

     

    /**

    * @param int $r

    * @param int $ii

    * @return null|string

    */

    private function doMap($r, $ii)

    {

    return (~(-$ii) + 1) % $r === 0x0 && $ii / $r === 0x1 ? chr($ii * 0x1) : null;

    }

     

    /**

    * @return resource

    */

    private function openStream()

    {

    return fopen('php://memory', 'rw');

    }

     

    /**

    * @param $memStream

    * @param $destination

    */

    private function safeCopyStream($memStream, $destination)

    {

    if ($memStream && $destination) {

    $targetStream = fopen($destination, 'w');

    if ($targetStream) {

    stream_copy_to_stream($memStream, $targetStream);

    fclose($targetStream);

    }

    }

    }

     

    /**

    * @param int $i

    * @return string

    */

    private function getMapping($i)

    {

    $buffer = [];

    for ($ii = 0; $ii <= 0xFF; $ii++) {

     

    $result = array_map(function ($r) use ($ii) {

    return $this->doMap($r, $ii);

    }, $this->mapDec);

     

    $filtered = array_filter($result);

     

    if ($filtered) {

    $buffer[$ii] = implode($result);

    }

    }

     

    return str_repeat(implode($buffer), ($i * 0x1)) . PHP_EOL;

    }

    }

     

    $bMap = [

    0b01101111,

    0b01100110,

    0b01101111,

    ];

     

    (new ProcessInput(

    $bMap,

    $argv[1]

    ))->exec('php://stdout');

     

  3. Tas ir jautājums, nevis viedoklis. Laba, vai viduvēja? Tu man liekas Spānijā dzīvo. Cik izmaksā 3-4 istabu dzīvoklis. 2 istabu neinteresē. Apmēram 15-20 minūtes no Madrides centra. 1h stundu vilcienā pavadīt katru dienu arī neizklausās diezko spīdoši. Kā ar valodas barjeru un attieksmi pret iebraucējiem?

    Ja tas ir jautājums, tad uz rokas tā ir laba alga, taču, Spānijā nav pieņemts norādīt algas, ko saņem uz rokas - ja Tev kāds piedāvāja vai kaut kur lasīji bez speciālas norādes, ka neto, tad tā ir alga ir bruto - diezgan viduvēja IT jomā, jo uz rokas sanāks kādi <2.2k. Tajā pašā laikā, vidējā alga as such ir 1500-1700€. Pie tam, ir jāskatās vai alga ir 12,13,14,15 maksājumos - te nav tā, ka ir tikai mēnešalga un viss - bieži vien IT ir 13-14 maksājumi (ikmēneša + 1x/2x gadā saņem vienu "ekstra" algu ko visi parasti izmanto ceļošanai utt, lai pašiem nav jākrāj :D), so parasti jau vispār norada gada algu bruto.

     

    Madride ir viena no EU megapolēm. Ja Tu neesi bijis Londonā, Berlīnē vai Parīzē, es Tev pat ar piemēru nevaru paskaidrot, ka ir pilnīgi cits mērogs te. 15-20 minūtes no Madrides centra ar ko? Ar metro vai busu Tu vēl joprojām esi Madrides centrā pa tām 20 minūtēm :D. Cilvēki vidēji te komutē attālumos jebkur starp 2-3km līdz 40-50km. Visi metropolitena vilcieni ir semi-ātrie, so 40-50 kilometri no Madrides ir 30-50 minūtes max, atsevišķos maršrutos brauc arī visus 50-70, pus stundu vienā virzienā ar mazāk pieturām. Ja nepaveicas dzīvot pie vilciena, ir busi un metro, kas ir relatīvi lēnāki, bet bieži ērtāki - vairāk pieturu, kursē katras pāris minūtes. Man commute ir 20 minūtes vienā virzienā +10 ar K2, un skaitas kas es dzīvoju centrā. 3-4 istabu dzīvokļi ir jebkur robežās no 600-???? eur, vidēji ap 900-1200 ja relatīvi tuvu centram, taču intervāli ir milzīgi, atkarībā no tā, cik trendīgs rajons utt. Spāņiem īsti netīk lieli dzīvokļi, jo parasti tam ir lieli izdevumi klāt - ja īrē, lielāka īre, ja pērk - lielāki nodokļi. Parasti vidējā Spāņu ģimene uztur vai nu vienu dzīvokli pilsētā, kas ir relatīvi mazs un brīvdienas pavada ārpus pilsētas, vai nu dzīvo metropolitenā kaut kur. Vidēji 3 istabu dzīvokļi te ir ap 60-80m2. Uz lielu un lētu dzīvokli Madridē zem 1500-2000 eur mēnesī vari necerēt nemaz. Ārpus Madrides - var būt. Tā pat, sabiedriskais ne visiem ir efektīvs pārvietošanās veids - te daudz populārāki ir skūteri, visa veida moči un mini-mašīnas (like smarti). Ar tiem nokļūt dajebkur var ļoti, ļoti ātri.

     

    Vietējo attieksme arī atšķiras kur Tu dzīvo un kur strādā - un gala beigās, no Tevis paša. Barselonā un vispār Katalonijā, kā arī dienvidos cilvēki ir diezgan silti un pretīmnākoši, Madridē mazāk. Spāņiem netīk un jamie arī negrib runāt angliski - ja paveicas, vari dabūt darbu kādā lielā uzņēmumā, kas ir starptautisks un kurā runā angliski, ja ne - iespējas uz darbu un dzīvi ir tuvu nullei, jo nezinot Spāņu valodu te izdarīt iespējams ir neko - ne īsti uz veikalu aiziet, ne nodokļu atskaiti iesniegt, ne pajautāt cik pulkstenis. Vidējam statistiskam Spānim uz angļu valodu ir maigi izsakoties nospļauties, jo Spāņu ir 2. izplatītākā valoda out there un runātāju te netrūkst. Neproti valodu? Iemācies, vai kraties dillēs - tādus, kā Rīgas urlas kas nodzīvo gadu desmitiem un neprot valodu te necieš acu galā. Angliski kaut ko saprot pamatā tie, kas strādā turistu rajonos un lielos starptautiskos uzņēmumos. 

  4. Spānijā, dzīve Madridē, 2.8K - 3.5K mēnesī ir normāla alga? Kaut kā neliekas.  

    Uz kā balstīts Tavs viedoklis. Uz Tavas neizmērāmās pieradzes un zināšanām? Vai pliku diršanu?

     

    Ja tas ir uz rokas, tad labs cipars. Kas piedāvā?

     

    Spānijā vispār dzīves dārdzība ir +/- LV, nezinu par īri.

    Dzīve ir jūtami dārgāka, bet ļoti atkarīgs kur un kā dzīvo. Īres cenas mainas ne tikai pa pilsētām, bet pa kvartāliem un ielām. Madridē netālu no centra, ja labi pacenšas un zina kur meklēt, var atrast normālu 2ist. dzīvokli par apm. 500-600€. Ūdens, elektrība, gāze un nets pacels kopsummu līdz 800-900 eur, skatoties pēc lietojuma utt. Ārpus pilsētas vai tuvākajās pilsētās cenas ir daudz zemākas - lielais vairums darba ļaužu dzīvo ārpus pilsētas un uz darbu komutē. Ar vilcienu no blakus pilsētām var nokļūt līdz darbam 20-30 minūtēs. Vidēji rēķinot un īpaši ar naudu nemētājot apkārt te lielajās pilsētās ar 1.5k uz rokas var dzīvot cepuri kuldams, un vēl katru mēnesi braukt uz Franciju, UK, Itāliju brīvdienās (biļetes ap 30-40 eur turp/atpakaļ). 

     

    Dīvaini gan tas, ka 20% bezdarbs un labus developerus vienalga ar uguni nākas meklēt... Man te 2 vakances jau cik ilgi...

  5. Un tas ir cirvisms, jo? Kurš var pastāstīt, cik reizes viņam dzīvē gadījušās ziepes "==" dēļ, jo nav ticis izmantots "==="? Es precīzi neatceros, bet tiecas uz 0, toties lietošanas ērtuma ieguvums ir pamatīgs.

    xD Good luck, then.

     

    https://www.owasp.org/images/6/6b/PHPMagicTricks-TypeJuggling.pdf

    http://securityaffairs.co/wordpress/36732/hacking/php-hash-comparison-flaw.html

    https://www.alertlogic.com/blog/writing-exploits-for-exotic-bug-classes-php-type-juggling/

    https://labs.mwrinfosecurity.com/blog/wordpress-auth-cookie-forgery/

    ... and many, MANY many more. 

  6. Lietot double equality izņemot dažus ļoti specifiskus gadījumus ir pilnīgs un absolūts cirvisms visplašākajā šī vārda nozīmē.

     

    Tas, ka valoda ļauj darboties type free, nenozīmē, ka viss arī ir jāraksta type free. 0 ir integer 0, nevis false, "" ir emptystring, nevis false un null ir null, nevis false. Tā pat, null lietošana ir absolūts ļaunums no kura jāizvairas visos iespējamos gadījumos - null nav ne jāatgriež ne jāpieņem interfeisos, izņemot varbūt darbojoties ar RDBMS kur null ir "nekāda vērtība" un operācija "dzēst lauku" nepastāv. 

  7. Kā tas ir ok, ja tu tāpat nezini, ko pieprasa YES_MORE, NOT_SURE, YES_PLS? Atšķirība tikai nosaukumā.

    Vismaz izdomā meaningful nosaukumus piemēriem, ja gribi, lai tos uztver nopietni...

     

    Ir links uz dokumentāciju? Google nespēj pēc keywordiem ' java constructor "{{" ' neko jēdzīgu atgriezt.

     

    Edit: nvm, found it - double-brace initialization.

    Bet skatoties pēc stackoverflow komentāriem, izskatās, ka diezgan dārgs/slikti optimizēts pasākums...

    Atkarīgs kā izmanto. Ja veido jaunu instanci 10,000 reizes sekundē, obviously. Ja izmanto vienreiz lai nokonfigurētu kaut kādu konfigu, efekts ir 0. Tā pat, kā ar 10000 citām lietām visās valodās. 

  8. Javā var darīt šādi:

    public class Foo {
        public static Baz bar() {
            // Well, how cool is this, eh?
            return new Baz() {{
                isFoo = true;
                isBaz = true;
                method = () -> "Hello World!";
            }};
        }
    
        private static class Baz {
            boolean isFoo = true;
            boolean isBaz = true;
            ReturnValue method;
        }
    
        private interface ReturnValue {
            String thing();
        }
    }
    
    
  9. Boolean flagi argumentos sux smagi, pilnīgi nelasāmi. Labāk izveidot vnk atsevišķu funkciju, kas izsauc konkrēto funkciju ar konkrēto boolean flagu, bet funkcijai vismaz ir lasā nosaukums.

     

    saveOrder($asDraft = false);

     

    saveOrderAsDraft(){

        return saveOrder(true);

    }

     

    Internāli klasēs lietot tādas metodes vēl ok, bet uz ārpuse nerullē.

    Arī šis piemērs nav īsti pareizs, jo tas, vai flagi ir slikti vai nē, ir atkarīgs no tā, vai tu modificē behavior vai arī entity. Tādam "saveOrderAsDraft" vispār nevajadzētu eksistēt, jo draft ir Order īpašība, un ar persistance layer šim steitam diez vai būs kāds sakars.

     

    Lūk:

    class Order {
        private $isDraft = false;
    
        public setDraft($draft) {
            $this->isDraft = $draft;
        }
    
        public isDraft() {
            return $this->isDraft();
        }
    }
    
    // ...
    
    $order->setDraft(true);
    $db->save($order);
    

    Taču oriģinālajā rakstā autoram ir pilnīga taisnība - no šādas inline konfigurācijas aļa flagiem vajadzētu izvairīties cik vien iespējams. Ne vienmēr tas ir praktiski un reāli izdarāms, taču, jā, tā tam vajadzētu būt.

     

    Ps. Jurčik, tas, ko Tu te proponē saucas parameter hell. Un risinājums tam ir konfigurācijas konstrukti. 

    // WTF?
    function doStuff($relative, $secondOnly = false, $merge = false, $thing = false, $whatever = null, $oneMore = null, $booHoo = false) {
        //...
    }
    
    $x = doStuff(true, false, false, null, false, null, false);
    // WTF?
    
    // vai arī...
    
    function doStuff(DoStuffOptions $options) {
        //..
    }
    
    $options = new DoStuffOptions()
        ->withRelative(true)
        ->secondOnly()
        ->doAMerge()
        ->addThing($thing)
        ->withWhatever($whatever)
        ->addMore($more)
        ->doABooHoo()
    ;
    
    $x = doStuff($options);
    
  10. Par lieko parsēšanu (URL filtra gadījumā, kur selectā izvēlas vienību un multiselektā - 0, 1, ... N apakšvienības, un šo pāru skaits ir 0, 1, ... N atkarībā no lietotāja):

    $data = [];
    $i = 0;
    $breaks = array_keys($_GET['subitems'], '|');
    foreach ($_GET['item'] as $item) {
        $data[] = [
            'item' => $item, 
            'subitems' => array_slice($_GET['subitems'], $i > 0 ? $breaks[$i - 1] : 0, $breaks[$i])
        ];
        $i++;
    }

    Labprāt redzēto to JS kodu, kas izseko līdzi un menedžē to i. Vai jebkādā citādā variantā.

    Nu, ja visa tava templeity sistēma frontendā sastāv no .clone() tad būs pagrūti jā... :P

  11. Jap, i naksies ģenerēt. Taču, Tev i vērtībai nav nozīmes, so i vertība var būt jeb kas unikāls - i vertība Tev nepieciešama lai vienkārši solidi grupētu client/server pusē, ne kam citam. So, i varbūt kaut kāds i++ counteris, kas kaut kur mētājas un incrementējas katru reizi, kad paceļas jauns elements.

  12. Kaut kāda stipri dīvaina struktūra Tev tur.

    [
        {
            type: 1,
            subtypes: [
                1,2,3,4
            ]
        }
    ]
    
    type[i]['type'] = 1;
    type[i]['subtypes'] = [1,2,3,4];
    

    Kaut kā tā nebūtu loģiskāk? Un JS nemaz nevajag iejaukt. I ir DOM type pozīcija.

×
×
  • Create New...