Du bist nicht angemeldet.

#1 26.04.2017 16:57

DannyF
Mitglied
Registriert: 08.09.2016
Beiträge: 97

[MiniProjekt] Ahhh... Pee: Ihhh

https://github.com/DerDannyF/CSharp-XML-API

Ziel: 10.000 Filme in das Spiel integrieren inkl. Celebrities.

Aktueller Stand der Dinge: (14.05.17)

29176767tp.png

Compilierung, Ausführung (linux&win7) https://github.com/DerDannyF/CSharp-XML-API/wiki/Vorbereitung

zum sofortigen spielen: Spielstand - (1) für schnellere und (2) für langsamere Rechner.
(1) (+7kFilme + 20k Personen): https://drive.google.com/file/d/0B82ExpNWhsiCVW81VFJfYUpqdG8/view?usp=sharing
(2) (+3kFilme + 10k Personen): https://drive.google.com/file/d/0B82ExpNWhsiCUVoxTjd1ZWx1c3M/view?usp=sharing

Beitrag geändert von DannyF (14.05.2017 18:32)

Offline

#2 26.04.2017 17:01

Ronny
Administrator
Ort: Chemnitz
Registriert: 08.11.2001
Beiträge: 10.382
Webseite

Re: [MiniProjekt] Ahhh... Pee: Ihhh

Bin ich ja mal gespannt, was die "ofdbgw" alles an Informatioen bereitstellen kann.

Sie sollte dran denken, Informationen zu cachen, um die Apirequests an imdb/tmdb... Gering zu halten.


Bye
Ron


sigimg2.php?id=1

Online

#3 26.04.2017 17:07

DannyF
Mitglied
Registriert: 08.09.2016
Beiträge: 97

Re: [MiniProjekt] Ahhh... Pee: Ihhh

Edit: Anfangspost entschlackt



Vorüberlegung:
Die IMDB ID in den Attributen von programme (aus database_programmes.xml) möchte ich in OFDB ID umwandeln, dafür bietet http://www.ofdbgw.org/ eine API an.

pee.cs

using System;
using System.Net;   
using System.Xml;  	

namespace www.ofdbgw.org
{
	class Program
	{
		static void Main(string[] args)
		{
			string xmlFileName1 = "database_programmes.xml";
			XmlDocument altXML = new XmlDocument ();
			altXML.Load (xmlFileName1);

			XmlTextReader reader = new XmlTextReader (xmlFileName1);
			int i = 0, j = 0, firstScout, dazwischen;
			string myOFDB_ID = "";
			while (reader.Read ()) 
			{
				if (reader.Name == "programme")
				{i++;
					if (reader.GetAttribute ("imdb_id") != null) 
					{	string myIMDB_ID = reader.GetAttribute ("imdb_id");
						if (myIMDB_ID != "") 
						{
							Console.Write ("  IMDB_ID : {0} ",myIMDB_ID);
							Uri uri = new Uri ("http://ofdbgw.h1915283.stratoserver.net/imdb2ofdb/" + myIMDB_ID);
							WebClient site = new WebClient ();
							string html = site.DownloadString (uri);

							if (html.Contains ("<rcodedesc>Ok</rcodedesc>"))  
 							{	// Inhalt vorhanden?
								j++;
								firstScout = html.IndexOf ("<ofdbid>") + 8;
								dazwischen = html.IndexOf ("</ofdbid>") - html.IndexOf ("<ofdbid>") -8;
								myOFDB_ID = html.Substring (firstScout, dazwischen);
								Console.WriteLine (" >> OFDB ID :  " + myOFDB_ID );            
							}
							else Console.WriteLine ("Keine Resultate zur Anfrage gefunden");
						}
					}
				}
			}
			Console.WriteLine ();
			Console.WriteLine ("{0} gelesen. {1} Übereinstimmungen bei ofdbgw gefunden.", i / 2, j);
		}
	}
}

Edit 10.05: Bild rausgeschmissen.

Ich sehe gerade, dass "Die Rache des Würgers" die selbe IMDB ID hat wie "Winchester 73". Oder "Iwans Kindheit" und "Die Straßenwalze und die Geige" die selbe ID hat.



