<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5582409504588846762</id><updated>2024-09-21T15:20:08.963+02:00</updated><category term="Osobiste"/><category term="Batch"/><category term="C# .NET"/><category term="Inne"/><category term="Praca"/><category term="Regex"/><title type='text'>Codzienne myśli informatyka</title><subtitle type='html'>C#, Asp.NET MVC, MVP, LINQ, problemy na jakie napotykam się w pracy i codziennym życiu, a także trochę o mnie i o tym, co robię poza pracą :)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rzepcio.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5582409504588846762/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://rzepcio.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5582409504588846762.post-6409049594030393560</id><published>2011-07-01T02:00:00.004+02:00</published><updated>2011-07-01T08:26:58.482+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Batch"/><category scheme="http://www.blogger.com/atom/ns#" term="Inne"/><category scheme="http://www.blogger.com/atom/ns#" term="Osobiste"/><title type='text'>Kopia zapasowa - bezcenne</title><content type='html'>&lt;div class=&quot;myPost&quot;&gt;&lt;p&gt;Zdarzyło się tak, niestety, że moja dziewczyna straciła dwa dni pracy nad swoją pracą magisterską (szczęście, że tylko tyle), ponieważ przez dłuższy czas nie dysponowała połączeniem z internetem i nie działał DropBox, którego używała, a jak już zaczął działać to... nadpisał nowszy plik starszym (sick! weź tu ufaj czemukolwiek...).&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;div class=&quot;adsense&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;ca-pub-6090249098758584&quot;;
/* Kopia zapasowa - bezcenne */
google_ad_slot = &quot;7642532874&quot;;
google_ad_width = 336;
google_ad_height = 280;
//--&gt;
&lt;/script&gt;&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;&lt;/script&gt;&lt;/div&gt;&lt;h2&gt;DropBox, dlaczego? :(&lt;/h2&gt;&lt;p&gt;Nie będę wszystkiego zwalał na DropBoxa, ponieważ komputer stał bez internetu blisko miesiąc, w tym czasie to samo konto DropBoxa było używane na innym komputerze, więc mogło się coś pokićkać ;) W każdym razie przez ten miesiąc praca magisterska nie miała żadnego backupu (szczęśliwie się złożyło, że przez miesiąc prawie nie była zmieniana :)&lt;/p&gt;&lt;p&gt;Oczywiście mamy wiele możliwości robienia kopii zapasowych, możemy:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;posiadać partycję lustrzaną tzw. mirror&lt;/li&gt;
&lt;li&gt;kopiować plik do innej lokacji, najlepiej na innym dysku&lt;/li&gt;
&lt;li&gt;kopiować plik na dysk zewnętrzny lub pendrive&lt;/li&gt;
&lt;li&gt;wysyłać sobie plik na pocztę&lt;/li&gt;
&lt;li&gt;korzystać z wirtualnego dysku typu DropBox ;)&lt;/li&gt;
&lt;/ul&gt;Możecie pisać, jeśli macie jeszcze jakieś inne sposoby robienia kopii zapasowych :)&lt;/p&gt;&lt;h2&gt;Batch do kopiowania&lt;/h2&gt;&lt;p&gt;Ja chciałbym tutaj napisać o tym, jak można w łatwy sposób kopiować pliki z jednej lokacji do drugiej, bez żmudnego ctrl-c ctrl-v, dodając przy tym do nich znacznik czasu.&lt;/p&gt;&lt;p&gt;Oto batch, który stworzyłem:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;@echo off
SetLocal

:: prepare date/time stamp
&lt;span class=&quot;kwrd&quot;&gt;for&lt;/span&gt; /F &lt;span class=&quot;str&quot;&gt;&quot;tokens=1-4 delims=:., &quot;&lt;/span&gt; %%i &lt;span class=&quot;kwrd&quot;&gt;in&lt;/span&gt; (&lt;span class=&quot;str&quot;&gt;&#39;echo.%time%&#39;&lt;/span&gt;) &lt;span class=&quot;kwrd&quot;&gt;do&lt;/span&gt; (
   (Set HH=0%%i)&amp;amp;(set NN=%%j)&amp;amp;(set SS=%%k)&amp;amp;(Set Sd=%%l)
)
Set &lt;span class=&quot;str&quot;&gt;&quot;HH=%HH:~-2%&quot;&lt;/span&gt;
&lt;span class=&quot;kwrd&quot;&gt;for&lt;/span&gt; /F &lt;span class=&quot;str&quot;&gt;&quot;tokens=1,2,3 delims=/ &quot;&lt;/span&gt; %%A &lt;span class=&quot;kwrd&quot;&gt;in&lt;/span&gt; (&lt;span class=&quot;str&quot;&gt;&#39;Date /t&#39;&lt;/span&gt;) &lt;span class=&quot;kwrd&quot;&gt;do&lt;/span&gt; ( 
    Set DayMonthYear=%%C%%B%%A
)

