Krisztián's profileBátyai Krisztián[KRis]PhotosBlogListsMore ![]() | Help |
Bátyai Krisztián[KRis]Ha tudod, hogy egyenesen állsz, ne törődj vele, hogy ferde az árnyékod! vagyis Ha úgy érzed minden az iránításod alatt van, nem mész elég gyorsan!!! Avagy néhány gondolat a következőkről : C# 3.0 WPF WF LINQ Silverlight |
||||||||||||||
|
Public folders
November 25 Instant Smooth HD tartalom elhelyezése weboldalunkra
Azt hiszem mindenki találkozott már olyan weboldallal amin ugyan volt média/video elhelyezve, csak éppen a minősége és/vagy a (lejátszás) felhasználói élménye a 0-t közelítette. Mi sem egyszerűbb hogy ezen túllépjünk: Smooth Streaming
Kell hozzá:
Lépések
using System; using System.Collections.Generic; using System.Text; using Microsoft.Expression.Encoder; using Microsoft.Expression.Encoder.Live; using Microsoft.Expression.Encoder.Profiles; using System.IO; namespace Live { class Program { static void Main(string[] args) { // MediaItem mediaItem = new MediaItem(@"forras.mp4"); //ezt kell használni a profile-ok összeállítására....aspect ratio tartásával Console.WriteLine("size={0}", mediaItem.VideoSize); AdvancedVC1VideoProfile videoProfile = new AdvancedVC1VideoProfile(); // When you create a VideoProfile you'll get one stream by default. // In this example remove that one as we’re going to explicity // add the three streams below. videoProfile.Streams.RemoveAt(0);
//!!!!
// a megfelelő méret és aspect ration megadását meg kell csinálni,
// a forrás méretei alapján
// pl. érdemes puskázni az Expression Encoder default beállításaiból
// pl. ~3mbps, ~1600kbps, ~1200kbps, ~800kbps, ~500kbps
// hozzá a megfelelő arányos méretekkel...
//!!!!
//videoProfile.Streams.Add( // new VariableConstrainedBitrate(1450, 1600), // new System.Drawing.Size(800, 600)); videoProfile.Streams.Add( new VariableConstrainedBitrate(1050, 1600), new System.Drawing.Size(640, 480)); videoProfile.Streams.Add( new VariableConstrainedBitrate(600, 1600), new System.Drawing.Size(400, 300)); // Use smooth streaming with automatically sized streams. videoProfile.SmoothStreaming = true; videoProfile.Streams.AutoSize = true; mediaItem.OutputFormat.VideoProfile = videoProfile; Job job = new Job(); job.MediaItems.Add(mediaItem); // Set up the progress callback function job.EncodeProgress += new EventHandler<EncodeProgressEventArgs>(OnProgress); // Set the output directory and encode. job.OutputDirectory = "c:\\temp"; job.CreateSubfolder = true; job.Encode(); } static void OnProgress(object sender, EncodeProgressEventArgs e) { Console.WriteLine(e.Progress); } } } Info : http://blogs.msdn.com/expressionencoder/archive/2009/07/29/9853000.aspx November 23 Azure © oktatási anyagokMindamellett hogy a PDC-ről letölthető számos előadás ill. a gyári blogokban kezdenek szállingózni a demok, oktatási példák, egy egész komoly anyag jelent meg a CH9-en is Azure-al kapcsolatban. (Step By Step jellegű, elég részletesek) November 22 Ingyenes Ebook
Találtam egy ingyenes könyvet, ennek apropóján gondoltam összeszedem, összeszedhetjük az ingyenes ebook-okat, amik elérhetők .Net technológiákról:
Majd megjegyzésbe megy a többi… November 21 Silverlight 3 – WCF-binary formatter
Tudom tudom a 3 már történelem :D, de már az is tudta, hogy nem Soap borítékban mindenféle buta enkódlásban küldük át a bináris adat a kliensre, hanem binárisan. Ez persze alap a WCF-ben, de egy 3-4mbyte-os pluginban nem volt magától érthetődő (gondolom én), ezért pl. a SL2 nem is tudta (maradt a jó öreg basicHttpBinding-> HTTP+SOAP). Most egy (még) titkos projekt keretében bináris adatok kellene Server-Kliens kommunikációban Silverlight-ba küldeni, és azt tudtam hogy “komolyabb” binding-ot nem tud az SL, de rájöttem (rákerestem Google-ben és Bing-ben) hogy építeni tudok sajátot, így azzal megoldható a történet :
<customBinding> <binding name="binaryHttpBinding"> <binaryMessageEncoding> </binaryMessageEncoding> <httpTransport> </httpTransport> </binding> </customBinding> …
<endpoint address="" binding="customBinding" bindingConfiguration="binaryHttpBinding" contract="IService"> <identity> <dns value="localhost" /> </identity> </endpoint>És kész… lőn bináris kommunikáció HTTP felett Silverlight-ban! October 22 MEF, avagy készítsünk kiterjeszthető alkalmazásokat 0.Előbb vagy útóbb minden fejlesztő szembesül azzal a problémával, hogy olyan alkalmazást kellene írni, amely tulajdonképpen egy keretrendszer bizonyos alapfunkciókkal, amihez idővel újabb és újabb modulok kerülnek majd illesztésre. Ha ez egy zárt projekt, és mi vagyunk a fejlesztői a keretnek és a moduloknak is, akkor nem is biztos hogy “keretrendszert” építünk általános megoldásokkal, hanem egyszerűen add new project, add refenrece, aztán ‘jónapot, had ‘szóljon, hivatkozunk az új dolgokra, rebuild, már mehet is az új exe+dll valahogy a usereknek. Ez a megoldás gyors, egyszerű, ellenben ha sokan dolgozunk a projekten pl. *nd*aiakkal :D, és nem kellőképen dokumentált a fejlesztés módja, akkor egy nagy káosz kialakulásának leszünk jobb esetben csak szemtanui, rosszabb esetben résztvevői. Mit lehet tenni? Alkutunk egy saját leíró nyelvet: XML-ben össze lehet tenni a felületet, algoritmust, szabályokat, stb. Publikáljuk a “leírónyelvünk” specifikációját, és a modul futtatása nem más XML parszolás (saját parszerrel), majd futtatás… Nem marad más hátra, minthogy dll-t gyártatunk az önjelölt modulfejlesztőkkel, amit _nem_ teszünk be a keretalkalmazásba, és ezt a modult valahogy elérjük futási időben. Milyen lehetőségeink vannak Reflection-el?
Assembly a = Assembly.LoadFile(dll_path); Type t = null; foreach (Type item in a.GetTypes()) { if (item.Name == "EztInditsdEl") { t = item; break; } } if (t!= null && t.BaseType == typeof(Form)) { ConstructorInfo ci= t.GetConstructor(new Type[0]); object o= ci.Invoke(null); Form f = o as Form; f.MdiParent = this; f.Show(); } else { throw new Exception("hiba a modulban"); } Persze ezt lehet fokozni, konkrét osztálynevekkel, interfészekkel, attributumokkal, stb. A jól definiált “korlátokat”, kötelezettségeket határozunk meg, amiket be kell tartania a modul fejlesztőjének. namespace ModulBase { public interface IModul { void Kiir(string mitirki); string Beolvas(string kerdes); } } namespace Modul1 { public class MyModul:ModulBase.IModul { #region IModul Members public void Kiir(string mitirki) { Console.WriteLine(mitirki); } public string Beolvas(string kerdes) { Console.Write(kerdes); return Console.ReadLine(); } #endregion } }Alkalmazás: Assembly a = Assembly.LoadFile(dll_path); ModulBase.IModul modul =null; foreach (Type item in a.GetTypes()) { if ((item.GetInterface(typeof(ModulBase.IModul).FullName)) != null) { object o= item.GetConstructor(new Type[0]).Invoke(null); modul = o as ModulBase.IModul; break; } } if (modul != null) { modul.Kiir("alma"); string valasz = modul.Beolvas("barack"); Console.WriteLine(valasz); } else { throw new Exception("hiba a modulban"); } Mint látható itt Reflection-t csak a példányosításra használjuk, utána már az interfészünkön keresztül programozzuk a modult. (persze lehetne még fokozni, rengeteg egyéb ügyesebb-okosabb, de rosszabb megoldás is van…) Rengeteg olyan általános probléma van ami minden moduláris alkalmazásnál előjön. Tipikus generikus problémák amikre tipikus generikus válasz adható… Minek feltalálnunk újra a spanyolviaszt?!?! Ekkor jön be a MEF-Managed Extensibility Framework, amely választ ad ezen generikus problémákra, ill. előbb-útobb a .Net része lesz, vagyis elfogadottá válik, így máris megvan a “szerződés” a keret- ill. a modul-alkalmazás fejlesztője között… A témával egyelőre még nem foglalkoztam sokat, de amit láttam eddig az felkeltette az érdeklődésemet, így útjára indítok egy sorozatot, ami sorra veszi szépen a MEF-es fejlesztés mérföldköveit… |
|
||||||||||||
|
|