http://ofdbgw.h1915283.stratoserver.net/movie/69878
Sie haben ca 50% von IMDB aber alles auf deutsch & nicht kommerzielle Nutzung  = free

Die haben kein API Request auf Imdb, die haben 287.777 "eigene" Filme in Ihrer Db.
(Imdb > 4Mio Filme)

Beitrag geändert von DannyF (10.05.2017 18:17)

Offline

#4 26.04.2017 20:32

Ronny
Administrator
Ort: Chemnitz
Registriert: 08.11.2001
Beiträge: 10.382
Webseite

Re: [MiniProjekt] Ahhh... Pee: Ihhh

Ich lese bei "ofdbgw" frei fuer private Nutzung (also des Requestdienstes).

Eventuell sollten deine anfragen auch an ofdbgw.org gehen ...wegen loadbalancer.


bye
Ron


sigimg2.php?id=1

Online

#5 30.04.2017 12:06

DannyF
Mitglied
Registriert: 08.09.2016
Beiträge: 97

Re: [MiniProjekt] Ahhh... Pee: Ihhh

29055602sk.png

Ich bräuchte Hilfe bei den Formel'n, die in der Mitte des Bildes eingerahmt sind.

Meine bisherigen Erkenntnisse:
critics, speed & outcome scheinen zwischen 0 und 100 zu liegen
price_mod zwischen 0 und 1

Korrelieren (price_mod, critics, speed und outcome) irgendwie mit den Ratings [7] in den FilmDB / den Herstellungsjahr oder sind die frei gewählt?

Offline

#6 30.04.2017 13:58

Ronny
Administrator
Ort: Chemnitz
Registriert: 08.11.2001
Beiträge: 10.382
Webseite

Re: [MiniProjekt] Ahhh... Pee: Ihhh

An sich sind die Werte "frei Schnauze" vergeben ... heisst man denkt sich: ohh, ein Transformers... Kritik runter, Tempo und Kinokasse hoch.

Wenn Du (IM)DB-Werte findest, die mit vielen unserer "korrellieren", nur zu.
Denke "outcome" koennte mit Einspielergebnissen (normiert bzw inflationsbereinigt) zusammenpassen.
"Kritik" waere die Meinung der Magazine/Zeitungen + Userwertung


blocks: Aufrunden wuerde ich nicht immer ... denke ein 65 Minuten Film sollte 1 Block sein, bei 70 vielleicht auch noch.


@ Genre, function, ...
Die stehen alle in der source/game.gameconstants.bmx



bye
Ron


sigimg2.php?id=1

Online

#7 30.04.2017 14:16

DannyF
Mitglied
Registriert: 08.09.2016
Beiträge: 97

Re: [MiniProjekt] Ahhh... Pee: Ihhh

okay ... vielen Dank erstmal.

Ich schau mir nächste Woche die source/game.gameconstants.bmx an was ich da so für mich rausfiltere.
@blocks: Aufrunden (Runtime / 75) nehm ich mal mit aus Deinen Hinweis. Das kann man ja später noch genau anpassen.

Die Idee hinter der Sache da oben ist, dass die <programme> XML mom ~600 Einträge hat, und ich wollt mal schauen wo das Spiel so seine Grenzen hat (1.000 / 10.000 / 100.000 Einträge) und dafür möchte ich die <programme> Container Erstellung automatisieren mit den beiden APIs die in dem Bild angegeben sind.

Wenn man dann eine "Grenze" hätte (ich sag mal: 12.345 <programme> Einträge - dann ruckelt es oder ladeZeiten - oder irgendwas) würde das erst mal nix ändern außer Erkenntnisgewinn.

Somit verabschiede ich mich mit dem Project in den Mai gw_smiley_zwinkern

Offline

#8 30.04.2017 20:30

Ronny
Administrator
Ort: Chemnitz
Registriert: 08.11.2001
Beiträge: 10.382
Webseite

Re: [MiniProjekt] Ahhh... Pee: Ihhh

