Výběr mikrofonu pro nahrávání hlasu k videím



Krásný večer všem! Potřeboval bych poradit, co se týče mikrofonu k počítači (notebooku). Na začátek bych chtěl říct, že jsem naprosté dřevo a vůbec se v tom nevyznám:D Proto se ptám tady.Jde o to, že provozuji stránku na Facebooku, nicméně bych chtěl posunout svůj projekt někam dál a využít platformu YouTube, kde bych nahrával videa s danou tématikou a kde bych PŘEDEVŠÍM mluvil. Díval jsem se na různé modely, ovšem je jich strašná spousta a mnoho z nich stojí docela dost peněz, což na začátek nechci. Co ale také nechci, je podprůměrný mikrofon za dvě stovky, který po měsíci vyhodím s tím, že se něco pokazilo nebo porouchalo.. ne. Chtěl bych od Vás poradit, jaký mikrofon za rozumnou cenu na začátek zvolit. Mé podmínky jsou, aby výsledná nahrávka nezněla s přebytečným šumem a okolními zvuky, aby byl hlas krásně slyšet a abych nemusel nic moc profesionálně nastavovat, to bych se doučil až časem, kdy bych sáhl po lepším modelu. Momentálně používám LAPTOP-I3T1SK8M se 4GB pamětí RAM a čipem Intel(R) Pentium(R) CPU N4200 (1.10 GHz) a vůbec nevím, jestli to má na jednotlivé modely vliv, ovšem zmíním to tady. Jak už jsem psal, mikrofon bych využíval hlavně na nahrávání hlasu ve svém pokoji, kdy bych výslednou nahrávku vložil do videa a proložil jednotlivými obrázky, ukázkami a tak. Je možné, že bych někdy v budoucnu také nahrál i nějaký podcast, kde bych hovořil o daném tématu a nechci, aby byly v okolí slyšet zvuky zpívajících andulek za zády, šum větru či podobně rušivé elementy. Díky všem, kteří se v tomto vyznají a poradí mi, který model vybrat a který se opravdu vyplatí (třeba i z vlastní zkušenosti). Koukal jsem se na hodně videí a testů, četl různé články, nicméně všude píšou něco jiného a já pak nevím, jak se vlastně rozhodnout. Ještě jednou díky všem za veškeré rady a tipy. ![](/Client.Images/smileys/3.gif)
Válí se mi doma M-Audio ([https://www.amazon.com/M-Audio-Vocal-Studio-Reco...](https://www.amazon.com/M-Audio-Vocal-Studio-Recording-Microphone/dp/B004MZG1IO) ). Není to špatný mikrofon, má v sobě zvukovku, takže se připojuje přes USB. Mám k němu i odpružený držák a pop filtr. Akorát ten stojánek je rozbitý. Požíval ho syn, přesně k tomu co chceš ty. Jestli máš zájem, pošli nějaký kontakt, pošlu ti fotky a třeba i nahrávku. Toto není to komerční nabídka, ale pokud to může pomoct ve smysluplné činnosti, rád ho levně prodám.
Vypněte si v nastavení zvuková cvičení (reproduktor). Pokud nevíte jak, napište váš OS, prohlížeč, zařízení. Přesně, jak píše JanLyko, ještě bych doplnil, že je třeba nastavit úroveň pro mikrofon na max přímo v systému (Skype si nastavuje úroveň sám), **mít vypnuté všechny "zhnusňovače" pro mikrofon, např. potlačení šumu** (se zapnutými Duolingo nerozumí skoro ničemu), problém může být i v nízké propustnosti připojení k Internetu směrem ven (upload). <p>v tomto pořadí: b (s podrobným popisem manipulace níže), a (vyhláskováno), c.</p><p>c je pro mě „typické technické řešení“: nejprve se rozhodnete, jak specifikovat dobu trvání, poté určíte data potřebná pro tento algoritmus. spravovat je však pouze dva další ovládací prvky a uživatelé neznají možnosti, které mají před sebou. to znamená, že pokud jsou vaši uživatelé technici/analytičtí myslitelé a je nejjednodušší je implementovat, jděte na to.</p><p>b by bylo vhodnější:</p><p><img src="https://i.stack.imgur.com/fl7eg.png" alt="enter image description here"></p><p>minimální požadavky:</p><ul> <li>ovládání „předvolby“ a ovládání data a času jsou vždy k dispozici (nikdy zakázáno)</li> <li>změnou předvolby se změní čas zobrazený v ovládacích prvcích rozsahu</li> <li>změnou ovládacích prvků rozsahu se změní předvolba na „ostatní“</li> </ul><p>téměř perfektní:</p><ul> <li>porovnejte ruční výběr s vašimi předvolbami a zobrazte „jiné“ pouze v případě, že neexistuje žádná shoda</li> <li>když uživatel ručně vybere „jiné“, zobrazí se nápověda jako „zde vyberte začátek a konec data“</li> </ul><p>výhody:</p><ul> <li>uživatelé s nejasnou představou o vaší aplikaci mají řadu typických možností</li> <li>uživatelé získají okamžitou a konkrétní zpětnou vazbu pro svůj výběr</li> <li>výběr může být upřesněn, např. „další 3 týdny“ lze snadno upravit na „4 týdny“</li> </ul><p>varianty:</p><ul> <li>místo „jiných“ generujte vhodné textové reprezentace (např. „příštích 17 dní“).</li> <li>pokud je aplikace používána většinou běžnými častými uživateli (málo příležitostných uživatelů), zvažte bezplatné zadávání textu, jako je hisham, doporučeno: kliknout a zadat tři časy v daném dni je v pořádku, pro zadávání 30 za hodinu je bolest a volný text vyhraje.<br> (nedokážu si představit jednoduché kombinované rozhraní, které nějakým způsobem neznevýhodňuje začínající uživatele, ale pokud očekáváte širokou škálu uživatelů, možná budete muset za to zvážit některá řešení)</li> </ul><p>poznámky k rozvržení:</p><ul> <li>vynechal bych „z“ čistě pro čistý vzhled, ale je tu kompromis. obecně se snažím dát ovládacím prvkům stejnou velikost a postavit je na několik řádků, abych se vyhnul vzhledu „neklidného tvaru“.</li> <li>seskupte předvolby skupiny a výběr data společně (tj. jim poskytněte určitou vzdálenost od ostatních výběrů)</li> <li>"trvání" je samozřejmě hloupý štítek, promiň;)</li> </ul><hr><p>(vedlejší poznámka: instinktivně bych předpokládal interval sedmi dnů, abych odešel „od 17. února, 0:00 do 23. února, 23: 59: 59,9999 ..“, ale nejsem si jistý, jestli je tento univerzální.)</p> <p>měli byste se držet společné úmluvy o něčem takovém.</p><p>pokud jsou vstupy nastaveny jako tabulkový procesor, lidé pochopí, že stisknutím záložky přejdou na další záznam a první záznam bude zpracován.</p><p>protože říkáte, že se jedná o aplikaci technické podpory, nezní to tak, jako byste to udělali, takže bych řekl, že byste měli mít tlačítko.</p><p>to znamená, že profesionální uživatelé vždy ocení klávesové zkratky, takže práce s kartou <strong>také</strong> zní jako dobrý nápad.</p> <p>v plánech provádění byste se neměli příliš spoléhat na procenta nákladů. jedná se o <em> vždy odhadované náklady</em>, a to i v plánech po provedení s „skutečnými“ čísly pro věci, jako je počet řádků. odhadované náklady jsou založeny na modelu, který funguje velmi dobře pro účel, pro který je určen: umožnění optimalizátoru zvolit mezi různými plány provádění kandidátů pro stejný dotaz. informace o nákladech jsou zajímavé a faktor, který je třeba zvážit, ale zřídka by měla být primární metrikou pro ladění dotazů. interpretace informací plánu provádění vyžaduje širší pohled na prezentovaná data.</p><p><strong> itemtran clustered index seek operator </strong></p><p><img src="https://i.stack.imgur.com/lvet6.jpg" alt="itemtran clustered index seek"></p><p>tento operátor jsou skutečně dvě operace v jednom. nejprve operace vyhledávání indexu najde všechny řádky, které odpovídají predikátu <code>product\_code\_v42 = 'm10bolt'</code>, pak každý řádek použije zbytkový predikát <code>bit\_field\_v41 &amp; 4 = 0</code>. dochází k implicitní konverzi <code>bit\_field\_v41</code> z jejího základního typu (<code>tinyint</code> nebo <code>smallint</code>) na <code>integer</code>.</p><p>k převodu dochází, protože <a href="https://msdn.microsoft.com/en-us/library/ms174965.aspx">bitový operátor and</a> (&amp;) vyžaduje, aby oba operandy byly stejného typu. implicitní typ konstantní hodnoty '4' je celé číslo a <a href="https://msdn.microsoft.com/en-us/library/ms190309.aspx">pravidla priority datového typ</a> znamená, že je převedena hodnota pole <code>bit\_field\_v41</code> s nižší prioritou.</p><p>problém (jako je) se snadno opraví zápisem predikátu jako <code>bit\_field\_v41 &amp; convert(tinyint, 4) = 0</code> - což znamená, že konstantní hodnota má nižší prioritu a je převedena (během konstantního skládání) spíše než hodnota sloupce. pokud je <code>bit\_field\_v41</code> <code>tinyint</code>, nedojde k žádné konverzi. podobně lze použít funkci <code>convert(smallint, 4)</code>, pokud <code>bit\_field\_v41</code> je <code>smallint</code>. to znamená, že v tomto případě <em> převod není problém s výkonem</em>, ale stále je dobrým zvykem porovnávat typy a vyhýbat se implicitním převodům tam, kde je to možné.</p><p>hlavní část odhadovaných nákladů na toto hledání je až do velikosti základní tabulky. zatímco seskupený klíč indexu je sám o sobě poměrně úzký, velikost každého řádku je velká. definice tabulky není uvedena, ale pouze sloupce použité v pohledu přidávají významnou šířku řádku. protože seskupený index zahrnuje všechny sloupce, vzdálenost mezi seskupenými klíči indexu je šířka <em> řádek</em>, nikoli šířka <em> indexové klíče</em>. použití přípon přípon verzí v některých sloupcích naznačuje, že skutečná tabulka obsahuje ještě více sloupců pro předchozí verze.</p><p>když se podíváme na sloupce vyhledávání, zbytkového predikátu a výstupu, výkon tohoto operátora lze zkontrolovat izolovaně vytvořením ekvivalentního dotazu (<code>1 &lt;&gt; 2</code> je trik, který zabraňuje auto-parametrizaci, rozpor je odstraněn optimalizátorem a nezobrazí se v plánu dotazů):</p><pre><code>select it.booking\_no\_v32, it.qtycheckedout, it.qtyreturned, it.trans\_qty, it.trans\_type\_v41 from dbo.tblitemtran as it where 1 &lt;&gt; 2 and it.product\_code\_v42 = 'm10bolt' and it.bit\_field\_v41 &amp; convert(tinyint, 4) = 0; </code></pre><p>výkon tohoto dotazu se studenou datovou mezipamětí je zajímavý, protože čtení (forward) by bylo ovlivněno fragmentací tabulky (seskupený index). klastrovací klíč pro tuto tabulku vyzývá k fragmentaci, takže by mohlo být důležité tento index pravidelně udržovat (reorganizovat nebo znovu sestavovat) a pomocí vhodného <code>fillfactor</code> umožnit místo pro nové řádky mezi okny údržby indexů.</p><p>provedl jsem test účinku fragmentace na čtení předem pomocí vzorových dat generovaných pomocí <a href="https://www.red-gate.com/products/sql-development/sql-data-generator/">sql data generator</a> . při použití stejného počtu řádků tabulky, jaké jsou uvedeny v plánu dotazů na otázku, vyústil vysoce fragmentovaný klastrovaný index do <code>select * from view</code> po 15 sekundách po <code>dbcc dropcleanbuffers</code>. stejný test za stejných podmínek s čerstvě obnoveným seskupeným indexem v tabulce itemtrans byl dokončen za 3 sekundy.</p><p>pokud jsou data tabulky obvykle zcela v mezipaměti, je problém fragmentace mnohem méně důležitý. ale i při nízké fragmentaci mohou široké řádky tabulky znamenat, že počet logických a fyzických čtení je mnohem vyšší, než by se dalo očekávat. můžete také experimentovat s přidáním a odebráním explicitního <code>convert</code>, abyste potvrdili mé očekávání, že implicitní problém s převodem zde není důležitý, s výjimkou porušení doporučených postupů.</p><p>více k tomuto bodu je odhadovaný počet řádků opouštějících operátora vyhledávání. odhad času optimalizace je 165 řádků, ale v době provedení bylo vyrobeno 4 226 kusů. k tomuto bodu se vracím později, ale hlavním důvodem nesrovnalosti je to, že selektivita zbytkového predikátu (zahrnující bitový-and) je pro optimalizátor velmi obtížná předvídat - ve skutečnosti se uchyluje k hádání.</p><p><strong> operátor filtru </strong></p><p><img src="https://i.stack.imgur.com/mayng.jpg" alt="filter operator"></p><p>zobrazuji zde predikát filtru většinou, abych ilustroval, jak jsou dva seznamy <code>not in</code> kombinovány, zjednodušeny a poté rozšířeny, a také poskytuji odkaz pro následující diskusi o hašovacích zápasech. testovací dotaz z požadavku lze rozšířit tak, aby zahrnoval jeho účinky a určoval vliv operátora filtru na výkon:</p><pre><code>select it.booking\_no\_v32, it.trans\_type\_v41, it.trans\_qty, it.qtyreturned, it.qtycheckedout from dbo.tblitemtran as it where it.product\_code\_v42 = 'm10bolt' and it.bit\_field\_v41 &amp; convert(tinyint, 4) = 0 and ( ( it.trans\_type\_v41 not in (2, 3, 6, 7, 18, 19, 20, 21, 12, 13, 22) and it.trans\_type\_v41 not in (6, 7) ) or ( it.trans\_type\_v41 not in (6, 7) ) or ( it.trans\_type\_v41 in (6, 7) and it.qtycheckedout = 0 ) or ( it.trans\_type\_v41 in (6, 7) and it.qtycheckedout &gt; 0 and it.trans\_qty - (it.qtycheckedout - it.qtyreturned) &gt; 0 ) ); </code></pre><p>operátor compute scalar v plánu definuje následující výraz (samotný výpočet je odložen, dokud není výsledek vyžadován pozdějším operátorem):</p><pre><code>[expr1016] = (trans\_qty - (qtycheckedout - qtyreturned)) </code></pre><p><strong> hash match operator </strong></p><p>provádění spojení na datových typech znaků není důvodem vysokých odhadovaných nákladů tohoto operátora. popis ssms zobrazuje pouze položku hash keys probe probe, ale důležité detaily jsou v okně ssms properties.</p><p>operátor hash match vytvoří hašovací tabulku s použitím hodnot ve sloupci <code>booking\_no\_v32</code> (build hash keys!) z tabulky itemtran a poté zkoumá shody pomocí sloupce <code>booking\_no</code> (hash keys probe) od tabulka rezervace. popisek ssms by také normálně zobrazoval zbytky sondy, ale text je příliš dlouhý na popis a je jednoduše vynechán.</p><p>rezidua sondy je podobná zbytku pozorovanému po hledání indexu dříve; zbytkový predikát je vyhodnocen na všech řádcích, které hash odpovídají, aby se určilo, zda by měl být řádek předán nadřazenému operátorovi. nalezení hash zápasů v dobře vyvážené hashovací tabulce je extrémně rychlé, ale použití komplexního zbytkového predikátu na každý řádek, který odpovídá, je při porovnání poměrně pomalé. popisek hash match v aplikaci plan explorer zobrazuje podrobnosti, včetně zbytkového výrazu probe:</p><p><img src="https://i.stack.imgur.com/c1nkp.jpg" alt="hash match operator"></p><p>zbytkový predikát je složitý a zahrnuje kontrolu stavu průběhu rezervace, když je sloupec k dispozici v tabulce rezervací. popisek také ukazuje stejný nesoulad mezi odhadovanými a skutečnými počty řádků viděnými dříve v hledání indexu. může se zdát podivné, že většina filtrování se provádí dvakrát, ale je to jen optimistický optimalizátor. neočekává, že části filtru, které lze posunout dolů ze zbytku sondy, odstraní všechny řádky (odhady počtu řádků jsou před a za filtrem stejné), ale optimalizátor ví, že by to mohlo být špatné. pravděpodobnost brzkého filtrování řádků (snížení nákladů na spojení hash) stojí za malou cenu extra filtru. celý filtr nelze posunout dolů, protože obsahuje test na sloupci z tabulky rezervací, ale většinou to může být. úplný test je stále vyžadován v testu zbytkové hodnoty hash pro správnost.</p><p>podceňování počtu řádků je problém pro operátora hash match, protože množství paměti rezervované pro hashovací tabulku je založeno na odhadovaném počtu řádků. pokud je paměť příliš malá pro velikost hashovací tabulky požadované v době běhu (kvůli většímu počtu řádků), hashova tabulka <strong> rekurzivně rozlévá </strong> na fyzickou <em> tempdb</em> úložiště, což často vede k velmi slabému výkonu. v nejhorším případě prováděcí motor zastaví rekurzivní rozlití hashovacích kbelíků a uchytí se k algoritmu <em> velmi pomalý</em> rozlití hash (rekurzivní nebo záchranná opatření) je nejpravděpodobnější příčinou problémů s výkonem nastíněných v otázce (nikoli sloupců spojení typu nebo implicitních konverzí). hlavní příčinou by byl server rezervující příliš málo paměti pro dotaz na základě nesprávného odhadu počtu řádků (kardinality).</p><p>je smutné, že před sql server 2012 není v plánu provádění naznačeno, že operace hašování překročila přidělení paměti (které nemůže být dynamicky růst po rezervování před spuštěním spuštění, i když má server velké množství volné paměti) a musela se přelít do tempdb. je možné monitorovat <a href="https://msdn.microsoft.com/en-us/library/ms190736.aspx">hash warning event class</a> pomocí profiler, ale může být obtížné korelovat varování s konkrétním dotazem.</p><p><strong> oprava problémů </strong></p><p>těmito třemi problémy jsou fragmentace, zbytková složka sondy v operátorovi hašovací shody a nesprávný odhad mohutnosti vyplývající z hádání při hledání indexu.</p><p><strong> doporučené řešení </strong></p><p>zkontrolujte fragmentaci a v případě potřeby ji opravte, naplánujte údržbu tak, aby index zůstal přijatelně organizovaný. obvyklý způsob, jak opravit odhad kardinality, je poskytnout statistiku. v takovém případě optimalizátor potřebuje statistiku kombinace (<code>product\_code\_v42</code>, <code>bitfield\_v41 &amp; 4 = 0</code>). nemůžeme vytvořit statistiky výrazu přímo, takže musíme nejprve vytvořit vypočítaný sloupec pro výraz bitového pole a poté vytvořit manuální statistiku více sloupců:</p><pre><code>alter table dbo.tblitemtran add bit3 as bit\_field\_v41 &amp; convert(tinyint, 4); create statistics [stats dbo.itemtran (product\_code\_v42, bit3)] on dbo.tblitemtran (product\_code\_v42, bit3); </code></pre><p>definice vypočteného sloupcového textu se musí přesně shodovat s textem v definici pohledu, aby se statistika mohla použít, takže by se mělo korigovat zobrazení, aby se vyloučila implicitní konverze, a současně by se mělo dbát na to, aby byla zajištěna shoda textu.</p><p>statistiky ve více sloupcích by měly vést k mnohem lepším odhadům, což výrazně snižuje pravděpodobnost, že operátor hashovací metody použije rekurzivní rozlití nebo algoritmus výpomoci. přidání vypočítaného sloupce (což je operace pouze s metadaty a nezabere žádné místo v tabulce, protože není označeno <code>persisted</code>) a statistika více sloupců je můj nejlepší odhad při prvním řešení.</p><p>při řešení problémů s výkonem dotazů je důležité měřit věci jako uplynulý čas, využití procesoru, logická čtení, fyzická čtení, typy čekání a doby trvání atd. atd. může být také užitečné spustit části dotazu samostatně pro ověření podezření na příčiny, jak je uvedeno výše.</p><p>v některých prostředích, kde není nejdůležitější pohled na data, může být užitečné spustit proces na pozadí, který zhmotňuje celý pohled do tabulky snímků každou tak často. tato tabulka je pouze normální základní tabulka a lze ji indexovat pro čtení dotazů, aniž byste se museli starat o dopad na výkon aktualizace.</p><p><strong> zobrazit indexování </strong></p><p>nenechte se v pokušení přímo indexovat původní pohled. výkon čtení bude úžasně rychlý (jediné hledání v pohledu indexu), ale (v tomto případě) budou všechny problémy s výkonem ve stávajících plánech dotazů přeneseny do dotazů, které upravují všechny sloupce tabulky, na které se v pohledu odkazuje. dotazy, které mění řádky základní tabulky, budou skutečně ovlivněny velmi špatně.</p><p><strong> pokročilé řešení s částečným indexovaným pohledem </strong></p><p>pro tento konkrétní dotaz existuje částečné řešení indexovaného pohledu, které opravuje odhady kardinality a odstraňuje zbytky filtru a sondy, ale je založeno na některých předpokladech o datech (většinou můj odhad na schématu) a vyžaduje odbornou implementaci, zejména pokud jde o vhodné indexy pro podporu plánů údržby indexovaných pohledů. sdílím níže uvedený kód pro zájem, nenavrhuji, abyste jej implementovali bez <em> velmi opatrní</em> analýzy a testování.</p><pre><code>-- indexed view to optimize the main view create view dbo.v1 with schemabinding as select it.id, it.product\_code\_v42, it.trans\_type\_v41, it.booking\_no\_v32, it.trans\_qty, it.qtyreturned, it.qtycheckedout, it.qtyreserved, it.bit\_field\_v41, it.prep\_on, it.from\_locn, it.trans\_to\_locn, it.pdate, it.firstdate, it.ptimeh, it.ptimem, it.retndate, it.bookdate, it.timebookedh, it.timebookedm, it.timebookeds, it.del\_time\_hour, it.del\_time\_min, it.return\_to\_locn, it.return\_time\_hour, it.return\_time\_min, it.assignto, it.assigntype, it.inrack from dbo.tblitemtran as it join dbo.tblbookings as tb on tb.booking\_no = it.booking\_no\_v32 where ( it.trans\_type\_v41 not in (2, 3, 7, 18, 19, 20, 21, 12, 13, 22) and it.trans\_type\_v41 not in (6, 7) and it.bit\_field\_v41 &amp; convert(tinyint, 4) = 0 ) or ( it.trans\_type\_v41 not in (6, 7) and it.bit\_field\_v41 &amp; convert(tinyint, 4) = 0 and tb.bookingprogressstatus = 1 ) or ( it.trans\_type\_v41 in (6, 7) and it.bit\_field\_v41 &amp; convert(tinyint, 4) = 0 and it.qtycheckedout = 0 ) or ( it.trans\_type\_v41 in (6, 7) and it.bit\_field\_v41 &amp; convert(tinyint, 4) = 0 and it.qtycheckedout &gt; 0 and it.trans\_qty - (it.qtycheckedout - it.qtyreturned) &gt; 0 ); go create unique clustered index cuq on dbo.v1 (product\_code\_v42, id); go </code></pre><p>existující pohled se vyladil, aby používal indexované zobrazení výše:</p><pre><code>create view [dbo].[vwreallyslowview2] as select i.booking\_no\_v32 as bkno, i.trans\_type\_v41 as trantype, b.assigned\_to\_v61 as assignbk, b.order\_date as dateo, b.hourbooked as hbooked, b.minbooked as mbooked, b.secbooked as sbooked, i.prep\_on as pon, i.from\_locn as flocn, i.trans\_to\_locn as ttlocn, case i.prep\_on when 'y' then i.pdate else i.firstdate end as prdate, i.ptimeh as prtimeh, i.ptimem as prtimem, case when i.retndate &lt; i.firstdate then i.firstdate else i.retndate end as rdatev, i.bit\_field\_v41 as bitfield, i.firstdate as fdatev, i.bookdate as dbooked, i.timebookedh as tbookh, i.timebookedm as tbookm, i.timebookeds as tbooks, i.del\_time\_hour as dth, i.del\_time\_min as dtm, i.return\_to\_locn as rtlocn, i.return\_time\_hour as rth, i.return\_time\_min as rtm, case when i.trans\_type\_v41 in (6, 7) and i.trans\_qty &lt; i.qtycheckedout then 0 when i.trans\_type\_v41 in (6, 7) and i.trans\_qty &gt;= i.qtycheckedout then i.trans\_qty - i.qtycheckedout else i.trans\_qty end as trqty, case when i.trans\_type\_v41 in (6, 7) then 0 else i.qtycheckedout end as myqtycheckedout, case when i.trans\_type\_v41 in (6, 7) then 0 else i.qtyreturned end as retqty, i.id, b.bookingprogressstatus as bkprog, i.product\_code\_v42, i.return\_to\_locn, i.assignto, i.assigntype, i.qtyreserved, b.deprepon, case b.deprepon when 1 then b.deprepdatetime else i.retndate end as deprepdatetime, i.inrack from dbo.v1 as i with (noexpand) join dbo.tblbookings as b on b.booking\_no = i.booking\_no\_v32 join dbo.tblinvmas as m on i.product\_code\_v42 = m.product\_code; </code></pre><p>příklad dotazu a plán provedení:</p><pre><code>select vrsv.* from dbo.vwreallyslowview2 as vrsv where vrsv.product\_code\_v42 = 'm10bolt'; </code></pre><p><img src="https://i.stack.imgur.com/vg5cz.jpg" alt="new execution plan"></p><p>v novém plánu má hash shoda <em> žádný zbytkový predikát</em>, existuje <em> žádný složitý filtr</em>, <em> žádný zbytkový predikát</em> zapnuto hledat indexované zobrazení a <em> odhady kardinality</em> jsou přesně správné.</p><p>jako příklad toho, jak by byly ovlivněny plány vložení/aktualizace/odstranění, je to plán vložení do tabulky itemtrans:</p><p><img src="https://i.stack.imgur.com/kffk5.jpg" alt="insert plan"></p><p>zvýrazněná část je nová a vyžaduje se pro údržbu indexovaného pohledu. cívka tabulky nahradí vložené řádky základních tabulek pro údržbu indexovaného pohledu. každý řádek je spojen s tabulkou rezervací pomocí hledání seskupeného indexu, poté filtr použije složité predikáty klauzule <code>where</code>, aby se zjistilo, zda je třeba řádek přidat do pohledu. pokud ano, provede se vložení do seskupeného indexu pohledu.</p><p>stejný test <code>select * from view</code> provedený dříve byl dokončen za 150 ms s indexovaným pohledem na místě.</p><p>poslední věc: všiml jsem si, že váš server 2008 r2 je stále v rtm. neopraví to vaše problémy s výkonem, ale <a href="https://www.microsoft.com/en-us/download/details.aspx?id=30437">service pack 2 pro 2008 r2</a> je k dispozici od července 2012 a existuje mnoho dobrých důvodů, jak udržet co nejaktuálnější s aktualizacemi service pack.</p> C ++ libmedia knihovna není součástí veřejného API. Někteří lidé používají to, ale je to velmi znechucený, protože by to mohlo zlomit na některých zařízeních a / nebo v některé z budoucích verzí systému Android.


Vyvinul jsem zvukový záznam aplikace, a věřte mi, audio podpora je velmi konzistentní napříč různými zařízeními, je to **velmi složité** , takže IMO pomocí libmedia přímo je špatný nápad.


Jediný způsob, jak zachytit surový zvuk s veřejným API je použít Java [AudioRecord](http://developer.android.com/reference/android/media/AudioRecord.html) třídu. Bude vám dává PCM data, která pak můžete umístit přechází na jednotce C optimalizovány rutiny.


Alternativně, i když to je trochu těžší, mohli byste napsat C / C ++ wrapper kolem třídy Java AudioRecord, jak je to možné instance Java objektů a volání metod přes JNI. <p>myslím, že otázka je:</p><blockquote> <p>"jak mohu získat přesně to, co chci od svých uživatelů tím, že jim vstup nesmyslně usnadní?"</p> </blockquote><p>jedinou instancí, kde vidím uživatele, kteří skutečně potřebují používat html přímo v nějaké formě vstupu, je, když/pokud formátují tabulková data. v takovém případě je však mnohem snazší dát jim formu, která dokáže udělat totéž, nebo jakoukoli z populárních sítí dostupných v různých knihovnách.</p><p>myslím, že zlatým pravidlem je, alespoň pro mě, použití systému značkování, které není html, které mohou vaši zpracovatelé formulářů použít k vytvoření krásného, ​​standardu vyhovujícího a sémanticky správného html.</p><p>skenery třetích stran mohou (obvykle) detekovat většinu problémů s nahranými soubory. osobně se mi líbí clamav - který je k dispozici pro * nix i windows.</p><p>to řeší problém zajistit, že je vše uspořádáno pěkně, správně naformátováno a návštěvníkům nejsou podávány žádné nežádoucí věci, nebo je to tak?</p><p>druhou věcí, kterou musíte udělat, je zkontrolovat jakýkoli obsah, který předloží, člověk musí mít na tom nějakou roli, nebo bude něco chybět. je tento obrázek vhodný? vede tento odkaz k malwaru nebo k něčemu jinému, na co byste raději nechtěli odkazovat? atd.</p><p>poskytnutí mechanismu označování pomáhá, ale není vždy účinné. pokud například na stackoverflow.com odpovíte na dvouletou otázku, otázka se okamžitě přesune na titulní stránku, kde komunita určitě zkontroluje, co bylo právě přidáno. ne všechny systémy jsou navrženy s ohledem na tento druh ochrany.</p><p>pokud uděláte značné množství svazku, pokud jde o obsah příspěvků od uživatelů, pravděpodobně stojí za to prozkoumat pomocí dodavatelů, kteří jednoduše zkontrolují podání a ujistí se, že nevhodná média/odkazy jsou rychle vyřazeny. nebo si možná můžete vyhledat pomoc od své komunity uživatelů (pokud existuje), aby udělali totéž, výměnou za nějaký druh zvláštních privilegií nebo výhod, které běžní uživatelé nemají rádi.</p> <p>registry <code>"*</code> a <code>"+</code> jsou pro schránku systému (<code>:help registers</code>). v závislosti na vašem systému mohou dělat různé věci. například v systémech, které nepoužívají x11 jako osx nebo windows, se registr <code>"*</code> používá pro čtení a zápis do systémové schránky. na systémech x11 lze použít oba registry. pro více informací viz <code>:help x11-selection</code>, ale v podstatě <code>"*</code> je analogický s x11 <em>primárním</em> výběrem (který obvykle kopíruje věci, které vyberete myší a pastami pomocí prostřední tlačítko myši) a <code>"+</code> je obdobné jako u x11 <em>clipboard</em> výběr (což je vlastní schránka).</p><p>pokud vše, co šlo přes hlavu, zkuste pomocí <code>"*yy</code> nebo <code>"+yy</code> zkopírovat řádek do schránky systému. za předpokladu, že máte vhodné možnosti kompilace, by měl fungovat jeden nebo druhý. možná budete chtít přeměnit to na něco výhodnější pro vás. například můžete v souboru ~/.vimrc zadat <code>vnoremap &lt;c-c&gt; "*y</code>, abyste mohli vizuálně vybrat a stisknout <kbd>ctrl</kbd>+<kbd>c</kbd> vyskočit do schránky systému.</p><p>mějte na paměti, že kopírování/vkládání ze systémové schránky <strong>nebude fungovat</strong> pokud <code>:echo has('clipboard')</code> vrací 0. v tomto případě není vim zkompilován s funkcí <code>+clipboard</code> a budete muset nainstalovat jinou verzi nebo znovu zkompilovat . některé linuxové distribuce standardně dodávají minimální instalaci vimu, ale obecně, pokud <strong>nainstalujte balíček <code>vim-gtk</code> nebo <code>vim-gtk3</code></strong> můžete získat další funkce.</p><p>můžete se také podívat na volbu <code>'clipboard'</code> popsanou v <code>:help cb</code>. v tomto případě můžete <code>:set clipboard=unnamed</code> nebo <code>:set clipboard=unnamedplus</code> provést všechny operace vyhození/smazání automaticky zkopírovat do systémové schránky. to by mohlo být nepříjemností v některých případech, kdy ukládáte něco jiného do schránky, protože to přepíše.</p><p>chcete-li vložit, můžete použít <code>"+p</code> nebo <code>"*p</code> (opět v závislosti na vašem systému a/nebo požadovaném výběru) nebo je můžete namapovat na něco jiného. typicky je zadávám, ale často se nacházím v režimu vkládání. pokud jste v režimu vkládání, můžete je stále vkládat pomocí správného odsazení pomocí <code>&lt;c-r&gt;&lt;c-p&gt;*</code> nebo <code>&lt;c-r&gt;&lt;c-p&gt;+</code>. viz <code>:help i\_ctrl-r\_ctrl-p</code>.</p><p>za zmínku stojí také možnost <code>paste</code> vim (<code>:help paste</code>). toto vloží vim do speciálního "režimu vkládání", který zakáže několik dalších možností, což vám umožní snadno vložit do vimu pomocí svého terminálového emulátoru nebo známé zkratky pro vložení multiplexeru. jednoduše zadejte <code>:set paste</code>, abyste jej aktivovali, vložte obsah a potom zadejte <code>:set nopaste</code>, abyste jej zakázali. alternativně můžete pomocí volby <code>pastetoggle</code> nastavit kód klíče, který přepíná režim (<code>:help pastetoggle</code>). doporučuji používat registry namísto těchto možností, ale pokud jsou stále příliš děsivé, může to být vhodné řešení, když si vylepšujete své vim chops.</p><p>podrobnější informace naleznete v tématu <code>:help clipboard</code>.</p> Upřímně řečeno, já bych jít s sestavení .NET, jak se zdá být jednodušší řešení a těsněji obsahoval řešení, než zahájit nový proces. Některé z důvodů, proč jsem pocit, že způsob, jakým jsou tyto:


1. S nástrojem příkazového řádku, že jste na trh nový proces. Takže je to zcela samostatný proces ID běh a bude probíhat mimo rozsah a aplikační domény vaší stávající aplikace. Veškerá komunikace mezi aplikací a procesu bude přes hranice procesu a bude muset být provedeno buď s telefonem, jakési sdílené paměti, nebo nějaký jiný přístup, který by mohl být těžkopádný (zejména při řešení otázek).
2. Se zahájením nového procesu, jste v podstatě ztratí kontrolu nad tímto procesem z vaší aplikace. Pokud vaše aplikace zemře nebo se vypne, budete muset tento proces výslovně zabít - jinak budete muset úchyty zůstat otevřené soubory uzamčeny, atd.
3. Včetně sestavení .NET v aplikaci umožňuje vše spustit ve stejném kontextu (obecně), který umožňuje lepší komunikaci mezi složkami, snadnější ladění a odstraňování poruch (obecně), a jediný způsob je řízena.
4. Máte trochu větší kontrolu nad kódu. Zahájení procesu je v podstatě black-box - nemáte ponětí, co se děje uvnitř ní. Je pravda, že se sestavení .NET máte podobný black-box scénář, ale vzhledem k tomu, že je ve stejném procesu, může mít nějaké další vhled do toho, jak jsou hovory byly provedeny, kde jsou výjimky být hozen, atd. V podstatě mít trochu větší vhled do složky s sestavení .NET spíše než zahájit nový proces.


To jsou jen některé myšlenky z vrcholu mé hlavy. Doufám, že to pomůže. Máte-li dotazy, dejte mi vědět a já vám zpracovat mé odpovědi. Hodně štěstí!! <p>nedávno jsem byl ve vaší přesné situaci. moje společnost chtěla najmout jiného programátora a konkrétně jsem chtěla někoho, kdo má více zkušeností než já, abych se mohl dál učit a růst.</p><p>z rozhovorů jsem byl nejvíc nervózní, a tak jsem se zeptal <a href="https://softwareengineering.stackexchange.com/q/18371/1130">otázka zde</a> .</p><p>abychom to shrnuli, položte otázky, na které znáte odpověď, souvisejí s problémy, které máte, nebo s problémy, které jste v minulosti vyřešili. nesnažte se klást otázky, které jsou mimo vaši hloubku. buďte upřímní, pokud dotazovaný začne mluvit v termínech, kterým nerozumíte, a požádejte ho, aby vám je vysvětlil. poté, co najmete, s vámi bude spolupracovat a budete chtít někoho, kdo vás může mentorovat.</p><p>ukázalo se to skvěle. najali jsme někoho, kdo má mnohem více zkušeností a znalostí než já, a cítím, že se toho hodně učím.</p><p>řekl bych, že je to pro vás oboustranně výhodná situace. nejhorším scénářem je, že si najmete osobu, kterou najmete, a vy jste získali cenné znalosti, které s ní pracujete.</p>