Hirdetés

Új hozzászólás Aktív témák

  • trisztan94

    őstag

    Hali!

    Még mindig a térképes alkalmazáson dolgozom, amivel bénáztam a weblap készítés topikban. Most csak egy egyszerű kérdésem lenne. Van egy form, amit ha felad a felhasználó, kiszedi az adatokat az input mezőkből (címeket), azt pedig elküldi egy aszinkron függvénynek, ami utólag feltölt vele egy tömböt.

    Jelenleg még csak két input mezővel tesztelem:

    [OFF]<div class="form-group waypoint-container">
    <label for="waypoints" class="col-md-1 control-label">1.</label>
    <div class="col-md-11">
    [/OFF] <input type="text" name="waypoints[]" class="form-control form-control-square waypoint" placeholder="Indulási hely" />
    [OFF] </div>
    </div>
    <div class="form-group waypoint-container last-waypoint-container">
    <label for="waypoints" class="col-md-1 control-label">2.</label>
    <div class="col-md-11">[/OFF]
    <input type="text" name="waypoints[]" class="form-control form-control-square waypoint" placeholder="Érkezési hely" />
    [OFF] </div>
    </div>[/OFF]

    Itt a form submit eseményre rakott eseménykezelőm:

    $('.form-directions').on('submit', function () {
    $('.waypoint').each(function () {
    getDrivingDirections($(this).val());
    });
    return false;
    });

    A getDrivingDirections függvény alapvetően két dolgot csinál: első körben geocode-olja (magyarul "geokód"?) a beírt adatokat, hogy GPS koordinátákkal tudjunk dolgozni. Amikor megkaptuk a koordinátákat, akkor pedig tervez rá egy útvonalat a megadott paraméterekkel. Tehát a getDrivingDirections függvény két másik függvényt hív meg: geoCode() és planRoute(). Egyelőre még csak a geoCode függvény implementálásánál tartok.

    Tehát miután meghívtuk a getDrivingDirections-t, meghívódik a geoCode():

    function geoCode (address) {
    nokia.places.search.manager.findPlaces({
    searchTerm: address,
    onComplete: onGeoCodingCompleted,
    searchCenter: map.center
    });
    }

    Ez végül meghívja amikor végetért az aszinkron feladat az onGeoCodingCompleted függvényt:

    function onGeoCodingCompleted(data, requestStatus, requestId) {
    if (requestStatus == "OK") {
    var locations = data.results.items;

    waypoints.push(locations[0].position);
    for (var i = 0; i < waypoints.length; i++) {
    console.log(waypoints[i]);
    }
    } else if (requestStatus == "ERROR") {
    alert("hiba");
    }
    }

    Na és most jönne a tényleges kérdés. A console.log 3 objektumot ad vissza mindig, pedig csak két input mező van. Mindig az első input mezőt logolja kétszer:

    Miért?

    (Azért írtam le így az egész működést, mert biztosan lesznek még kérdéseim ezzel kapcsolatban, így ezt megelőlegeztem magamnak :DDD)

    https://heureka-kreativ.hu

  • trisztan94

    őstag

    Még egy kérdésem lenne.

    Hogyan tudom figyelni, hogy mikor van meg az összes beírt megálló GPS koordinátája, tehát, hogy mikor fejeződött be az összes aszinkron feladat?

    Nyilván itt az lenne a lényeg, hogy akkor lépjen csak be az útvonaltervezés függvényébe, ha már megvan az összes koordináta.

    https://heureka-kreativ.hu

  • Jim-Y

    veterán

    válasz trisztan94 #3952 üzenetére

    például egy boolean property segítségével. Amin most én dolgozom, ott Future-ök vannak, az aszinkron fv callbackje egy ilyen Future objektumot ad vissza amire lehet hívni .then()-t és ebben a callback-ben át lehet billenteni azt a property-t, ugyanis a then csak akkor hajtódik végre, ha az aszinkron kommunikációnak vége. Ez a te esetedben annyit jelent, hogy csinálj valahol egy, az aszinkron kommunikációra nézve globális property-t, majd sikeres response esetén billentsd át az értékét.

    Egyébként javaslom keress rá a js promise-ra. Én még nem dolgoztam vele, de tudtommal jó cucc :)

  • Sk8erPeter

    nagyúr

    válasz trisztan94 #3951 üzenetére

    Nem tudom, ezt hogy lehetett ilyen bonyolultan leírni, nekem 3-szor kellett elolvasnom, hogy felfogjam. :DDD

    Ez kábé a látatlanban debuggolhatatlan kategória. Mi van a waypoints tömbben, amibe pusholod a locations[0].positiont? Azután van egy for ciklus, aminek során kétszer íródik ki ugyanaz az elem, meg kéne nézni, a push előtt nincs-e már benne eleve az az elem, ami duplikálódk. Ennél konkrétabbat akkor tudnánk mondani neked, ha láthatnánk valami működő példát.

    Sk8erPeter

  • trisztan94

    őstag

    válasz Jim-Y #3953 üzenetére

    Bocsi, hogy csak most válaszolok.

    Végül sikerült megoldani future objektumokkal... vagyis... sort of.

    Ez a végleges megoldás, lehet, hogy gány, de egyelőre működik, bőven elég. Tudok végre haladni.

    $('.form-directions').on('submit', function () {
    waypoints = [];
    promises = [];
    $('.waypoint').each(function () {
    promises.push(geoCode($(this).val()));
    });
    return false;
    });

    function geoCode(address) {
    var deferred = $.Deferred();
    nokia.places.search.manager.findPlaces({
    searchTerm: address,
    onComplete: function (data, requestStatus, requestId) {
    onGeoCodingCompleted(data, requestStatus, requestId);
    deferred.resolve();
    },
    searchCenter: map.center
    });
    return deferred.promise();
    }

    Az onGeoCodingComplete függvényben nem változik semmi, csak ezt az egy plusz sort raktam bele:

    if (waypoints.length == promises.length / 2) {
    drivingDirections();
    }

    Na most azért lett osztva a promises tömb kettővel, mert valamiért minden esetben a waypoints tömb elemeinek számának kétszerese volt benne. Tehát mindent 2x vett.

    Tehát annyi a kérdés, hogy miért van a promises tömbben 2x annyi elem, mint a waypoints tömbben? :F

    https://heureka-kreativ.hu

  • martonx

    veterán

    válasz trisztan94 #3955 üzenetére

    Szerinted a bedobott kódod alapján honnan tudjuk?

    Én kérek elnézést!

  • fordfairlane

    veterán

    válasz trisztan94 #3955 üzenetére

    Tehát annyi a kérdés, hogy miért van a promises tömbben 2x annyi elem, mint a waypoints tömbben?

    Globális változók. A jóég tudja ennyiből megállapítani. "use strict"

    x gon' give it to ya

  • szabo.norbi

    tag

    Tudom, hogy nem ide való de hátha tudtok segíteni!

    Ezt a feladatot kellene megoldanom:

    1. Hozza létre a lotto nevû tömböt, a lotto.txt alapján. Hat sor, soronként 5 szám.
    2. Generálja a 7. hét lottó számait. [1,90]
    3 Írassa ki az így kapott tömböt[7][5] a képernyõre.
    4. Hány darab 50-tõl nagyobb szám lett generálva?
    5. Melyik a legkisebb generált szám?
    6. Szerepel-e a 19-es szám a kihúzott számok között?

    7. Készítsen kimutatást:
    a) Adja össze oszlopokat
    pl:
    37 42 44 61 62
    18 42 54 83 89
    5 12 31 53 60
    1 28 47 56 70
    54 56 57 59 71
    7 21 33 39 86
    9 22 32 78 89
    Az 1.oszlop összege = 135
    a 2.oszlop összege = 223
    stb

    +azt elfelejtettem, hogy netbeans-ben kellene. :))

    [ Szerkesztve ]

    Az „érintett” és az „elkötelezett” közötti különbséget legjobban a sonkás tojásrántottával mutathatjuk be:a csirke „érintett”, a disznó viszont ”elkötelezett”! /// iPhone 6

  • martonx

    veterán

    válasz szabo.norbi #3958 üzenetére

    várjuk a jsfiddle példádat, hogy hol a hiba a kész kódodban.

    Én kérek elnézést!

  • Karma

    félisten

    válasz szabo.norbi #3958 üzenetére

    JavaScript nyelven kellene? Vagy valami másban?
    Ugyanis ha nem JS, akkor nem tényleg nem ide való... :U

    A programozás topik összefoglalóján keresztül megtalálod a többi topikot, a megfelelőbe tedd fel inkább a kérdést.

    “All nothings are not equal.”

  • trisztan94

    őstag

    válasz szabo.norbi #3958 üzenetére

    Vicces fiú vagy. :U

    Karma: szvsz azt akarja, hogy csináljuk meg neki.

    [ Szerkesztve ]

    https://heureka-kreativ.hu

  • szabo.norbi

    tag

    válasz Karma #3960 üzenetére

    Rendben, köszönöm!

    trisztan94:Nem lehet mindenki "zseni". :))

    [ Szerkesztve ]

    Az „érintett” és az „elkötelezett” közötti különbséget legjobban a sonkás tojásrántottával mutathatjuk be:a csirke „érintett”, a disznó viszont ”elkötelezett”! /// iPhone 6

  • The DJ

    addikt

    A Bitstamp tickert szeretném megjeleníteni egy weboldalon, de nem akar működni. Valaki látja, hogy hol a hiba? A konzol syntax errort dob a 25. sorban, de nem látom mi a baj.

    JSFiddle: [link]

    https://wpszaki.hu - Minden, ami WordPress, cikkek kezdőknek és haladóknak.

  • wis

    tag

    válasz The DJ #3963 üzenetére

    Így már lefut: [link]

    Csak most előjött a Same-origin policy probléma. Tehát ajax-szal nem tölthetsz le adatokat másik domainról ha az nem ad rá engedélyt.
    Viszont azt megteheted, hogy szerver oldalon intézel kérést az oldal felé és a szkripted a szerver oldali kódoddal kommunikál.

  • The DJ

    addikt

    válasz wis #3964 üzenetére

    Köszönöm!
    Tovább próbálkozom vele más megközelítésből.

    https://wpszaki.hu - Minden, ami WordPress, cikkek kezdőknek és haladóknak.

  • cSuwwi

    aktív tag

    válasz The DJ #3965 üzenetére

    mondanám hogy jsonp (json padding) de ez is a szervertől függ
    de van websocket api, írd át arra, és realtime frissül is

  • trisztan94

    őstag

    Hello!

    for (var key in JSON) {
    if(parseFloat(JSON[key][3])>0 && parseFloat(JSON[key][4])>0) {

    if (parseInt(key) === 1){

    }
    else if(parseInt(key) === Object.size(JSON)) {

    }
    else { }
    }
    }

    Itt három dologra kell figyelni:
    1. ha a key értéke az első elem
    2. ha a key értéke az utolsó elem
    3. ha a key értéke más, tehát köztes szám

    A 2. és 3. rész készen van, viszont az 1.-re nem nagyon jut eszembe semmi. Az a lényeg, hogy nem biztos, hogy az 1. vagy 2., vagy akár 3. lesz az első ami átmegy az első elágazáson. Tehát nekem az az elem kell, ami először megy át a fenti if()-en.

    Hogyan kellene ezt? :F

    https://heureka-kreativ.hu

  • martonx

    veterán

    válasz trisztan94 #3968 üzenetére

    Esetleg valami normális jsfiddle példával szemléltetnéd, hogy mit is szeretnél?

    Én kérek elnézést!

  • Jim-Y

    veterán

    válasz trisztan94 #3968 üzenetére

    Hát, ha nem for in -nel csinálnád, akkor az indextől függően kimenthetnéd az első elemet, vagy használhatsz egy flaget is erre a célra.

  • trisztan94

    őstag

    válasz martonx #3969 üzenetére

    Hat igazabol nem nagyon tudom.

    Az a lenyeg, hogy amikor meghivjuk a fgvt akkor atadunk neki egy bazi nagy JSON tombot, amiben utvonal adatok vannak (kkordinatak, megnevezes, kozeli helyek, stb).
    Az elso elagazas azt ellenorzi, hogy a lat es long koordinatak benne vannak-e.

    Ami az elso es utolso elem, az lesz a kezdopont es vegpont, a koztuk levok pedig a megallok.

    Jim-Y
    Jaja a flagre mar en is gondoltam. Berakok egy boolean valtozot false ertekkel, es egyszeruen azt nezem, hogy igaz-e. Akkor lesz igaz, amikor a kulso elagazasbol belep, tehat egyszer fog csak valtozni az erteke.

    [ Szerkesztve ]

    https://heureka-kreativ.hu

  • Jim-Y

    veterán

    válasz trisztan94 #3971 üzenetére

    Amúgy arra nem gondoltál, hogy csinálsz egy mondjuk Checkpoint nevű osztályt, amiben szerepelni fog minden adat egy csomópontról, illetve két példányváltozó, egy isStart, illetve egy isFinish, és a kezdő, és végpontoknál ezt simán átbillented?! Egyrészt akkor olvashatóbb lenne a kódod, másrészt szerintem logikusabb is :)

    Ekkor kb ilyenre változna a kódod:

    for (var checkpoint in checkpoints) {
    if (checkpoint.lat >0 && checkpoint.lng >0 ) {

    if ( checkpoint.isStart ){

    }
    else if( checkpoint.isFinish ) {

    }
    else { }
    }
    }

    [ Szerkesztve ]

  • Sk8erPeter

    nagyúr

    válasz trisztan94 #3968 üzenetére

    Biztos velem van a baj, de én ezeken a kódokon nem tudok kiigazodni, meg nem vágom, hogy készülnek ezek, és miért így. Semmit nem fejez ki a kód az elvárt struktúráról, nincs benne megkötés, normális hibaellenőrzés, és igazából a kódból nem értem meg, mi a cél.
    Igazából ha egy rövid jó leírást kaphatnánk magáról a feladatról, meg a kapott adatstruktúra konkrét felépítéséről, akkor lehet, hogy tudnánk javasolni alternatív megoldást, ami szebb kódot eredményezne. (Azt is kéne tudni, tudsz-e változtatni a kapott adatstuktúrán, vagy arra nincs lehetőséged, mert nem te rakod össze.) Ebben a formában eléggé tákolás feelingje van a dolognak.

    Sk8erPeter

  • Jim-Y

    veterán

    Sziasztok. Tök új vagyok SOAP-hoz.

    node-dal szeretnék csinálni egy kliens-szerver példát. A kliensem megvan, kipróbáltam, működik. Jelenleg egy élő webservice-re csináltam meg, mert úgy ítéltem meg, hogy a klienst könnyebb megírni :)

    var soap = require('soap');
    var url = 'http://www.webservicex.net/CurrencyConvertor.asmx?WSDL';
    var args = {FromCurrency: "HUF", ToCurrency: "EUR"};
    soap.createClient(url, function(err, client) {
    client.ConversionRate(args, function(err, rate) {
    console.log(rate); // 0.0032 tadaam
    });
    });

    Utána álltam volna neki a szervernek, ezt a soap-server modullal próbáltam -> [link]

    Igenám, de arról egy rohadt szó nem esik, hogy a WSDL fájlt hova, mikor, mire, minek? Szóval értitek, halvány lila gőzöm nincs, hogy a wsdl fájlal mit kell csinálni :/ :D

    Eddig ennyi van meg:

    var soap = require('soap-server');

    var names = ["Attila", "Gábor", "Péter", "Bálint", "Gergő"];

    function RandomNameService(){}

    RandomNameService.prototype.getRandomName = function(){
    return names[Math.floor(Math.random()*5)];
    };

    var soapServer = new soap.SoapServer();
    var soapService = soapServer.addService('randomNameService', new RandomNameService());

    soapServer.listen(1337, '127.0.0.1');

    A neten se írnák ám le, hogy a wsdl fájlt hova kell tenni, hogy kell pontosan létrehozni etc :S

    Az lenne még az ötletem, hogy megcsinálom a wsdl fájlt, azt kiszolgálom a klienseknek, a kliensek azt így elérik: http://127.0.0.1:1337/randomNameService?wsdl , ebben definiálva vannak az elérhető szervizek, amiket utána a kliensek már meg tudnak hívni.

    [ Szerkesztve ]

  • Karma

    félisten

    válasz Jim-Y #3974 üzenetére

    A WSDL-t a szerver szokta automatikusan generálni az általa ismert metódusok alapján. Az oldal alapján itt is ez történik, amikor ?wsdl queryvel hívod meg az URL-jét. Node alatt még nem csináltam ilyesmit.

    [ Szerkesztve ]

    “All nothings are not equal.”

  • Jim-Y

    veterán

    válasz Karma #3975 üzenetére

    aha.. hát ez nem történik meg :D Mármint nem generál wsdl-t ... most két modulból építkezem:

    Itt már van egy kis információcsíra arra, hogy hogyan szolgáljam ki a wsdl-t a kliensnek. Ellenben nincs WSDL példa.

    Itt van wsdl példa, de nem írja le, hogy hogyan szolgáljam ki a wsdl-t :)

    Most pont egy olyan WSDL-t próbálok írni, ami megfelel az első linken lévő soroknak, de van ami megzavar :(

    Konkrétan:

    var myService = {
    MyService: {
    MyPort: {
    getRandomName: function() {
    return names[Math.floor(Math.random()*5)];
    }
    }
    }
    }

    Itt a port és a service mintha fel lenne cserélve, ugyanis a wsdl-ben meg pont fordított sorrendben kell írni:

    <portType name="randomNameService">
    <operation name="getRandomName">
    <input message="tns:getRandomName"/>
    <output message="tns:returns_name"/>
    </operation>
    </portType>

    Az is jó lenne, ha rájönnék, hogy a fentebbi xml szeletnek milyen js objektum/függvény ? felel meg?

  • Karma

    félisten

    válasz Jim-Y #3976 üzenetére

    Akkor valamit nagyon rosszul tartasz, mert én lemásoltam a példakódot kis módosításokkal, és létre is jött a service meg a WSDL is.

    C:\Users\Zsolt\Documents\soaptest>node
    > var soap = require('soap-server');
    undefined
    > function test() {
    ... test.prototype.hello = function(name) {
    ..... return "Hello" + (name || "World") + "!";
    ..... }
    ... }
    undefined
    > var server = new soap.SoapServer();
    undefined
    > var service = server.addService('helloService', new test());
    undefined
    > server.listen(1337, '127.0.0.1');
    undefined

    Ezután a http://127.0.0.1:1337/helloService?wsdl linken bejött a WSDL (kimásoltam).

    [ Szerkesztve ]

    “All nothings are not equal.”

  • Karma

    félisten

    válasz Karma #3977 üzenetére

    Na jó, elkiabáltam kicsit, mert működni annyira nem akar utána :P SoapUI-jal próbálok ráakaszkodni, eddig kevés sikerrel. Az egész Node shellt bedöntötte.

    “All nothings are not equal.”

  • Jim-Y

    veterán

    válasz Karma #3978 üzenetére

    Már amit a honlapon írnak példát, sem azt a wsdl-t generálja, mint amit a tutorialban írnak :(

    Karma: szerintem az lesz a járható út, hogy az ember magának csinál egy wsdl-t (nyílván generál), azt kiszolgálja, és úgy már működhet.

    [ Szerkesztve ]

  • Karma

    félisten

    válasz Jim-Y #3979 üzenetére

    Meg utána toszik működni, se VS2013-ból, se SoapUI-ból nem tudok ráhívni. Mondjuk 0.1.0, amit egyszer valaki kinyomott és azóta nem nyúlt hozzá...

    Szerintem meg ez a szerver modul sose fog működni. Viszont ha meg tudod írni a WSDL-ed, a node-soap már bíztatóbbnak tűnik - legalábbis a kommentek alapján...

    [ Szerkesztve ]

    “All nothings are not equal.”

  • Karma

    félisten

    válasz Jim-Y #3979 üzenetére

    Sikerült összehoznom félig-meddig.

    Ezzel az online WSDL generátorral csináltam a WSDL-t, értelemszerűen kitöltve a mezőket egy Hello World operationhöz. [WSDL].

    Aztán így implementáltam a szervert hozzá:

    var soap = require('soap');
    var http = require('http');

    var helloService = {
    helloworld: {
    helloworld_0: {
    hello: function(args) {
    return {
    message: 'Hello ' + (args.name || 'World') + '!'
    }
    }
    }
    }
    }

    var wsdl = require('fs').readFileSync('hello.wsdl', 'utf8'),
    server = http.createServer(function (req, resp) { resp.end("404 Not found: " + req.url) });

    server.listen(8001);
    soap.listen(server, '/helloService', helloService, wsdl);

    És erre SoapUI-ban rá tudtam csatlakozni, és még helyesen is működött :)

    .NET-ben viszont nincs ekkora szerencsém, ott ProtocolExceptionnel elszáll. A SoapUI mock service-ével, amit ugyanebből a WSDL-ből generáltam, simán működik viszont.

    ---

    Nekem nagyon az az érzésem, mint Android kapcsán is, hogy a SOAP egy régi idők letűnt megoldása, amit a mostani eszközökkel már nem kéne erőltetni. Akkor már egyszerűbb egy .NET/Java frontendet elérakni, ami JSON-re fordít mindent...

    “All nothings are not equal.”

  • Jim-Y

    veterán

    válasz Karma #3981 üzenetére

    Koszi. Igen ezt megtalaltam en is. Generaltattam is vele. Csak nalam nem sikerult osszeloni a javascriptes service strukturat a generalt wsdl-el:/ Este megnezem a megoldasod. Meg egyszer koszi :R megj: nekem is hasonloak az erzeseim a soap kapcsan mint neked. De az lenne a lenyeg, hogy lassak ilyet is:-) Csinaltam restes web servicet is, de azzal nem voltak problemak. Igazan egyszeru volt osszehozni.

  • Karma

    félisten

    válasz Jim-Y #3982 üzenetére

    Ha önszivatáson kívül tényleg látni akarsz ilyet, akkor javaslom Java alatt a CXF-et, .NET-nél meg a WCF-et. A valóságban úgyis ehhez hasonló szintű eszközök vannak a SOAP mögött - és még csak nem is nehéz használni őket alapszinten.

    Illetve a magyar intraneteken előfordul az Axis 1.4 még mindig, pedig az általa használt kódolást már semmi se támogatja... Az külön élmény önmagában is.

    [ Szerkesztve ]

    “All nothings are not equal.”

  • martonx

    veterán

    válasz Karma #3981 üzenetére

    "a SOAP egy régi idők letűnt megoldása, amit a mostani eszközökkel már nem kéne erőltetni"

    Messzemenőkig egyetértek. Nekem a SOAP-pal a legnagyobb bajom, hogy nagyon nem kompatibilis, ahány nyelven, ahányféle SOAP megoldást használ az ember, annyiféle kimenetele lehet a dolognak. Plusz xml-ben kommunikál, aminél a Json már sokkal fejlettebb, tömörebb.
    Megérett az elfeledésre, azonban sajnos még mindig rengeteg régi, jól beágyazott cucc ezt használja :(

    Én kérek elnézést!

  • Sk8erPeter

    nagyúr

    válasz Karma #3981 üzenetére

    "Nekem nagyon az az érzésem, mint Android kapcsán is, hogy a SOAP egy régi idők letűnt megoldása, amit a mostani eszközökkel már nem kéne erőltetni."
    Én is egyetértek a SOAP-os résszel, és amit martonx mond, az is igaz, ahány eszköz/nyelv, annyiféle kimenet, annyiféle idióta hiba.
    Mondjuk az is hozzátartozik, hogy én különösen PHP+NuSOAP-pal való generálgatás során gyűlöltem meg (itt van szenvedéseim egy lenyomata), ezért természetesen már önmagában a PHP is hibáztatható, mint gyengén típusos nyelv (ergo nem lehet vele kattintásra generálni WSDL-t, mint Visual Studio-ban pl. C#-kódból), plusz a NuSOAP is, mint akkoriban elavult, rettentő szarul dokumentált library (nem tudom, most mi a helyzet vele, csak annyit láttam, hogy végül is 2013 júniusában még módosítottak rajta valamit). De az eredeti állításokon ez nem változtat, mert ha másféle library-t használtam, akkor meg más kimenetet kaptam. És akkor meg azt lehetett "debuggolni". Még ez a NuSOAP volt a legkezelhetőbb, amivel AKKORIBAN én találkoztam (azóta nem is SOAP-oztam szerencsére), pedig az elég szomorú (volt akkor mindenképp).

    De az Androiddal kapcsolatos részt nem értettem, hogy mire érted.

    [ Szerkesztve ]

    Sk8erPeter

  • martonx

    veterán

    válasz Sk8erPeter #3985 üzenetére

    Ha jól rémlik a PHP-ban van valamiféle natív SOAP is, bár az talán még rosszabb, mint a nusoap. Tavaly év elején mintha kísérleteztünk volna velük.

    Én kérek elnézést!

  • Karma

    félisten

    válasz Sk8erPeter #3985 üzenetére

    "De az Androiddal kapcsolatos részt nem értettem, hogy mire érted."

    Arra értem, hogy androidos fejlesztéshez túl nehezek azok a libraryk, amiket Java SE/EE alatt használnék, vagy éppen a frameworkből hiányoznak olyan csomagok, amiket aktívan használnának.

    Illetve van olyan Android-specifikus megoldás, ami meg lábbalhajtós: kézzel írod meg minden egyes a requestet és SOAPObject tömbökön iterálgatsz a válasz összegyűjtéséhez...

    Aztán a végén már ott állsz, hogy kézzel formázod össze az envelope-ot és kézzel parsolod ki az XML-ből az anyagot, és jobban jársz... Pedig ezt nagyon rühellem.

    [ Szerkesztve ]

    “All nothings are not equal.”

  • Sk8erPeter

    nagyúr

    válasz Karma #3987 üzenetére

    Hmm, Androiddal kapcsolatban nincs fejlesztői tapasztalatom még, de jó ezeket tudni. Remekül hangzik. :)

    (#3986) martonx :
    Jaja, annak még borzalmasabb a dokumentációja. Legalább a NuSOAP-nak a kódjában található kommentárokból valamelyest ki tudtam következtetni, mi a helyzet. :DDD Ja, egyébként amikor néztem, tehát már 2,5 éve, akkor a kódja is finoman szólva hagyott némi kívánnivalót maga után (eleve vicces, hogy a kódját és az abban található kommenteket kellett tanulmányoznom, mert különben elakadtam). No mindegy, a franc sem akar SOAP-ozni. :) Csak ha muszáj, akkor meg olyan old school, mint manapság kazettán kölcsönadni valakinek egy zenét.

    Sk8erPeter

  • GG888

    senior tag

    válasz Karma #3987 üzenetére

    CRM 2011-hez bent a cégnél pont SOAP-pal ismerkedem/szívok.
    Mostmár tudom hova jöjjek ha elakadok :D

    pcmodding.hu | PC MODDING | Minden, ami modding, verhetetlen árak.

  • r4z

    nagyúr

    Sziasztok!

    Lenne egy elég összetett problémám.
    Adott egy XML adatbázis, amiből egy HTML táblázatba gyűjtöttem ki az adatokat jQueryvel. Eddig minden jól ment. Azonban minden elemhez tartozik két string típusú változó (str1 és str2), amikre igaz, hogy str1 és str2 első néhány karaktere megegyezik, az egyező részt kell kivennem sz str2 stringből.

    Ezt a két stringet kéne összehasonlítania egy (szerintem) while ciklusnak, és kiköpnie egy i-t, ahol az i annak a karakternek a sorszáma, ami utolsóként megegyezik a két stringben. Ezzel az i-vel substringgel már el tudnám választani a str2 két részét. A segítségeteket kérném a while ciklushoz.

    Példa:

    str1 -- str2 ------ i
    alma -- aluljáró -- 2
    sarok - sarokpolc - 5
    kendő - kender ---- 4

    Ezen kívül egymás utáni rekordokban az str1 megegyezik, és az szeretném, hogy ugyanannyi (legkevesebb) karaktert válasszon ki nekik.
    alma - aluljáró - 2
    alma - almárium - 3
    alma - alváz ---- 2

    Tehát 2 kell eredményül itt.

    [ Szerkesztve ]

    I don't love people. I love 911s, Astral Projection and french fries, in that order.

  • Karma

    félisten

    válasz r4z #3990 üzenetére

    Nem igazán értem a második feladatot...

    De az elsőhöz egy for ciklus kell ami végigmegy 0-tól a rövidebbik string hosszáig vagy ameddig egyeznek az i-edik karakterek.

    [ Szerkesztve ]

    “All nothings are not equal.”

  • Jim-Y

    veterán

    válasz r4z #3990 üzenetére

    Az elsőre egy félkész megoldás lehet például:

    String.prototype.sameUntil = function(other) {
    var cvar = (this.length < other.length ? this.length : other.length);
    for(var i=0; i < cvar; ++i) {
    if(this.charAt(i) != other.charAt(i)) {
    return i;
    }
    }
    return cvar;
    }

    Azért félkész, mert a lehetséges buktatókat nem teszteltem ki, a példa adataidra jól működik, ha egyáltalán nem egyezik, akkor 0-t ad vissza. Illetve feltételezi, hogy az első karaktertől vett egyezést keresünk.

    A második kérdést én sem értem igazán. Itt valahogy mindenképp csoportosítanod kéne az ugyanolyan str1-hez tartozó adatokat. Ha pl egy tömbbe tudod valahogy tenni az alma stringhez tartozó str2-ket, akkor

    var almaArray = ["aluljáró", "almárium", "alváz"];

    console.log(almaArray.map(function(elem) {
    return "alma".sameUntil(elem);
    }).reduce(function(prev, curr) {
    return (prev < curr ? prev : curr);
    }));

    // 2

    De ha objektumba teszed, úgy is meg lehet oldani.

  • r4z

    nagyúr

    válasz Karma #3991 üzenetére

    A másodiknak az a lényege, hogy az egy gyártótól származó italok márkanevei egységesen legyenek kiemelve (igen, ez a jQuery topikban lévő adatbázishoz kapcsolódik). Konkrétabban:

    Gyártó:
    Rockstar Energy
    Italok:
    Rockstar Energy Drink
    Rockstar Punched Guava
    Rockstar Recovery Limonade

    Azt szeretném, hogy az elsőnél ne legyen kiemelve az Energy is, hanem egységesen csak a Rockstar mindnél.

    Ezt a jQuery által lekérdezett ID-k alapján szerintem vissza lehetne keresni, csak ötletem sincs, hogyan kéne. A local- vagy sessionStorage talán segíthet, mondjuk hogy ha eltérő gyártó kerül oda, mint az felgyűlt, akkor hozza csak létre a bejegyzéseket a HTML táblában, és utána a localStorage-et üríti.

    Jim-Y:
    Köszi a kódot, az első biztosan jó lesz, mert mindig ugyanúgy kezdődik a két string. A másodikkal játszadozok picit.

    [ Szerkesztve ]

    I don't love people. I love 911s, Astral Projection and french fries, in that order.

  • Karma

    félisten

    válasz r4z #3993 üzenetére

    Hát, ez egy remek indikátora annak, hogy az adatforrásod nem fain. Nem utólag kéne kitalálnod, hogy egy fulltext mezőnek melyik része a gyártó, és hol kezdődik a termék...

    Legalábbis semmiképp se a JS kódnak, hanem valami köztes résznek amivel a JS kommunikál.

    Nade persze azzal kell főzni, ami van. Nekem is volt már ilyen bemenetem (autótípusok, pl. FIAT BRAVA xxxx yyyy... és ebből a FIAT-ot kellett leválogatnom). Végülis ez ugyanaz, de én shortcutot találtam hozzá: az első szót leveszem, a kéttagú neveket meg kontansként eltettem és kivételként kezelem. A hasznaltauto.hu jó forrás volt.

    [ Szerkesztve ]

    “All nothings are not equal.”

  • Karma

    félisten

    válasz Karma #3994 üzenetére

    De végülis megoldható, ha sorbarendezed az összes nevet, és ahogy végigmész rajtuk ciklusban, figyeled hogy az egyező szakasz szóhatáron ér-e véget (ugyanaz a gyártó), vagy az első szó közben (új gyártó kezdődik).

    Kell egy objektum ahova gyűjtöd az eredményt ( gyártó -> termék[] ), meg az utoljára feldolgozott elem, és mehet.

    Mondjuk az a para, hogy a Rockstar Energy Blue és Rockstar Energy Red stringekből az jön ki, hogy a gyártó "Rockstar Energy" :U

    Fujj de utálom az ilyet...

    [ Szerkesztve ]

    “All nothings are not equal.”

  • Karma

    félisten

    válasz Karma #3995 üzenetére

    Legközelebb lőjetek le hamarabb, ha elkezdek baromságokat írogatni :DDD

    Az előző rant a gyártó meghatározásról irreleváns, mert a "DB"-ben megvan. A feladat egy kis adattranszformálás: csoportosítani a termékeket a gyártó szerint, majd gyártónként megkeresni az egyező szövegek minimumát, és ebből összeállítani egy objektumot, vagy valamit.

    Ez az underscore.js segítségével pofonegyszerű.

    Össze is dobtam JSFiddle-ön. :) Bátorkodtam annyit változtatni, hogy a bemenetet JSON-re átkonvertáltam regexekkel, és kis csalással csempésztem be az inputdata változóba.

    A kimeneten látszik, hogy pl. a Rockstar Energy termékekben a közös rész a "Rockstar ". A 28 Blacknél meg semmi a Schwarze Dose miatt.

    [ Szerkesztve ]

    “All nothings are not equal.”

  • Sasos

    senior tag

    Sziasztok.

    Egy program web felületéhez szeretném hozzáadni a magyar nyelvet. A sztringek fordítása folyamatban, működik is szépen de...
    Adott egy script ami (ha jól értelmezem) megnézi az user oprendszerének nyelvi beállítását, és ha talál hozzá nyelvi fájlt, akkor automatikusan arra állítja be a weblap nyelvét, ha nem talál, akkor angol az alapértelmezett. Ehhez a scripthez hozzá is adtam a magyart (a scriptben lévő egyéb nyelvek alapján HTML ISO kódokat használva), így, ha a legördülőből kiválasztom, akkor dolgozik is szépen magyarul, de automatikusan nem állítja be. Valamint, ha beállítom mondjuk németre, akkor a HTML oldal nyelve is német lesz például a Chrome felismeri, hogy német és felajánlja a fordítást (ez minden nyelv esetén működik), de ha az általam hozzáadott magyart választom akkor az oldal nyelve angol lesz. Rálesne esetleg valaki, hogy hol lehet a gubanc?

    <script type="text/javascript" language="javascript">var g_nUserPlacement;var g_bOverrideUserPlacement=false;var g_nUserType;var aLangArray=OnSetLanguageDefault();var g_bLoggedIn=false;var g_nSessionOkay=0;var g_nSessNoLicRemoteAdmin=905;var g_sUserSessionId="";var LanguageCombo=CreateComboBox(aLangArray[0],aLangArray[1],["$ENGLISH$","$GERMAN$","$ITALIAN$","$FRENCH$","$SPANISH$","$PORTUGUESE$","$SERBIAN$","$SWEDISH$","$FINISH$","$NORWEGIAN$","$RUSSIAN$","$DANISH$","$SIMPLIFIED_CHINESE$","$TRADITIONAL_CHINESE$","$JAPANESE$","$HUNGARIAN$"],["en,US","de,DE","it,IT","fr,FR","es,ES","pt,PT","sr,SR","se,SE","fi,FI","no,NO","ru,RU","dk,DK","zh,CN","zh,TW","jp,JP","hu,HU"],"Language","Language",SetLangCookie,undefined,false,200,22,undefined);var nLangComboCnt=LanguageCombo.getItemCount();var PopUpLangCombo=LanguageCombo.getPopupTemplate();PopUpLangCombo.setStyle("height",((16*nLangComboCnt)+((AW.ie)?3:0))+"px");var g_sLang;function OnSetLanguageDefault(){var sBrowserLanguage=navigator.language?navigator.language:navigator.userLanguage;var sLangVal=readCookie('SULang');var aLanguage;var bLangBrowserSet=false;var sDefaultAdminLang="%LOGIN_PAGE_DEFAULT_LANGUAGE%";if((GetURLParameter("Language")!="")&&(GetURLParameter("Language")!="undefined"))sLangVal=GetURLParameter("Language");if(sLangVal==null||sLangVal==undefined||sLangVal==""){if(sDefaultAdminLang!="")sLangVal=sDefaultAdminLang;else sLangVal=sBrowserLanguage.replace("-",",");bLangBrowserSet=true;}if(sLangVal==null||sLangVal==undefined){sLangVal="";bLangBrowserSet=false;}switch(sLangVal.toLowerCase()){case"de,de":case"de":sText="$GERMAN$";sLangVal="de,DE";break;case"it,it":case"it":sText="$ITALIAN$";sLangVal="it,IT";break;case"fr,fr":case"fr":sText="$FRENCH$";sLangVal="fr,FR";break;case"es,es":case"es":sText="$SPANISH$";sLangVal="es,ES";break;case"pt,pt":case"pt":sText="$PORTUGUESE$";sLangVal="pt,PT";break;case"sr,sr":case"sr":case"sr,rs":case"sr,cs":sText="$SERBIAN$";sLangVal="sr,SR";break;case"se,se":case"se":sText="$SWEDISH$";sLangVal="se,SE";break;case"fi,fi":case"fi":sText="$FINISH$";sLangVal="fi,FI";break;case"no,no":case"no":sText="$NORWEGIAN$";sLangVal="no,NO";break;case"ru,ru":case"ru":sText="$RUSSIAN$";sLangVal="ru,RU";break;case"dk,dk":case"dk":sText="$DANISH$";sLangVal="dk,DK";break;case"jp,jp":case"ja,jp":case"jp":case"ja":sText="$JAPANESE$";sLangVal="jp,JP";break;case"zh,cn":sText="$SIMPLIFIED_CHINESE$";sLangVal="zh,CN";break;case"zh,tw":sText="$TRADITIONAL_CHINESE$";sLangVal="zh,TW";break;case"hu,hu":case"hu":sText="$HUNGARIAN$";sLangVal="hu,HU";break;default:sText="$ENGLISH$";sLangVal="en,US";bLangBrowserSet=false;break;}createCookie("SULang",sLangVal,60);aLanguage=[sText,sLangVal];if(bLangBrowserSet){g_sLang=sLangVal;setTimeout("OnReloadPage()");}else return(aLanguage);}function OnLogIn(bAutoLogin){LoadingDialog(false);ShowDialog("LoggingInDialog");var sLoginCmd="%FILE%Login.xml?Command=Login";var LogInRequest=CreatePostRequest(sLoginCmd);var sUserName,sPassWord,sLanguage;if(bAutoLogin){sUserName=decodeURIComponent(GetURLParameter("user"));if(GetURLParameter("password")!="")sPassWord=decodeURIComponent(GetURLParameter("password"));else sPassWord="fvjv@unknown.com";}else{if(!g_bIsLocalAdmin)sUserName=document.login.user.value;else sUserName="";sPassWord=document.login.pword.value;}sLanguage=LanguageCombo.getControlValue();LogInRequest.setParameter("user",sUserName);LogInRequest.setParameter("pword",sPassWord);LogInRequest.setParameter("language",sLanguage);LogInRequest.setRequestHeader("X-User-Agent",navigator.userAgent);LogInRequest.setAsync(true);LogInRequest.request();LogInRequest.response=function(XMLDoc){var nResult=GetXMLValueInt(XMLDoc,"result");var sResultText=GetXMLValue(XMLDoc,"ResultText");var sWelcomeMsg=GetXMLValue(XMLDoc,"welcomemsg");var bAllowFVJVLogin=(GetXMLValue(XMLDoc,"allowFVJV")=="1")?true:false;if(bAllowFVJVLogin)g_nUserPlacement=GetXMLValue(XMLDoc,"userplacement");else g_nUserPlacement=0;if(GetURLParameter("placement")!=""){g_nUserPlacement=parseInt(GetURLParameter("placement"));g_bOverrideUserPlacement=true;if((isNaN(g_nUserPlacement))||(g_nUserPlacement<0)||(g_nUserPlacement>3))g_nUserPlacement=2;}var bRequireEmailChange=(GetXMLValue(XMLDoc,"requireemailchange")=="1")?true:false;var bUserCanSetEmail=(GetXMLValue(XMLDoc,"usercansetemail")=="1")?true:false;var sUserEmail=GetXMLValue(XMLDoc,"useremail");g_nUserType=GetXMLValue(XMLDoc,"usertype");g_sUserSessionId=GetXMLValue(XMLDoc,"sessionid");if(nResult!=g_nSessionOkay&&nResult!=g_nSessNoLicRemoteAdmin){HideDialog("LoggingInDialog");if(nResult==202){if(bRequireEmailChange&&bUserCanSetEmail)OnShowSetEmailDialog(sUserEmail,function(){ChangePasswordDialog(true);},true);else ChangePasswordDialog(true);}else AlertDialog(GetResultText(nResult,"$LOGIN_FAIL_STR$",sResultText));}else{g_bLoggedIn=true;if(sWelcomeMsg!=""&&sWelcomeMsg!=undefined&&nResult!=g_nSessNoLicRemoteAdmin){HideDialog("LoggingInDialog");if(bRequireEmailChange&&bUserCanSetEmail){OnShowSetEmailDialog(sUserEmail,function(){WelcomeDialog(sWelcomeMsg.replace(new RegExp("\\n","g"),"<br>"),OnLoginOK);},true);}else WelcomeDialog(sWelcomeMsg.replace(new RegExp("\\n","g"),"<br>"),OnLoginOK);}else{if(bRequireEmailChange&&bUserCanSetEmail){OnShowSetEmailDialog(sUserEmail,function(){OnLoginOK(false,nResult);},true);}else OnLoginOK(false,nResult);}}};}function OnLoginOK(bReplace,nResult){var sPlacement="";var bAskUserBypass=true;createCookie("Session",g_sUserSessionId,1);if(bReplace==undefined)bReplace=true;if(g_bIsiPad)g_nUserPlacement=0;if((parseInt(g_nUserType)!=0)&&(nResult!=g_nSessNoLicRemoteAdmin)&&(!g_bOverrideUserPlacement))sPlacement="%LOGIN%";else{switch(parseInt(g_nUserPlacement)){case 0:sPlacement="%FILE%ListDir.htm";break;case 1:bAskUserBypass=false;g_bFVJVLicense=true;location.href="%COMMON_FILE%FVJVLoggedIn.htm";break;case 2:g_bFVJVLicense=true;if(bReplace)ReplaceDialog("WelcomeDialog","AskUserPlacementDialog");else ReplaceDialog("LoggingInDialog","AskUserPlacementDialog");PlacementOKButton.element().focus();bAskUserBypass=false;break;case 3:bAskUserBypass=false;location.href="%FILE%Share/Console.htm";break;}}if(bAskUserBypass){if(bReplace)ReplaceDialog("WelcomeDialog","LoggingInDialog");if(GetURLParameter("user")!="")sPlacement=sPlacement+GetBWCLoadParameters();window.location=sPlacement;}}function OnLoggedOut(){g_bLoggedIn=false;}function OnReloadPage(){var sReloadURL="%LOGIN%";if(g_bIsLocalAdmin)sReloadURL="%LOGIN%&LocalAdmin=1";if(GetURLParameter("user")!=""){sReloadURL=sReloadURL+"&user="+GetURLParameter("user");sReloadURL=sReloadURL+GetBWCLoadParameters();}if(GetURLParameter("password")!="")sReloadURL=sReloadURL+"&password="+GetURLParameter("password");if(readCookie("Language")==""&&g_sLang!=undefined)sReloadURL=sReloadURL+"&Language="+g_sLang;window.location.href=sReloadURL;}function SetLangCookie(){LoadingDialog(true);sLangValue=LanguageCombo.getItemValue(LanguageCombo.getSelectedItems());createCookie("SULang",sLangValue,60);if(!g_bIsLocalAdmin)createCookie("SUUserId",encodeURI(document.login.user.value),60);if(RememberMeCheckBox.getControlValue())createCookie("SURememberMe","true",60);else createCookie("SURememberMe","false",60);g_sLang=sLangValue;setTimeout("OnReloadPage()");}function RecommendIEUpgrade(){if(parseInt(readCookie('IERec'))!=1)AlertDialog('<p>$RECOMMEND_IE_UPGRADE_1$</p>$RECOMMEND_IE_UPGRADE_2$',true);createCookie("IERec",1,60);}if(g_bBrowserOk){document.getElementById("JavaWarning").style.display="none";document.getElementById("FormLayer").style.display="block";}else{document.getElementById("JavaWarningText").style.display="none";document.getElementById("JavaWarningReload").style.display="none";document.getElementById("BrowserWarningText").style.display="block";}if(!g_bIsLocalAdmin){document.getElementById("UserNameID").style.visibility="visible";if(g_bAllowRemember){document.getElementById("RememberUserID").style.visibility="visible";}var LoginIDInput=CreateInputField(g_UserName,"UserNameInput","user",undefined,200,20,false,OnValidate);}CreatePasswordField("","PasswordInput","pword",undefined,200,20,false,OnValidate);var g_sBrowserLanguageCheck=readCookie("SULang").replace("-",",");var objLoginButton=CreatePushButton("$LOGIN$","LoginButton",OnValidate);if(g_sBrowserLanguageCheck.toLowerCase()=="it,it")objLoginButton.setStyle("width","65px");else if(g_sBrowserLanguageCheck.toLowerCase()=="fr,fr")objLoginButton.setStyle("width","70px");var bRememberMe=false;if(readCookie('SURememberMe')=="true"&&g_bAllowRemember)bRememberMe=true;var RememberMeCheckBox=CreateCheckBox("$REMEMBER_USER$","remember","remember",bRememberMe,undefined,true);if(AW.gecko)RememberMeCheckBox.setStyle("height","12px");objLoginButton.onKeyEnter=function(){OnValidate();};if(document.getElementById("SULoginLogo"))LoadCustomImage(g_bDisableBranding,g_bHasCustomLogo);if(%SHOW_THEMES%&&document.getElementById("SULoginLogo"))LoadUserTheme();else SetActiveStyleSheet("system");if(parseInt(%ALLOW_PASSWORD_RECOVERY%)!=1){document.getElementById("PasswordRecoverImg").style.display="none";document.getElementById("PasswordRecoverTxt").style.display="none";$('#LoginTaskBar').css("display","none");$('.Bottom-Logos').addClass("Bottom-Logos-No-Toolbar");}else{$('#LoginTaskBar').css("display","block");$('.Bottom-Logos').removeClass("Bottom-Logos-No-Toolbar");}if(document.getElementById("CustomHTTPLoginText").innerHTML!=""){document.getElementById("CustomHTTPLoginText").innerHTML+="<hr style='height:1px;'>";document.getElementById("CustomHTTPLoginText").style.display="block";}if(%SHOW_LANGUAGE%)document.getElementById("LangContainer").style.display="block";LoadErrorMessage("ErrMsg","logout","$LOGGED_OUT_MSG$");if(document.getElementById("Login-Wrapper")){var nOffsetLogin=0;var nLoginWrapperheight=(document.getElementById("Login-Wrapper").style.pixelHeight)?document.getElementById("Login-Wrapper").style.pixelHeight:document.getElementById("Login-Wrapper").offsetHeight;document.getElementById("Login-Wrapper").style.height=(nLoginWrapperheight)+"px";document.getElementById("Login-Wrapper").style.marginTop="-"+((nLoginWrapperheight/2)-nOffsetLogin)+"px";}if(g_bIsiPad&&LoginIDInput!=undefined)LoginIDInput.getContent("box/text").element().setAttribute('autocapitalize','off');</script>

  • Karma

    félisten

    válasz Sasos #3997 üzenetére

    Ez így nem nagyon adja :U Minimum tedd fel PasteBinre, de még jobb lenne, ha ezen felül csak a releváns részt tennéd be, nem az egész script blokkot. Meg különben is legalább egy pretty printet nyomhattál volna rá.

    [ Szerkesztve ]

    “All nothings are not equal.”

  • Karma

    félisten

    válasz Sasos #3999 üzenetére

    Mert ezt így el tudod olvasni? :P
    Valahogy így kellett volna kezdeni: [link]

    Viszont így is még elég nagy falat elsőre megemészteni, inkább pár kötelező kör:
    - A böngésződben a Console-t nézted, nem lett ott hibaüzenet amikor a nyelvváltást próbálgattad?
    - Nézted, hogy a böngésző jó nyelvet ad-e a navigator.language alatt?
    - Cookie-kat töröltél, mielőtt nekiálltál átírni? (Hátha befolyásolja a régebbi változat.)

    “All nothings are not equal.”

Új hozzászólás Aktív témák