Also an sich sollte es kein Problem geben. RAM steigt, Ladezeiten auch. Was etwas laenger dauert sind "Abfragen" mit Kriterien. Also Dinge wie "gib mir alle Filme mit Genre X und Jahr >=1985" da im Hintergrund ja keine DB sondern einfach eine Liste bzw. Hashmap steht. Und naja n paar Caches fuer "noch nicht erschienen"-Sub-Listen (u.ae. haeufig genutzte Dinge).


Wenn die XML zu "verbose/gespraechig" sind, koennen wir zur Ladezeitreduktion auch JSON oder so angehen. Zweifle aber dran.


Da alle Programme in Speicherstaenden hinterlegt werden, bin ich mal dran interessiert, wie gross die so werden ;-).


Viel Spass bei Hexenfeuern und Maitaenzen. Frau ist auf Arbeit, Kind schlaeft und ich werd mal schauen was ich jetzt die 90 Minuten Freizeit noch schaffe.


Bye
Ron


sigimg2.php?id=1

Online

#9 01.05.2017 16:42

DannyF
Mitglied
Registriert: 08.09.2016
Beiträge: 97

Re: [MiniProjekt] Ahhh... Pee: Ihhh

112 GB freier Speicher ist meine Schmerzgrenze smile

Offline

#10 02.05.2017 19:43

DannyF
Mitglied
Registriert: 08.09.2016
Beiträge: 97

Re: [MiniProjekt] Ahhh... Pee: Ihhh

Wie sieht die  Regelung in der database_programmes.xml aus
wenn unter
<data country="USA" ...>
mehr als ein Land Produktionsland ist?
z.B.
Event Horizon - Am Rande des Universums
Produktionsland: Großbritannien / USA

danke

Offline

#11 03.05.2017 23:22

Ronny
Administrator
Ort: Chemnitz
Registriert: 08.11.2001
Beiträge: 10.382
Webseite

Re: [MiniProjekt] Ahhh... Pee: Ihhh

Komma

Ich denke wir koennen das Kommaseparieren ... oder lieber "/" ?

Wenn es einheitlich gemacht ist, koennen wir es problemlos im Spiel "auseinandernehmen" und anders darstellen. Heute wuerde man wohl "," nutzen - frueher war "D/JUG/FR/IT" (Winnetou ;-)) ueblich.



bye
Ron


sigimg2.php?id=1

Online

#12 05.05.2017 11:21

DannyF
Mitglied
Registriert: 08.09.2016
Beiträge: 97

Re: [MiniProjekt] Ahhh... Pee: Ihhh

@data country: Ich bin jetzt bei ISO3166 und "/" hängengeblieben.
Die Darstellung mit mehr als 2 Produktionsländern (nach ISO3166 1-3 Norm) ist problematisch, da er dann Spielintern die Jahreszahl abknausert, dann sieht das so aus "DE/FR/GB..." also max. 2 Produktionsländer: "DE/FR 1998"

Nun habe ich noch Fragen.
Es geht um, wie ich sie liebevoll nenne: CSO

critic: ist für mich am einfachsten zu handhaben, da ich 2 userRatings zu fast allen Filmen habe, da kann man ein Mittel nehmen und vielleicht noch 10% random-range und fertig.

speed: hat ein schlechter action film mehr speed als ein gutes Drama? Was ist die Spielinterne Logik hinter diesem Wert?

outcome: Hier tue ich mich am schwersten. Ein Film der 5 mio kostet und 40 mio einspielt = riesen Erfolg, während ein 200Mio-Film der 235 Mio einspielt als Flop gewertet wird. Ferner sind die "BoxOffice-Angaben" verschiedener API's abweichend und unvollständig (Merchandise, Zweitvermarktung, product placement, DirectToVideo, TVProduktionen ...uvm)

Offline

#13 10.05.2017 11:30

DannyF
Mitglied
Registriert: 08.09.2016
Beiträge: 97

Re: [MiniProjekt] Ahhh... Pee: Ihhh

Nun doch, nach langer Zeit, mein erster größerer Erfahrungsbericht:

Ersteinmal zu den Eckdaten:
Ich habe zwei API's (omdbapi / ofdbgw) bemüht um Daten.
Die haben Sie nur "langsam" rausgerückt.
In meiner Illusion wollte ich 10.000'de Filme verarbeiten. Das ist gar nicht so einfach. (Timeout:~50Filmen).
Mit dem cache Gedanken bin ich nun bei ~6k Filme (vorher~400) und ~13kCelebrities (vorher~300).

29156465rb.png
29156452zs.png

Man kann schon sehr gut mit den 6k Filmen spielen (keine lags/fehler/oä), doch es gibt noch etwa eine A4 Seite kleinerer Bugs. (Darstellung&Balancing).

Größe der Datein nach dem einlesen:
database_people: 6.8MB
database_programmes: 8.9MB
savegameTag1: 177MB
savegameTag2: 182MB

Hier müssen noch Langzeittest's zeigen wie sich das entwickelt. 5MB / Tag wären okay. Habe gerade keine Zeit/ aber WE steht vor der Tür happy

ToDoListe: https://github.com/DerDannyF/CSharp-XML-API/tree/master/4%20Filme
Projekt:  https://github.com/DerDannyF/CSharp-XML-API

Offline

#14 10.05.2017 11:41

Ronny
Administrator
Ort: Chemnitz
Registriert: 08.11.2001
Beiträge: 10.382
Webseite

Re: [MiniProjekt] Ahhh... Pee: Ihhh

Also das Savegame sollte nur rudimentaer anwachsen.

Grundlegend werden die DBs mitgespeichert (allerdings etwas erweitert, autokorrigiert usw.)


Wenn nun ein Programm ausgestrahlt wird, so macht es keinen Unterschied, ob es 10x ein Original, oder 5x Original und 5x Neu ist.
Es wird bei allen die "GUID" gespeichert und das Objekt nur "referenziert". Gleich verhaelt es sich mit den Quoten (das ist ja nicht nur eine Zahl...) und anderen Objekten.


Das Hauptproblem ist wohl die Initialgroesse - und die damit verbundene Speicherzeit.
Wenn gewuenscht, koennte ich den Json-Serializer mal auf den aktuellen "Xml-Stand" bringen und ich koennte wetten, die Einsparung ist mehr als signifikant.


Gezippt sollten beide Varianten ja gute Kompressionsraten zeigen (da viel Text).



So oder so: das klingt schon mal richtig interessant - und denke, dass koennte so manchen hier in Hochstimmung versetzen.


bye
Ron


sigimg2.php?id=1

Online

#15 10.05.2017 12:48

DannyF
Mitglied
Registriert: 08.09.2016
Beiträge: 97

Re: [MiniProjekt] Ahhh... Pee: Ihhh

Die Kompressionsrate ist der Wahnsinn. Aus 182MB wird 7.5MB.

Wer mal reinkucken will ohne den ganzen C# compiliere & cache anlegen - Mist, hier mein aktueller Spielstand (7.5MB):

Edit 14.05: Spielstand, siehe 1. Post (Brauch ich es hier unten nicht immer aktualisieren)

Natürlich muss man mit DaN spielen smile

Beitrag geändert von DannyF (14.05.2017 16:52)

Offline

#16 10.05.2017 16:33

DannyF
Mitglied
Registriert: 08.09.2016
Beiträge: 97

Re: [MiniProjekt] Ahhh... Pee: Ihhh

Ich wollte schauen ob filme.exe auch unter Win7 geht
und erstellte diesen viralen Hit:
https://www.youtube.com/watch?v=oe26inYZzuY&feature=youtu.be

Offline

#17 10.05.2017 17:23

Ronny
Administrator
Ort: Chemnitz
Registriert: 08.11.2001
Beiträge: 10.382
Webseite

Re: [MiniProjekt] Ahhh... Pee: Ihhh

Interessant. Mal schauen, ob wer sich "rantraut".

Eventuell im Eingangsbeitrag erwaehnen, wie der geneigte Nutzer sich so eine "filme.exe" unter Windows erstellen kann?
(Du kannst natuerlich unter "releases" bei deinem Github-Projekt auch eine Exe bereitstellen).



bye
Ron


sigimg2.php?id=1

Online

#18 10.05.2017 18:12

DannyF
Mitglied
Registriert: 08.09.2016
Beiträge: 97