:: timestamp (yyyymmmdd-hhnnss)
set dtt=&lt;span class=&quot;str&quot;&gt;&quot;%DayMonthYear%_%HH%-%NN%-%SS%&quot;&lt;/span&gt;

:: prepare file and folders
:: format - &lt;span class=&quot;str&quot;&gt;&quot;file.extension&quot;&lt;/span&gt;, &lt;span class=&quot;str&quot;&gt;&quot;*.*&quot;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;for&lt;/span&gt; all,
:: &lt;span class=&quot;str&quot;&gt;&quot;*.txt&quot;&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;for&lt;/span&gt; only txt files or &lt;span class=&quot;str&quot;&gt;&quot;folder\*.*&quot;&lt;/span&gt;
:: &lt;span class=&quot;kwrd&quot;&gt;for&lt;/span&gt; all files within some folder
set fileName=&lt;span class=&quot;str&quot;&gt;&quot;folder\*.*&quot;&lt;/span&gt;
:: format - &lt;span class=&quot;str&quot;&gt;&quot;disc:&quot;&lt;/span&gt;, &lt;span class=&quot;str&quot;&gt;&quot;folder&quot;&lt;/span&gt; or &lt;span class=&quot;str&quot;&gt;&quot;disc:\folder&quot;&lt;/span&gt;
set destinationFolder=&lt;span class=&quot;str&quot;&gt;&quot;d:&quot;&lt;/span&gt;

:: copy with adding timestamp
&lt;span class=&quot;kwrd&quot;&gt;for&lt;/span&gt; %%a &lt;span class=&quot;kwrd&quot;&gt;in&lt;/span&gt; (&lt;span class=&quot;str&quot;&gt;&quot;%fileName%&quot;&lt;/span&gt;) &lt;span class=&quot;kwrd&quot;&gt;do&lt;/span&gt; (
    copy &lt;span class=&quot;str&quot;&gt;&quot;%%a&quot;&lt;/span&gt; &lt;span class=&quot;str&quot;&gt;&quot;%destinationFolder%\%%~na_%dtt%%%~xa&quot;&lt;/span&gt;
)

