Author Archives: svopex

Jak na problém s přechodem Windows do režimu spánku?

Jeden z počítačů, o které se starám, „z ničeho nic“ přestal usínat. Jak jsem danou situaci vyřešil?

Pokud Windows nechtějí přejít do režimu spánku, i když máme vše řádně nastavené, je možné postupovat následujícím způsobem. Spustíme v administrátorském režimu „%SYSTEMROOT%\System32\powercfg /requests“ a vypíše se nám následující tabulka (zde ve Windows 7):

2015-06-17_16-03-46Zde jsou vidět programy, které blokují přechod Windows do režimu spánku.

Zde je to konkrétně TeamViewer, spuštěná webová kamera a zvukový datový proud (byl spuštěný skype). To bylo v pořádku.

Další položkou je „služba zařazování tisku tiskne dokument“. Počítač měl nainstalován driver pro síťovou tiskárnu, která byla vypnutá, ale v tiskové frontě do této tiskárny byly připraveny k tisku dva soubory. A toto nakonec způsobovalo to, že Windows do režimu spánku nepřecházel. Pro opravu stačilo smazat soubory z tiskové fronty.

Cookie, case senzitivita a .NET Framework

Chrome a Firefox podporují case-senzitivní cookie.
.NET Framework podporuje case-senzitivní cookie.
Ale pozor, například vyhledávání v kolekci Request.Cookies (Request.Cookies[„xxxxxx“], typ HttpCookieCollection) je case-nesenzitivní, což může vést k nepříjemným chybám.
Pokud cookie přejmenujeme tak, že změníme pouze velikost písmen, tak následně se nám může v kolekci Request.Cookies najít původní cookie místo nové, přejmenované…

Pomalý start programu Microsoft Word

Již se mě na několika počítačích stalo, že MS Word se spouštěl extrémně pomalu. Pomohlo následující řešení. Je třeba smazat soubor „Normal.dot“, „Normal.dotm“ nebo „Normal.dotx“, podle verze MS Wordu. Tento soubor je poškozen. Ve Windows 8, Windows 7 a Windows Vista se některý s těchto souborů nachází zde: „%appdata%\Microsoft\Templates“. Po následujícím spuštění Wordu je soubor znovu automaticky vytvořen.

Microsoft SQL Server – kill locku na databázi

Pokud chceme odblokovat lock-nutou databázi na Microsoft SQL Serveru (například pokud chceme přejmenovat databázi, provést obnovu databáze, výmaz databáze…), lze to udělat následujícími způsoby.

První možností je použít tento kód:

SELECT DISTINCT
  name AS database_name,
  session_id,
  host_name,
  login_time,
  login_name,
  reads,
  writes
FROM sys.dm_exec_sessions
    LEFT OUTER JOIN sys.dm_tran_locks ON sys.dm_exec_sessions.session_id = sys.dm_tran_locks.request_session_id
    INNER JOIN sys.databases ON sys.dm_tran_locks.resource_database_id = sys.databases.database_id
  WHERE name ='NazevMeDatabaze'
  ORDER BY name

Následně se nám objeví, kdo má nad databází zámek:

SQL_select_lock

Pak lze použít například „KILL 68„, čímž zámek uvolníme. Výhodou je, že vidíme, kdo má lock a lze vše ručně řídit. Nevýhodou je, že mohou přibýt další zámky před operací, kterou chceme vykonat.

Další možností je použít tento kód:

ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE
--do you stuff here
ALTER DATABASE YourDatabase SET MULTI_USER

Zde je určitou nevýhodou to, že nám zůstanou na databázi naše vlastní zámky a také to, že můžeme zapomenout vrátit databázi do multi-user režimu. Akce provádíme v místě označeném „do you stuff here“.

SendGrid vkládá dvojité konce řádků v e-mailových klientech Outlook a Thunderbird

Služba SendGrid vkládá dvojité konce řádků v e-mailových klientech Outlook a Thunderbird, pokud je nastaveno transfer encoding v MIME na „quoted-printable“. Pro vyřešení problému je třeba nastavit transfer encoding na „7bit“. Popsáno také zde. Bod číslo čtyři.

...
MailMessage message = new MailMessage();
message.BodyTransferEncoding = System.Net.Mime.TransferEncoding.SevenBit;
...

Konverze časové zóny ve webové službě

Datový typ DateTime má v sobě položku DateTimeKind, která může nabývat hodnot Local, Utc, Unspecified. Podle nastavení této hodnoty je po-té provedena konverze časové zóny při volání webové služby.

V případě kindu unspecified se konverze časové zóny neprovádí. V případě kindu local se převede časová zóna volající strany do časové zóny příjemce. V případě kindu UTC se čas také nepřevádí.

Kind se při přenosu nemění.

Zde jsou příklady, jak která operace v C# nastavuje DateTimeKind:

DateTime dt1 = DateTime.Now; // DateTimeKind.Local
DateTime dt2 = DateTime.UtcNow; // DateTimeKind.Utc
DateTime dt3 = new DateTime(2014, 1, 1); // DateTimeKind.Unspecified
DateTime dt4 = DateTime.Now.ToLocalTime(); // DateTimeKind.Local
DateTime dt5 = DateTime.Now.ToUniversalTime(); // DateTimeKind.Utc
DateTime dt6 = DateTime.SpecifyKind(DateTime.Now.ToUniversalTime(), DateTimeKind.Unspecified); // DateTimeKind.Unspecified, pouze změna kindu bez konverze času

Při přenosu času jsme nakonec použili toto řešení:

Struktura:
...
public class WorkLogItemDTO
{
  /// <summary>
  /// Datum pracovního záznamu.
  /// </summary>
  public DateTime Datum { get; set; }

  /// <summary>
  /// Identifikátor klientské časové zóny.
  /// </summary>
  public string TimeZoneID { get; set; }
...
 
Klient (při volání serveru):
...
dto.Datum = item.Datum;
dto.TimeZoneID = TimeZoneInfo.Local.Id;
...

Server:
...
if (item.Datum.Kind != DateTimeKind.Unspecified)
{
  if (string.IsNullOrEmpty(item.TimeZoneID))
  {
    throw new Exception("Casova zona neni vyplnena (WorkLogItemDTO->IdTimeZone).");
  }
  TimeZoneInfo clientTimeZone = TimeZoneInfo.FindSystemTimeZoneById(item.TimeZoneID);
  item.Datum = TimeZoneInfo.ConvertTime(item.Datum, clientTimeZone);
}
...