Re: [MiniProjekt] Ahhh... Pee: Ihhh

Bei mir gab es das Verzeichnis /Program Files (x86)/MSBuild/14.0/Bin in der die csc.exe enthalten war.
Ich bin mir nicht sicher ob das bei Win immer da ist oder ob es nur da war weil ich VS installiert habe. Normalerweise ist es ein .Net Framework Ding.
(/14.0/ kann abweichen je nach Version.)

Offline

#19 12.05.2017 13:51

DannyF
Mitglied
Registriert: 08.09.2016
Beiträge: 97

Re: [MiniProjekt] Ahhh... Pee: Ihhh

Erfahrungsbericht Teil 2:
Habe jetzt 12 Tage durchgesuchtet.
Zuerst mal die Savegamegröße:
Tag 3: 183MB / Tag 4: 185MB / Tag 5: 188MB / Tag 6: 192MB
Tag 7: 193MB / Tag 8: 196MB /Tag 9: 199MB / Tag 10: 202MB
Tag 11: 205MB und Tag 12: 207MB der Anstieg ist sehr gut.

Jetzt 2 Probleme die ich noch nicht richtig einordnen (lösen) kann.

1. ist da die Angabe USK, ich nehme den "Rating":"R" Wert aus der omdbapi.com Rückgabe und frage Ist Rating == "R" dann setze flags="64". Das klappt auch gut, doch die unvollständige Db von omdb gibt oft N/A aus, und so sind viele (insbesondere) alte Erotik, Horror usw. als flags = "0" deklariert, was dazu führt, dass ich tagüber in der Lederhose jodeln kann. Keine Idee wie ich das fixen soll.

2. Ist ein Problem mit der Kultur. Durch die neue Verhältnissmäßigkeit
1000 Action Filme, 1000 Komödien, 1000 Dramen...usw.

//Const CULTURE:Int = 4
namespace Count
{	class Kultur
	{       static void Main(string[] args)
                {System.Console.WriteLine(CountStrings(System.IO.File.ReadAllText("database_programmes.xml"), "flags=\"4\""));
		}
		private static int CountStrings(string str, string regexStr) // Zählen, zählen, zählen
		{
			System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(regexStr);
			return regex.Matches(str).Count;
		}
	}
}

ist es fast unmöglich einmal ein Kulturprogamm zu erwerben und damit am Kultur Sammy teilzunehmen. (da oben sagt man mir es gäbe 20 Kulturprogramme - Echt so wenig?),
Will sagen, dass die vielen Filme dafür sorgen, dass beim Filmverkäufer immer was steht, doch viel zu selten (1mal in 12 Tagen) Kultur.
Die FilmApi's haben praktisch keine Kultur.

Offline

#20 12.05.2017 16:24

TheRob
TVTower-Testteam
Registriert: 01.06.2015
Beiträge: 545

Re: [MiniProjekt] Ahhh... Pee: Ihhh

Ich habe Deine Arbeit leider noch nicht ausprobiert. Finde es aber Klasse, was Du da machst. Hoffentlich verstehen es viele. Ich kenne fast alle Filme auswendig. Von daher bin ich in meiner Programmgestaltungswelt. Aber tolle Arbeit.

@Kultur

Es gibt die Kultur Nachrichten. Wenn man also den Sammy will, hat man Möglichkeiten. Dank Deines Beitrags sind mir aber ein paar Programme und Drehbuchideen eingefallen. Von daher: Danke. Das wird besser. Alle jedoch ohne IMDB ID.

Offline

#21 12.05.2017 18:16

Ronny
Administrator
Ort: Chemnitz
Registriert: 08.11.2001
Beiträge: 10.382
Webseite

Re: [MiniProjekt] Ahhh... Pee: Ihhh

Das Problem mit den Kulturprogrammen haben alle "Sonderprogramme".
Call-In duerfte kaum noch beim Filmhaendler vorhanden sein (ausser bei Serien - und dort nur, bis du auch Serien ausliest). Aehnliches Problem haben auch "Live-Programme".

