Inlägg

Inlägg som Atomizer har skrivit i forumet
Av Atomizer
Skrivet av jimih:

Jag har svårt att tänka mig att Wikipedia använder MySQL för sök, och just sök är en rätt vital del av siten hos både Wikipedia och Prisjakt. Och de flesta sökmotorer kan ju i princip ses som egna databaser, med en intern struktur helt olik vanliga relationsdatabaser.

Nej det är riktigt; Wikipedia använder inte MySQL direkt för alla sökningar. Vad jag vet använder de sedan många år Lucene som sökmotor för artiklarna, men de har kört fulltextsökning direkt i MySQL en gång i tiden.

Dock är sökning "i" en databas och databasen i sig olika saker: en sökmekanism går bara ut på att peka ut var (relevant) data finns, och inte att dessutom lagra den. Men visst behöver någon form av pekare sparas som t.ex. databashanteraren sen kan förstå, och beroende på vilka sökningar som ska stödjas behövs olika index/datastrukturer som givetvis också måste lagras någonstans.

Det är också skillnad på de typer av sökningar som förekommer hos Prisjakt och Wikipedia. Hos Prisjakt handlar det mycket om att direkt söka på enskilda värden eller värdeintervall - vilket MySQL hanterar enkelt med MyISAMs och InnoDBs egna indextyper (dvs. träd, men eventuellt också hashtabeller). Wikipedias artikeldatabas måste dock genomgå en mer komplicerad indexering för att bli smidigt sökbar, eftersom det självklart inte är möjligt matcha ett enskilt ord rakt av mot en hel artikel. Lucene löser det senare genom att bl.a. bygga upp en struktur som mappar enskilda ord till pekare som databashanteraren i sin tur kan använda för att snabbt plocka ut de fullständiga artiklarna.

Av Atomizer
Skrivet av pekz0r:

Ja, absolut är det inte bara MySQL i deras databaslösning, men det är fortfarande MySQL i grunden(vad jag förstått i alla fall). Så då kan man ju inte riktigt påstå att exempelvis MySQL inte är kapabelt till att klara lite mer extrema behov när man måste skala upp i stora kluster. Både Hadoop och Cassandra är ju även de open source så hela lösningen är ju fortfarande open source.

Det är ju mer eller mindre omöjligt att göra bra och effektiva mjukvaror som passar lika bra för herr Svenssons blogg med 30 besökare om dagen(vilket MySQL gör) som de gör i sådana extrema behov utan att man installerar massa plugins eller kompletterande mjukvara, som Cassandra och Hadoop i fallet med Facebook.

Jag förstår inte var du vill komma. Min poäng var helt enkelt att relationsdatabashanterare som MySQL och PostgreSQL är väldigt kapabla på egen hand - kanske mer än vissa verkar tro även i jämförelse med kommersiella alternativ - men att i extrema situationer blir det mycket problematiskt för alla RDBMS oavsett om du kan ladda ned källkoden eller inte. Det beror bl.a. på att alla RDBMS-instanser per definition hela tiden måste vara "överens" - vilket är otroligt svårt att kombinera med låga svarstider även om man köper den fräsigaste hårdvaran.

Med extrema situationer menade jag en kombination av synnerligen hög belastning avseende läsningar, skrivningar och själva datamängden. I denna kategori hamnar väldigt få webbplatser, t.ex. Google, Yahoo, Amazon, YouTube, Twitter, Facebook, Ebay etc. Alla dessa har en uppsjö olika databashanterare (och annat) för att klara driften - jag sa aldrig att en RDBMS inte kunde ingå bland dessa. Många av dessa företag har lagt ned stora summor på att utveckla egna databashanterare (måhända nischade), men de har knappast gjort detta bara för att det är kul och att de lika gärna kunde använt MySQL.

Som jämförelse kan man nämna Wikipedia som kör MySQL helt och hållet "trots" att de är en av de mest frekventerade webbplatserna i världen, men det går bra eftersom det handlar mest om att läsa befintlig data och 3 miljoner artiklar (eller vad det nu är i engelska upplagan) är inte speciellt mycket alls. Även Prisjakt faller således i den kategori som kan klara sig på MySQL.

Av Atomizer
Skrivet av pekz0r:

Facebook kör MySQL kan jag ju meddela. Deras databas lär ju svälla med många TB varje dygn så din tes håller inte riktigt.

Facebook har använt MySQL helt och hållet en gång i tiden, man måste ju börja någonstans. Men numera används mycket annat än bara MySQL och Facebook har t.ex. ett av världens största Hadoopkluster med ca 2000 maskiner om flera TB data vardera. De har även egenutvecklade Cassandra som de nyttjar flitigt.

Av Atomizer