EndLocal&lt;/pre&gt;&lt;p&gt;Wystarczy skopiować ten kod, wkleić do notatnika, ustalić odpowiednie ścieżki (tzn. fileName i destinationFolder, tak jak jest opisane w komentarzach) i plik zapisać np. jako &quot;copy.bat&quot;. Najlepiej wkleić skrót do takiego pliku do autostartu, wtedy zawsze przy uruchamianiu komputera zostaną odpowiednie pliki przekopiowane (oczywiście, jeśli wyłączamy kiedyś komputer ;)&lt;/p&gt;&lt;p&gt;A czy wy zaczęliście robić backupy zanim was życie pokarało, czy po tym? ;)&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rzepcio.blogspot.com/feeds/6409049594030393560/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://rzepcio.blogspot.com/2011/07/kopia-zapasowa-bezcenne.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5582409504588846762/posts/default/6409049594030393560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5582409504588846762/posts/default/6409049594030393560'/><link rel='alternate' type='text/html' href='http://rzepcio.blogspot.com/2011/07/kopia-zapasowa-bezcenne.html' title='Kopia zapasowa - bezcenne'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5582409504588846762.post-2746376185357968791</id><published>2011-06-24T01:04:00.016+02:00</published><updated>2011-06-24T08:22:09.616+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C# .NET"/><category scheme="http://www.blogger.com/atom/ns#" term="Praca"/><category scheme="http://www.blogger.com/atom/ns#" term="Regex"/><title type='text'>Regex.IsMatch się zacina!</title><content type='html'>&lt;div class=&#39;myPost&#39;&gt;&lt;p&gt;Stworzyłeś skomplikowany Regex i po jego odpaleniu nie widzisz końca wywołania :) Pewnie pomyślałeś jak ja na początku... Regex.IsMatch się zacina! Otóż...&lt;br /&gt;
&lt;/p&gt;&lt;h2&gt;Niestety jesteś w błędzie&lt;br /&gt;
&lt;/h2&gt;&lt;p&gt;Dlaczego niestety? Ponieważ tu zaczynają się twoje problemy, tak jak i moje, kiedy próbowałem stworzyć bardziej zaawansowanego Regexa.&lt;br /&gt;
&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;div class=&quot;adsense&quot;&gt;&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;ca-pub-6090249098758584&quot;;
/* Regex.IsMatch się zacina! */
google_ad_slot = &quot;7823480435&quot;;
google_ad_width = 336;
google_ad_height = 280;
//--&gt;
&lt;/script&gt;&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;&lt;/script&gt;&lt;/div&gt;&lt;p&gt;Przeczytanie poniższego linka powinno wszystko wyjaśnić:&lt;br /&gt;
&lt;a href=&quot;https://connect.microsoft.com/VisualStudio/feedback/details/128105/complex-regex-evaluation-hangs&quot;&gt;Complex regex evaluation hangs&lt;/a&gt;W skrócie, stosowanie zagnieżdżonych kwantyfikatorów może skutkować wykładniczym czasem wykonania metody IsMatch, nie ma na to rady, możesz spróbować przebudować Regexa tak, by nie posiadał zagnieżdżonych kwantyfikatorów albo się poddać ;)&lt;br /&gt;
&lt;/p&gt;&lt;h2&gt;Mój Regex&lt;br /&gt;
&lt;/h2&gt;&lt;p&gt;Mój przypadek wyglądał następująco - próbowałem stworzyć Regex, który pozwoliłby mi sprawdzić, czy dany String składa się jedynie z jednego lub większej ilości wieloliniowych komentarzy sql (aby z porównania dwóch sqli odrzucić nieznaczące części):&lt;br /&gt;
&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;^(\s*/\*(.*\s*)*\*/)+\s*$&lt;/pre&gt;&lt;p&gt;Dopasowanie tego Regexa &quot;zacinało się&quot; na przypadku, w którym były dwa komentarze, a za nimi jeden dodatkowy wyraz - ten przypadek powinien zostać odrzucony, ale po tym, jak najprostsze dopasowanie nie zostało spełnione zaczęło się dopasowywanie wszystkiego ze wszystkim (nie doczekałem się wyniku;).&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Poprzedni Regex był nieprawidłowy, zatwierdzał przypadki takie jak ten:&lt;br /&gt;
&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;/* comment */
not comment
/* comment */&lt;/pre&gt;&lt;p&gt;Ostatecznie stworzyłem takie dzieło, które działa i o dziwo, nawet się nie zacina:&lt;br /&gt;
&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;^(\s*/\*((?!\*/|/\*)(?s).)*\*/\s*)+$&lt;/pre&gt;&lt;p&gt;Rozłożę je teraz na czynniki pierwsze :)&lt;br /&gt;
* - dowolna ilość&lt;br /&gt;
+ - jeden lub więcej&lt;br /&gt;
^ - początek Stringa&lt;br /&gt;
$ - koniec Stringa&lt;br /&gt;
\s - spacje, taby, znaki końca linii, ogólnie białe znaki&lt;br /&gt;
/\* i \*/ - początek i koniec wieloliniowego komentarza&lt;br /&gt;
Zostaje nam środek:&lt;br /&gt;
&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;(?!\*/|/\*)(?s).&lt;/pre&gt;&lt;p&gt;. - każdy znak oprócz znaków końca linii&lt;br /&gt;
(?s). - ten przełącznik włącza dopasowanie znaków końca linii dla kropki&lt;br /&gt;
?! - określa, jakie wyrażenia (tutaj początek i koniec komentarza) nie mogą wystąpić po naszym głównym dopasowaniu (tutaj jest to (?s). czyli każdy znak)&lt;br /&gt;
(?!\*/|/\*) - znak początku i końca komentarza nie mogą wystąpić po żadnym znaku&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Mam nadzieję, że w miarę to wyjaśniłem, jeśli nie to pytać w komentarzach ;)&lt;br /&gt;
&lt;/p&gt;&lt;h2&gt;Regex ciągle może zrobić nam psikusa&lt;br /&gt;
&lt;/h2&gt;&lt;p&gt;Musimy się jakoś zabezpieczyć przed &quot;nieskończonymi&quot; wywołaniami metody IsMatch, ja stworzyłem wątek, który w najgorszym razie przerywam:&lt;br /&gt;
&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;regexThread.Start();
&lt;span class=&quot;kwrd&quot;&gt;int&lt;/span&gt; timeout = 0;
&lt;span class=&quot;kwrd&quot;&gt;while&lt;/span&gt; (regexThread.IsAlive)
{
    &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; (timeout &amp;lt; 10000)
    {
        Thread.Sleep(1);
        timeout += 1;
    }
    &lt;span class=&quot;kwrd&quot;&gt;else&lt;/span&gt;
    {
        &lt;span class=&quot;kwrd&quot;&gt;try&lt;/span&gt;
        {
            regexThread.Abort();
        }
        &lt;span class=&quot;kwrd&quot;&gt;catch&lt;/span&gt; (ThreadAbortException ex)
        {
        }
    }
}&lt;/pre&gt;&lt;h2&gt;Polecam&lt;br /&gt;
&lt;/h2&gt;&lt;p&gt;Do niczego bym nie doszedł, gdybym nie mógł korzystać z tak świetnych internetowych narzędzi do sprawdzania Regexów:&lt;br /&gt;
&lt;a href=&quot;http://gskinner.com/RegExr/?2tr5t&quot;&gt;RegExr&lt;/a&gt;&lt;a href=&quot;http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx&quot;&gt;Regular Expression Tester&lt;/a&gt;W zupełności starczyłoby pierwsze narzędzie, które jest niesamowicie rozbudowane, ale niestety niezupełnie działało dla Regexów ze slashem w śródku (można ominąć ten problem używając innego znaku zamiast slasha).&lt;br /&gt;
&lt;/p&gt;&lt;h2&gt;No i po pierwszym tematycznym poście&lt;br /&gt;
&lt;/h2&gt;&lt;p&gt;Teraz już musi być tylko lepiej! :)&lt;br /&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rzepcio.blogspot.com/feeds/2746376185357968791/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://rzepcio.blogspot.com/2011/06/regexismatch-sie-zacina.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5582409504588846762/posts/default/2746376185357968791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5582409504588846762/posts/default/2746376185357968791'/><link rel='alternate' type='text/html' href='http://rzepcio.blogspot.com/2011/06/regexismatch-sie-zacina.html' title='Regex.IsMatch się zacina!'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5582409504588846762.post-357794169640424723</id><published>2011-06-23T18:01:00.004+02:00</published><updated>2011-06-24T03:05:19.844+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Osobiste"/><title type='text'>Powitanie</title><content type='html'>&lt;p class=&#39;myPostParagraph&#39;&gt;Hej, witajcie na moim blogu :)&lt;p&gt;&lt;h2 class=&#39;myPostHeader&#39;&gt;Dlaczego blog?&lt;/h2&gt;&lt;p class=&#39;myPostParagraph&#39;&gt;Ponieważ potrzebuję jakiegoś ujścia dla wszystkich rzeczy, które przeze mnie przechodzą.&lt;/p&gt;&lt;p class=&#39;myPostParagraph&#39;&gt;Oprócz tego, często spotykam się z różnymi problemami, które nie zawsze nawet Google potrafi rozwiązać, więc zamieszczając je tutaj, może przysłużę się jakoś internetowej społeczności ;)&lt;/p&gt;&lt;p&gt;Mam nadzieję, że będziemy się razem świetnie bawić :D&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://rzepcio.blogspot.com/feeds/357794169640424723/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://rzepcio.blogspot.com/2011/06/powitanie.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5582409504588846762/posts/default/357794169640424723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5582409504588846762/posts/default/357794169640424723'/><link rel='alternate' type='text/html' href='http://rzepcio.blogspot.com/2011/06/powitanie.html' title='Powitanie'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>