Du kannst das nur so loesen, dass eben nicht "alle Filme" geladen werden, sondern du 1-2-3 "Sets" zusammenschraubst. Und dort jeweils nur jeden 3. Film (oder per "Zufall") reinpackst.

Im Groben sollten 20 Filme pro Jahr reichen - das verhindert auch, dass ein Jahr (vor allem die neuen Jahre) uebermaessig viele Filme enthaelt.
Kannst Du mal schauen, wie viele Filme so "pro Jahr" dabei sind?

bei Filmen _vor_ 1985 (Startjahr) kann es ja sogar immer weiter runtergehen (5 pro Jahr) usw.usf.


bye
Ron


sigimg2.php?id=1

Online

#22 12.05.2017 18:46

DannyF
Mitglied
Registriert: 08.09.2016
Beiträge: 97

Re: [MiniProjekt] Ahhh... Pee: Ihhh

Der Peak ist um die Jahrtausend.wende.
29176055kj.png

Offline

#23 12.05.2017 19:04

DannyF
Mitglied
Registriert: 08.09.2016
Beiträge: 97

Re: [MiniProjekt] Ahhh... Pee: Ihhh

@Ron: Am einfachsten zu testen ist es wenn man sich den Spielstand runterläd.
Ich habe jetzt einen Spielstand 1Tag1Minute 8362 Filme. Heute aktualisiert mit ner Menge Fixed Zeugs.

Edit 14.05: Spielstand, siehe 1. Post (Brauch ich es hier unten nicht immer aktualisieren)

Edit 14.05: Spielstand, siehe 1. Post (Brauch ich es hier unten nicht immer aktualisieren)

Beitrag geändert von DannyF (14.05.2017 16:53)

Offline

#24 12.05.2017 19:30

DannyF
Mitglied
Registriert: 08.09.2016
Beiträge: 97

Re: [MiniProjekt] Ahhh... Pee: Ihhh

Jetzt hab ich doch eine Grenze gefunden gw_smiley_zwinkern

SaveGame: 238.3MB >8k Filme


log.app.txt schrieb:

[ 19:13:25 ERR      | XML-ERROR: Excessive depth in document: 16384 use XML_PARSE_HUGE option  [19:13:25] ERR      |          : File:  savegames/TestSpielstand.xml. Line:2199765 Column:61 [19:13:26] ERR      |          : Extra content at the end of the document  [19:13:26] ERR      |          : File:  savegames/TestSpielstand.xml. Line:2199765 Column:61]

Edit 14.05: Spielstand, siehe 1. Post (Brauch ich es hier unten nicht immer aktualisieren)
Edit 14.05: Spielstand, siehe 1. Post (Brauch ich es hier unten nicht immer aktualisieren)
Spielen geht nur beim Laden will er nicht weitermachen bei Linie 2,2Mio

Beitrag geändert von DannyF (14.05.2017 16:53)

Offline

#25 12.05.2017 21:04

Ronny
Administrator
Ort: Chemnitz
Registriert: 08.11.2001
Beiträge: 10.382
Webseite

Re: [MiniProjekt] Ahhh... Pee: Ihhh

Ich hab mir das mal kurz angeguckt, man muesste da wohl ein paar Sachen umstellen und dadurch den erwaehnten Parameter nutzen koennen. Hab das aber mal an den Modulautoren weitergegeben, will da nichts "unueberlegt" abaendern.



Zum Testen komme ich jetzt nicht wirklich - habe den anderen Speicherstand noch nicht mal ausprobieren koennen. Hab hier jetzt noch 1.7GB an Jpegs durchzuackern und freizustellen (Fotoalben). Danach will ich endlich TheRobs GUI-Bug loswerden und die anderen Bugreports warten auch noch auf ihre Abarbeitung. Wenn ich da jetzt mit Deinem Speicherstand anfange, dann fallen mir sicher wieder dutzend andere Kleinigkeiten ein und nix wird fertig :-p


bye
Ron


sigimg2.php?id=1

Online

Schnellantwort auf dieses Thema

Schreibe deinen Beitrag und versende ihn
Bist Du ein Mensch oder ein Roboter ?

Verifizierung, dass diese Aktion durch eine reale Person vorgenommen wird und nicht von einem Programm.