Spontant skulle jag säga att Java inte är det lämpligaste språket för en nybörjare som vill börja hacka kod på egen hand. Ett språk som Python har betydligt lägre tröskel vill jag påstå.

Om du ändå vill ge dig i kast med Java så är mitt tips att börja kika på The Java™ Tutorials, främst det under rubriken "Trails Covering the Basics".

Av Atomizer
Skrivet av jcarlsson:

Bara en databasserver som är snabb nog (nej, MySQL och liknande servrar är inte snabba nog för sökningar av den typen, dom kan ligga som backend för databasservern som själva sökdatabasen ligger i dock, så fungerar många sidor som har sök idag på stora datavolymer)

Öppna databashanterare som MySQL och PostgreSQL är väldigt kapabla. Problemen med dessa uppstår först när man behöver skala ut skrivningar och data, men då pratar vi om webbplatser med kraftigt svällande datamängder som konfronteras med problem som berör i stort sett alla databashanterare av relationstyp. Men Prisjakt är knappast en sådan webbplats där databasen växer med flera gigabyte om dagen. Prisjakt kanske har några miljoner produkter/prisuppgifter som sakta växer till antalet, men några miljoner indexerade poster om nån kilobyte vardera är ingenting för databashanterare som MySQL och PostgreSQL, och man kan förmodligen cacha så gott som hela databasen i primärminnet på en hyffsad server.

Sen blir man säkert tvungen att köra flera replikerade databasservrar som nyttjas direkt av webbservrarna för att kunna klara läsbelastningen när den är som mest intensiv (10 000-tals läsningar/sek), men det skulle man inte kunna undvika även om man körde flaggskeppsprodukterna från Oracle, IBM, Sybase osv.

Av Atomizer

Enligt riktiga audiofiler måste du nog punga ut med mer än 4k för att få en bra musiksub; antingen är de för slöa, klena och/eller går inte djupt nog.

Har själv en XTZ W10.16 (ca 2800 kr) som jag är nöjd med, men ska man vara kritisk behöver den nog kraftigare förstärkare för att bli riktigt följsam. Bastrycket och -djupet är det dock inget fel på.

Av Atomizer
Skrivet av Leedow:

Argh.. Hittade inte, men ungefär på detta vis ser det ut.

function getXMLHttpObject() { if (window.XMLHttpRequest) return new XMLHttpRequest(); else if (window.ActiveXObject) return new ActiveXObject('Microsoft.XMLHTTP') else return null; } var xmlhttp = getXMLHttpObject();

Kör den sista raden innan du meckar. Ha inte globala variabler.

Med andra ord bör man skapa request-objektet lokalt i en funktion enligt nedan.

function doSomething() { var xmlhttp = getXMLHttpObject(); ... }

Där alltså doSomething() säkert kan anropas via onmouseover, onclick etc.

Utifall att du inte redan gör det, så börja fånga undantag när skripten krånglar. Att "inget händer" brukar enligt min erfarenhet ofta innebära att något undantag kastats. Ett bra förfarande är således att fånga undantaget och trycka ut et på en popup-ruta. Den information man får fram där brukar underlätta felsökning betydligt.

function doSomething() { try { ... } catch (e) { if (debug) { // global boolean, sätts lämpligen till false i skarp version alert(e); } } }

Av Atomizer

Om varken java.awt.GraphicsDevice eller java.lang.System kan hjälpa ser det mörkt ut.

Kan du tumma på plattformsoberoendet finns det två alternativ som jag kan komma på:
- Köra ett existerande program via java.lang.Runtime som kan plocka fram informationen.
- Koka ihop något med Java Native Interface, men då måste man vara synnerligen motiverad.

Av Atomizer
Skrivet av Sir. Haxalot:

Somtidigt väldigt minneskrävande och långsam, vilket iofs ofta kännetecknar Java (även om Vuze är ovanligt bloatat).

Det där verkar mest vara en myt från 90-talet som levt vidare. Den officiella JVM:en har sedan länge bland annat JIT-kompilering som kompilerar flaskhalsar till maskinkod för att öka prestandan (det finns även massa andra optimeringar som kan göras). Det är bara i ytterst få sammanhang som Java inte har tillräcklig prestanda, t.ex. realtidssystem. Exempelvis är det många år sedan nu som Java-portningen av Quake 2 visade sig vara jämförbar eller ibland t.o.m. snabbare än originalet i C++.

Vad gäller minnesanvändningen är det skillnad på JVM:en (virtuella maskinen) och själva Java-programmet. Det kan vara extrema skillnader på hur mycket som är reserverat och hur mycket som faktiskt används av programmet och/eller den virtuella maskinen. Många kanske kollar minnesanvändning med program som task managern i Windows, men informationen där säger egentligen ingenting när det handlar om JVM eller andra virtuella maskiner.

Av Atomizer

C++ och Java har ju ganska olika syften. Java är för applikationsutveckling och har inte samma lågnivåfunktionalitet som C++.

Förutom Eclipse så är även NetBeans utvecklad i Java.

Apache har några intressanta Java-projekt också:
Hadoop: centraliserad databashanterare, används av Yahoo, Facebook m.fl. för data warehousing
Cassandra: decentraliserad databashanterare (P2P-liknande)
Lucene: sökmotor, används av t.ex. Wikipedia

Av Atomizer

Tänk på att fönster ritas om ganska ofta, t.ex. när du flyttar fönstret, men din ritkod kan bara köras en gång. Du kan skapa en egen JPanel och överskugga paintComponent(Graphics g) där du placerar din ritkod.

Av Atomizer

PHP är ett skriptspråk för webbservrar, och har ingenting med vare sig HTML, CSS eller något annat att göra. Filändelsen .php talar om för webbservern att den ska mangla filen genom en PHP-tolk, som i sin tur skriver vad den nu vill till utströmmen/klienten (HTML-kod, CSS, JavaScript, PNG eller något annat).

Med andra ord: om du ändrar filändelsen till .php på en fil som inte innehåller PHP-kod kommer det inte gå fortare, utan snarare långsammare eftersom webbservern måste köra innehållet genom en PHP-tolk. Men jag tror inte ens det går att räkna tidsförlusterna i millisekunder på en modern dator.

Av Atomizer

En spelmotor sköter en slags grundläggande mekanik; ponera att vi har ett 3D-spel med olika spellägen som deathmatch, team deathmatch, capture the flag osv. Reglerna (koden) för dessa spellägen har inget att göra med, exempelvis, hur modeller ska renderas med hänsyn till form, textur, ljussättning m.m. En spelmotor hanterar bl.a. det senare och man kan se den som "värd" för olika spel/spellägen.

En spelmotor är inte något magiskt utan består i grunden av nån slags loop enligt nedan, som varvas kanske hundratals gånger per sekund:

  1. Ta hand om input från mus/tangentbord/joystick etc.

  2. Uppdatera spelobjekt: riktning och hastighet (ev. gravitation, vikt, luftmotstånd etc.), kollisionshantering (tänk krockande biljardkulor, exploderande missiler etc.), skapa/ta bort objekt m.m.

  3. Spela upp/stäng av ljud: volym, eko m.m.

  4. Rendera spelvärld: projicera modellerna på skärmytan utifrån nuvarande perspektiv (och vad är dolt och inte?), applicera texturer, ljussättning osv.

Modeller och texturer beskrivs givetvis med någon vedertaget filformat av bekvämlighetsskäl (jpeg, bmp osv.), det är ju trevligare att skapa modeller och bilder med något fränt verktyg istället för att hacka manuellt i en texteditor t.ex. Men filformatet i sig säger inget om hur motorn representerar objekten under körning.

Av Atomizer

Du måste se till att uttryckets värde sparas också, som det är nu kastar du resultatet.

Ändra till @counter += 1, eller @counter = @counter.to_i + 1

Av Atomizer

Du vill med andra ord skicka en http-begäran som ska behandlas av ett PHP-script.

Börja med att ta en titt på XMLHttpRequest - Wikipedia, the free encyclopedia

Av Atomizer
Skrivet av Erben:

1:Hur många programmeringsspråk finns det?

2:Vilket är det programmeringsspråk som används mest?

3:Inom vilka områden använder man de olika programmeringsspråken?

4: Finns det något språk som kommer att finnas även i framtiden?

5: Vilka programmeringsspråk är mest olika varandra?

1. Många...

2. På ohloh finns statistik från väldigt många open source-projekt; topp 5 utgörs av C, C++, Java, PHP samt C#. XML är också med där på tredje plats, men det kanske inte är vad man brukar förknippa med "programmeringsspråk".

3. C/C++ är framtaget för systemprogrammering (drivrutiner, realtidssystem m.m.) och i viss mån applikationer. Väldigt mycket bygger på C och/eller C++:
- operativsystem: Windows, Linux, Mac OS
- kontorsprogram: OpenOffice
- verktyg och terminalprogram: GNU coreutils
- databashanterare: MySQL, PostgreSQL m.fl.
- spelmotorer: id tech, cryengine, source osv.
- webbläsare: Firefox, Chrome
- webbservrar: Apache HTTP Server
- många virtuella maskiner för andra programmeringsspråk: CPython, Java Virtual Machine (Java + mycket annat), SpiderMonkey (JavaScript) osv.

PHP och JavaScript är framtaget för att skripta webbservrar respektive webbläsare, men i synnerhet JavaScript har blivit populärt för att skripta lite allt möjligt.

Java och C# är framtaget för applikationsutveckling.

4. Många av de mest populära programmeringsspråken idag kommer knappast försvinna inom överskådlig tid, helt enkelt för att så många system bygger på dem. Cobol är t.ex. inte dött ännu, trots att det funnits sedan 1959, eftersom det finns många banksystem som är Cobolbaserade. Även Fortran och Lisp hänger med ännu, två ytterligare 50-talister.

5. Det är stor skillnad på funktonell och procedurell programmering. Den senare är vanligast (C, Java osv.), men inte nödvändigtvis "bäst" för det. Lisp och Erlang är exempel på funktionella programmeringsspråk. Erlang har vuxit i popularitet på senare tid pga sitt fiffiga (?) sätt att strukturera flertrådade program.

Det är också stor skillnad på hur objektorientering är implementerat i objektorienterade programmeringsspråk; i det avseendet är klassbaserade Java helt olikt prototypbaserade JavaScript.

Det finns också olika typsystem: statiska och dynamiska. C/C++, Java, C# m.fl. är statiskt typade medan PHP, JavaScript, Python, Ruby, Perl m.fl. är dynamiskt typade. Den korta versionen är att statisk typning innebär att en variabels/konstants typ måste anges i källkoden. Vilken paradigm som är bäst är en het potatis, men argumenten för dynamisk typning brukar vara kortare utvecklingstid och koncisare källkod, medan statiskt typning innebär fler möjligheter till verifiering, optimering och typangivelserna kan tjäna som dokumentation.

Av Atomizer
Skrivet av Zelloxy:

Testat ännu mer nu och har i princip samma problem som innan. dvs. att det går att söka efter 1 ord eller meningar men det fungerar inte som jag vill när jag separerar ord med space, så att den söker efter dem separat. några tips?

Vet inte om jag riktigt greppar vad du är ute efter, men så som det är ska det också vara med fulltextsökning. Om orden är separerade med mellanslag innebär inte detta att alla orden måste finnas i sökresultaten, dvs. ett mellanslag tolkas som operatorn OR/eller. Vill du istället att något ord måste finnas, eller inte får finnas, i sökresultatet ska du ha "+" respektive "-" som prefix för ordet i fråga, mao fungerar det likadant som hos alla sökmotorer, exempelvis google.

Framgår också, föga förvånande, hur detta fungerar i MySQL:s dokumentation (finns också fler operatorer). MySQL :: MySQL 5.1 Reference Manual :: 11.8.2 Boolean Full-Text Searches

Av Atomizer

Netbeans och Eclipse är inte att rekommendera för nybörjare, de är helt enkelt overkill i sammanhanget och hanterar bl.a. kompilering automatiskt, vilket man vill (eller åtminstone bör) känna på själv som nybörjare. När programmen blir mer avancerade och man själv börjar kunna mer, kommer man också förstå och uppskatta den funktionalitet som finns i Eclipse och Netbeans, istället för att bara bli förvirrad.

Med JDK:n följer javakompilator med, börja med att öppna en kommandoprompt och skriva "javac -version" för att verifiera att den är installerad och åtkomlig. Sen är det bara att kompilera med "javac MyFirstClass.java" eller liknande.

Av Atomizer

Finns regulära uttryck i MySQL också, vilket förstås är mycket kraftfullare än LIKE som bara tar jokertecken. Det gäller dock att skapa rätt index och formulera sökningarna därefter för att få rimlig prestanda, oavsett vilken av dessa tekniker man använder. Fast är det små datamängder spelar det oftast ingen roll.

Vad är det för texttyp du ska söka med och i? Fulltextsökningar är den teknik du ska använda om du vill söka på ord i textmängder av naturligt språk såsom svenska och engelska. Till att börja med måste du använda MyISAM-motorn för tabellen och rätt datatyper (VARCHAR eller TEXT). Ett fulltextindex måste skapas också (kan inte komma på just nu hur det skulle kunna fungera annars). Kom ihåg att fulltextindex skiter oftast i vanliga ord som "och", "eller", "så" etc. eftersom de ytterst sällan påverkar sökkvaliteten.

Av Atomizer

Inputströmmen bör du hantera i en egen tråd som kör något i stil med:

while (true) {
try {
Object obj = ois.readObject();
if (obj instanceof DataPacket) {
DataPacket dp = (DataPacket) obj;
/* gör din grej här med dp */
}
} catch (ClassNotFoundException e) {
} catch (IOException e) {
}
}

readObject() blockar tills den har ett komplett objekt. DataPacket-klassen måste förresten implementera java.io.Serializable för att kunna manglas igenom objektströmmar.