Перевел блог на новый хостинг
Новый адрес блога: http://baranov.me/stanislav/solutions/
Новый адрес блога: http://baranov.me/stanislav/solutions/
Posted by
barsv85
at
8:12 AM
0
comments
Labels: hosting
В новой сборке винды на работе предустановлена настройка "не помещать удаляемые файлы в корзину" и в свойствах корзины все настройки заблокированы. Запарился искать в инете как включить. Пришлось спросить у админа... Вот рецепт:
Установить значение ключа NoRecycleFiles = 0 в ветке HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
Posted by
barsv85
at
7:24 AM
0
comments
Labels: recycle bin, regedit
Стал я таскать с собой переносной винт.
На работу пришел - красота : свой винт быстро, удобно, безопасно.
Домой пришел - проблема : подключать к ноуту провода мерзко. Решил подключить сетевым диском. Т.е. прихожу, втыкаю в сервер винт, права даю только себе по сети, наслаждаюсь беспроводным винтом. Без проблем не обошлось.
Подключил, расшарил, надо теперь подключить сетевой диск с паролем от учетной записи на сервере (домена нет. все на рабочих группах). Пытаюсь подключить - а он мне
"The Network folder specified is currently mapped using a different user name and password."
Нашелся добрый Travis, который подсказал в своем блоге, что нужно либо по айпи адресу подключать, либо убить у себя шару IPC$
Posted by
barsv85
at
6:20 AM
0
comments
Ночью надо спать...
Нет, не обязательно спать ночь. Можно днем. Но спать надо...
Седня за***лся от того, что в Far у меня вместо русских букв отображались знаки вопроса. Прям все имена файлов в виде ?????????.txt
Обыскался в инете в чем дело. В форумах находил обсуждение проблем со шрифтами, но нигде такого случая, как у меня.
Долго я не мог вспомнить, что поменял в региональных настройках язык для программ не поддерживающих юникод.... Исправил на русский, ребутнулся и все заработало.
(п.с.: 4ый час утра. на улице духота. гремит гром, дождя нет. завтра на работу.)
Posted by
barsv85
at
4:29 PM
0
comments
Наткнулся седня на совет, как убрать navigation bar из своего блога на блоггере.
дословный копипаст:
если Вы не хотите чтобы вверху вашего блога на Blogger.com был виден Navbar (служебный бар-полоска от Блоггера), тогда вставте в Ваш шаблон, в раздел стилей, эти строки:
#navbar-iframe {
height: 0px;
visibility: hidden;
display: none;
}
все, теперь этот Navbar буден невидим для пользователя.
Posted by
barsv85
at
4:07 AM
0
comments
Возникла задача устанавливать фокус ввода на нужный контрол внутри user control и выбирать кнопку, которую надо нажать, когда в TextBox нажимают "Enter".
1) Для назначения чего нажимать при нажатии "Enter" легко удалось найти решение в инете:
пишется джава-скрипт
function TestEnterKey(btn)
{
if (document.all)
{
if (event.keyCode == 13)
{
event.returnValue=false;
event.cancel = true;
document.getElementById(btn).click();
}
}
}
/// <summary>
/// Adds js to TextBox, that hits Button on pressing "Enter".
/// </summary>
/// <param name="baseControl">Control, that contains textbox and button.</param>
/// <param name="textBoxName">Text box, to which js should be added.</param>
/// <param name="buttonName">Button, that we should hit on pressing Enter.</param>
public static void AddDefaultButton(this Control baseControl, string textBoxName, string buttonName)
{
TextBox tb = ((TextBox) baseControl.FindControl(textBoxName));
tb.Attributes.Add("onkeypress",
"TestEnterKey(\"" +
baseControl.FindControl(buttonName).ClientID +
"\");");
}
PasswordRecovery1.UserNameTemplateContainer.AddDefaultButton("UserName", "SubmitButton");
PasswordRecovery1.QuestionTemplateContainer.AddDefaultButton("Answer", "SubmitButton1");
/// <summary>
/// Adds client-side script, that sets focus to the specified control.
/// </summary>
/// <param name="sender">Control that should be focused.</param>
/// <param name="e">Some other stuff, that isn't used here.</param>
public static void SetFocus(object sender, EventArgs e)
{
Control control = (Control) sender;
if (control != null)
{
string script = string.Format("setFocus(\"{0}\");", control.ClientID);
control.Page.ClientScript.RegisterStartupScript(typeof(string), Guid.NewGuid().ToString(), script, true);
}
}
function setFocus(ctrl)
{
var control = document.getElementById(ctrl);
if( control != null )
{
control.focus();
}
}
PasswordRecovery1.UserNameTemplateContainer.FindControl("UserName").PreRender += Utils.SetFocus;
PasswordRecovery1.QuestionTemplateContainer.FindControl("Answer").PreRender += Utils.SetFocus;
Posted by
barsv85
at
3:14 PM
0
comments
Labels: asp.net, default button, default focus, focus, javascript, render, user control
Всегда меня удивляло, что в IIS 6 на Windows XP только один веб-сайт и нельзя сделать второй. Сегодня я задался вопросом, как задать двум и более сайтам на своем веб-сервере разные доменные адреса типа aaa.com, bbb.com. Как выяснилось на моем веб-сервере с моей ОС это невозможно. Нужно либо ставить винду 2003, либо, что проще, поставить IIS 7. На лаптопе с вистой таких проблем нет :)
Posted by
barsv85
at
3:17 PM
0
comments
Задался я целью побыстрому зашифровать/расшифровать небольшую строчку на asp странице. Как полагается поискал готовое. Нашел несколько ужасных реализаций. Например, на CodeProject автор статьи наляпал изрядное кол-во грубых ошибок. Имхо, это непростительно при написании статьи. Но код в статье на codeproject хоть и бажный, но изредка работает, если попадутся удачная строка и ключ.. Однако, все это еще цветочки по сравнению с говнокодом, который я нашел в msdn. Тут явно не обошлось без поочередного творчества индуса и китайца... Ихний код у меня не сработал ни разу. И сдается мне что вероятность его срабатывания стремится к нулю...
Короче, ничего приемлимого я не нашел и, к сожалению, пришлось делать велосипед:
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
class Members
{
[STAThread]
static void Main()
{
Random random = new Random(DateTime.Now.Millisecond);
for (int i = 0; i < 100000; i++)
{
string source = (Guid.NewGuid().ToString() + Guid.NewGuid()).Substring(0, random.Next(Guid.Empty.ToString().Length));
string supperKey = (Guid.NewGuid().ToString() + Guid.NewGuid()).Substring(0, random.Next(Guid.Empty.ToString().Length));
string encrypted = Cryptor.Encrypt(source, supperKey);
string decrypted = Cryptor.Decrypt(encrypted, supperKey);
if (source != decrypted)
throw new ApplicationException("This shit should never happen!!!");
}
}
}
// <summary>
/// SymmCrypto is a wrapper of System.Security.Cryptography.SymmetricAlgorithm classes
/// and simplifies the interface. It supports customized SymmetricAlgorithm as well.
/// </summary>
public static class Cryptor
{
private static readonly SymmetricAlgorithm mobjCryptoService;
/// <remarks>
/// Constructor for using an intrinsic .Net SymmetricAlgorithm class.
/// </remarks>
static Cryptor()
{
//mobjCryptoService = new DESCryptoServiceProvider();
//mobjCryptoService = new RC2CryptoServiceProvider();
mobjCryptoService = new RijndaelManaged();
}
/// <remarks>
/// Depending on the legal key size limitations of a specific CryptoService provider
/// and length of the private key provided, padding the secret key with space character
/// to meet the legal size of the algorithm.
/// </remarks>
private static byte[] GetLegalKey(string Key)
{
int max = mobjCryptoService.LegalKeySizes[0].MaxSize;
int min = mobjCryptoService.LegalKeySizes[0].MinSize;
string sTemp;
int keyLength = Key.Length * 8;
if (keyLength > max)
{
sTemp = Key.Remove(max / 8);
}
else if (keyLength < min)
{
sTemp = Key.PadRight(min / 8, ' ');
}
else if (min < keyLength && keyLength < max)
{
sTemp = Key.Remove(min / 8);
}// else (keyLength == min | max => do nothing
else
{
sTemp = Key;
}
return Encoding.ASCII.GetBytes(sTemp);
}
private static byte[] GetLegalIV(string Key)
{
int min = mobjCryptoService.LegalBlockSizes[0].MinSize;
int keyLength = Key.Length * 8;
string sTemp;
if (keyLength > min)
{
sTemp = Key.Remove(min / 8);
}
else
{
sTemp = keyLength < min ? Key.PadRight(min / 8, ' ') : Key;
}
return Encoding.ASCII.GetBytes(sTemp);
}
public static string Encrypt(string Source, string Key)
{
byte[] bytIn = Encoding.ASCII.GetBytes(Source);
MemoryStream ms = new MemoryStream();
mobjCryptoService.Key = GetLegalKey(Key);
mobjCryptoService.IV = GetLegalIV(Key);
mobjCryptoService.Padding = PaddingMode.Zeros;
ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
cs.Write(bytIn, 0, bytIn.Length);
cs.FlushFinalBlock();
byte[] bytOut = ms.GetBuffer();
int length = Source.Length > 0 && Source.Length % mobjCryptoService.IV.Length > 0
? (Source.Length / (mobjCryptoService.IV.Length) + 1) * mobjCryptoService.IV.Length
: Source.Length;
return Convert.ToBase64String(bytOut, 0, length);
}
public static string Decrypt(string Source, string Key)
{
byte[] bytIn = Convert.FromBase64String(Source);
MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
mobjCryptoService.Key = GetLegalKey(Key);
mobjCryptoService.IV = GetLegalIV(Key);
mobjCryptoService.Padding = PaddingMode.Zeros;
ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
StreamReader sr = new StreamReader(cs);
string result = sr.ReadToEnd();
return result.TrimEnd('\0');
}
}
Posted by
barsv85
at
6:59 PM
1 comments
Labels: .Net, AES, C#, DES, DESCryptoServiceProvider, RijndaelManaged
Злые админы переставили мне винду.
Поставил я iis, vs, создаю новый website, жму F5, получаю что-то типа
Compilation error: "... System.EnterpriseServices.dll could not be found"
порылся в инете, были разные решения. одно из них - добавить reference на System.EnterpriseServices ручками к проекту. это прокатило, но каждый раз добавлять ручками... дело ясное, что дело темное. помогла repair фреймворка 2.0. прям через add or remove programs -> ms .net framework 2.0 -> change/remove -> repair и все сразу заработало даже безе ребута :)
Posted by
barsv85
at
11:21 AM
1 comments
Поставили мне злые админы новую винду.
Поставил я себе iis, vs, а пользователь aspnet почему-то не создался.
Проблема решилась так:
C:\WINXP\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis.exe -r
нашел решение тут
Posted by
barsv85
at
10:51 AM
0
comments
Что-то долго я тупил пытаясь задеплоить тестовый сайтик с Forms аутенификацией на IIS.
Итак, что запомнилось:
1) если стоит vs2005 + sql server 2005 (NOT EXPRESS), тогда у меня возникала проблема с добавлением файла aspnetdb.mdf в папку app_data. выскакивало сообщение вида:
=========================================================================
Connections to SQL Server files (*.mdf) require SQL Server Express 2005
to function properly. Please verify the installation of the component or
download from the URL:
http://go.microsoft.com/fwlink/?LinkId=49251
=========================================================================
Заставить работать студию через не экспресс сервер у меня не получилось, хотя, слабо верится в то, что это невозможно. Короче решил проблему установкой экспресс сервера, тем более, что многие startup kits расчитаны именно на экспресс. Следущим после установки шагом надо поправить имя сервера в настройках студии Tools->Options->Database Tools->Data Connections->SQL Server Instance Name(blank for default): SQLEXPRESS
Должно помочь.
Еще после установки SSE(SQL Server Express) хорошо бы поменять connectionString в файле windows/microsoft.net/frameworks/v.2.0..../config/mashine.config
заменить старую строку для LocalSqlServer на новую такую:
2) если в студии все замечательно работает, страница login.aspx грузится, login контрол работает, пользователи авторизовываются, но когда переносишь сайт на IIS появляются ошибки, то надо сделать следующее:
а) в свойствах виртуальной директории дать правать на execute всей папке с сайтом + права на write папке app_data
б) дать аналогичные права пользователю aspnet на папку на винте, где лежит сам сайт
в) в web.config в membership provider задать аттрибут applicationName. я задал одно и тоже applicationName во всех провайдерах, в свойствах виртуальной директории и еще в таблице aspnet_Applications в файле ASPNETDB.MDF. Возможно это лишнее, но проверять надобность таких действий сейчас уже лень.
кусочек web.config:
<membership defaultProvider="AspNetSqlMembershipProvider">
<providers>
<clear/>
<add
name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="LocalSqlServer"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
applicationName="RemoteDeployment"
requiresUniqueEmail="false"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="7"
minRequiredNonalphanumericCharacters="1"
passwordAttemptWindow="10"
passwordStrengthRegularExpression="" />
</providers>
</membership>
<profile defaultProvider="AspNetSqlProfileProvider">
<providers>
<clear/>
<add
name="AspNetSqlProfileProvider"
connectionStringName="LocalSqlServer"
applicationName="RemoteDeployment"
type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</profile>
<roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider">
<providers>
<clear/>
<add
name="AspNetSqlRoleProvider"
connectionStringName="LocalSqlServer"
applicationName="RemoteDeployment"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<add
name="AspNetWindowsTokenRoleProvider"
applicationName="RemoteDeployment"
type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
Posted by
barsv85
at
4:42 PM
1 comments
Потестил перфоманс создания xml через XmlDocument и StringBuilder.
В моем приложении результаты получились такие:
XmlDocument: 0.2151
StringBuilder: 0.3114
В моем случае если записывать в Xml нечего, то надо было вернуть string.Empty. Для этого случая результаты такие:
XmlDocument: 0.00778
StringBuilder: 0.01386
кусочек кода на всякий случай:
/// <summary>
/// Creates xml with calculated volume share values.
/// </summary>
/// <param name="suppliersData">Collection with calculated values.</param>
/// <param name="startIndex">Position of first supplier to be added into xml.</param>
/// <param name="endIndex">Position of last supplier to be added into xml.</param>
/// <returns>Xml with calculated data || empty string if there is no values to be loaded into db for specifeid portion of suppliers.</returns>
private static string GetVolumeShare(SupplierDataCollection suppliersData, int startIndex, int endIndex)
{
XmlDocument xmlDoc = new XmlDocument();
XmlNode root = xmlDoc.CreateElement("root");
for (int i = startIndex; i <= endIndex; i++)
{
SupplierData supplierData = suppliersData[i];
foreach (SupplierYearData supplierYearData in supplierData.YearVolumes)
{
foreach (SupplierCSData supplierCSData in supplierYearData.CSVolumes)
{
if (supplierCSData.CSVolumeShare > 0)
{
XmlNode child = xmlDoc.CreateElement("vs");
XmlAttribute childAttr = xmlDoc.CreateAttribute("SRMSId");
childAttr.Value = supplierData.SupplierId.ToString();
child.Attributes.Append(childAttr);
childAttr = xmlDoc.CreateAttribute("CS");
childAttr.Value = supplierCSData.CSId.ToString();
child.Attributes.Append(childAttr);
childAttr = xmlDoc.CreateAttribute("year");
childAttr.Value = supplierYearData.Year.ToString();
child.Attributes.Append(childAttr);
childAttr = xmlDoc.CreateAttribute("value");
childAttr.Value = supplierCSData.CSVolumeShare.ToString();
child.Attributes.Append(childAttr);
root.AppendChild(child);
}
}
}
}
if (root.ChildNodes.Count > 0)
xmlDoc.AppendChild(root);
string xmlData = xmlDoc.InnerXml;
return xmlData;
}
private static string GetVolumeShareXml(SupplierDataCollection suppliersData, int startIndex, int endIndex)
{
StringBuilder sbChilds = null;
for (int i = startIndex; i <= endIndex; i++)
{
SupplierData supplierData = suppliersData[i];
foreach (SupplierYearData supplierYearData in supplierData.YearVolumes)
{
foreach (SupplierCSData supplierCSData in supplierYearData.CSVolumes)
{
if (supplierCSData.CSVolumeShare > 0)
{
if (sbChilds == null)
sbChilds = new StringBuilder();
/*
sbChilds.Append(
string.Format("<vs SRMSId=\"{0}\" CS=\"{1}\" year=\"{2}\" value=\"{3}\" />",
supplierData.SupplierId,
supplierCSData.CSId,
supplierYearData.Year,
supplierCSData.CSVolumeShare
)
);
*/
sbChilds.Append("<vs SRMSId=\"");
sbChilds.Append(supplierData.SupplierId);
sbChilds.Append("\" CS=\"");
sbChilds.Append(supplierCSData.CSId);
sbChilds.Append("\" year=\"");
sbChilds.Append(supplierYearData.Year);
sbChilds.Append("\" value=\"");
sbChilds.Append(supplierCSData.CSVolumeShare);
sbChilds.Append("\" />");
}
}
}
}
StringBuilder sbRoot = null;
if (sbChilds != null)
{
sbRoot = new StringBuilder();
sbRoot.Append("<root>");
sbRoot.Append(sbChilds);
sbRoot.Append("</root>");
}
return sbRoot != null ? sbRoot.ToString() : string.Empty;
}
Posted by
barsv85
at
4:10 AM
0
comments
Опробовал нынче плагин для студии AnkhSVN. Прикольная штука, но только для маленьких проектов. Дома на всяких моих мелочах отлично работает, но вот на работе... проект в 300тыс.строк не тянет. Студия при открытии надолго подвисает. Тормозит дольше чем Resharper.
Posted by
barsv85
at
3:16 AM
2
comments
Пользуюсь мышью Genius Navigator R820BT месяц. Очень доволен. Отличное решение для лэптопа. В начале казалась очень тяжелой. Работает от аккумуляторов очень долго. При работе 3-5 часов в день заряжал за месяц 3 раза. Причем не от того, что разрядилась, а просто как-то дико не заряжать совсем...
Из минусов - не на всех поверхностях работает хорошо, хотя может так работают все мыши :) Ведь с проводной не будешь работать на стеклянном столе или на одеяле.
И думаю это не геймерская мышь. Если хочется погамать, то лучше сесть за стол и подцепить обычную мышь, и желательно не к ноуту :)
Posted by
barsv85
at
10:37 AM
0
comments
Помучился я с поиском того, как втыкать свой код в блог. Сначала хотел использовать тег textarea, но blogger заменяет <enter>'ы на <br>'ы. Долго искал как это побороть. Так и не нашел :) Зато нашел замечательный конвертер кода в html. Теперь блог будет выглядеть поприличнее.
Добавлено:
Решил выложить этот конвертер на хостинг, чтобы было удобнее пользоваться.
Posted by
barsv85
at
3:42 PM
0
comments
Давно меня бесило то, что массивы в watch отображаются весьма бестолково. И никак не получалось найти способа повлиять на это. Собственно я и сейчас не представляю как спросить у гугла то, что мне надо не зная названия класса-атрибута, который отвечает за отображение в watch.
Решение нашлось случайно, когда я смотрел "исходники" Dictionary
Теперь, чтобы отображать в watch то, что мне надо - пишу подходящий wrapper. Например, чтобы в двумерном массиве посмотреть третью строку, пишу обертку для одномерного массива:
, т.е. для массива будет отображаться значение третьего элемента, а не кол-во элементов. И использую массив таких врапперов для получения двумерного массива: [DebuggerDisplay("{_array[2]}")]
class DebugArray
{
double [] _array;
public DebugArray(int len)
{
_array = new double[len];
}
public double this[int i]
{
get { return _array[i]; }
set { _array[i] = value; }
}
}
Собственно все весьма просто. Достаточно только знать о существовании аттрибута DebugDisplay :) List<DebugArray> v = new List<DebugArray>();
v.Add(new DebugArray(dimension));
v[0][3] = 0.123;
Posted by
barsv85
at
1:27 PM
0
comments
Labels: C#, Debug, Visual Studio, Watch
Сегодня долго тупил почему у меня не сериализуется класс, у которого дальний предок - Dictionary. Тупил, искал в msdn до тех пор пока не полез в гугл. Гугл сразу выдал правильные ссылки прям по моей мессаге:
The constructor to deserialize an object of type 'SRM.BusinessLayer.Objects.Dictionary.MaterialFieldMemberCollection' was not found.Все просто. Надо было добавить в класс конструктор:
protected MaterialFieldMemberCollection(SerializationInfo info, StreamingContext context) : base(info, context) { }
Posted by
barsv85
at
9:51 AM
0
comments
Часто пользуюсь библиотекой alglib.
И вот переписал я сегодня одну программу с шарпа на плюсы - работать стало медленней на порядки. В обоих вариантах использовал модуль решения ду из alglib.
Замерил скорость отработки 10^6 шагов по рунгекутту там и там:
плюсы 24.5 сек
шарп 0.5 сек
Списываю это на кривость транслятора из algoPascal в alglib. Но надо конечно разбираться...
добавлено:
Поразбирался. Нашлось множество подводных камней, и наверное еще далеко не все.
Первое что сделал - избавился от массивов alglib. Не помогло. Изначально казалось, что вся проблема должна быть в алглибе и его надстройке в виде массивов, которые нумеруются с 1, а не с нуля. Однако, переход на обычные double[] ничего не дал.
Главная причина тормозов оказалась весьма тупа. Надо было включить оптимизацию /Ox и запускать не из IDE (из-под ide работает в разы медленнее).
Потом выяснилось еще, что точность DateTime.Now оставляет желать лучшего. Заменил на Stopwatch.
Написал тестовые примеры для замера скорости:
1) на шарпе
int rep = 1000000;
double d = 0;
for (int i = 0; i < rep; i++)
{
int arrLen = 100;
double[] arr = new double[arrLen];
for (int j = 0; j < arrLen; j++)
arr[j] = j;
for (int j = 0; j < arrLen; j++)
d += arr[j];
}
double d = 0;
for (int i = 0; i < rep; i++)
{
double* arr = new double[size];
for (int j = 0; j < size; j++)
arr[j] = j;
for (int j = 0; j < size; j++)
d += arr[j];
delete[] arr;
}
double* arr = new double[size];
for (int j = 0; j < size; j++)
d += arr[j];
double* arr = new double[size];
double* iter = arr;
double* endIter = arr + size - 1;
int j = 0;
iter = arr;
while (iter < endIter)
{
d += *iter;
iter++;
}
Posted by
barsv85
at
4:53 PM
2
comments
Labels: alglib, C#, C++, rungekutta
Чтоб отключить эту гадость:
[-HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags]
[HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags\AllFolders\Shell]
“FolderType”=”NotSpecified”
[-HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags\AllFolders]
Posted by
barsv85
at
2:00 PM
0
comments
На днях меня порадовал Windows Media Player. Есть у меня один видео файл, который ничем не открывался. Ставил я разные кодек-паки и никак не мог подобрать подходящий. Собственно никакого алгоритма подбора нужного кодек-пака у меня нет, поэтому просто перебирал. А решение оказалось в самом неожиданном месте. WMP в отличие от всех других плееров сразу предложил загрузить нужный кодек с инета. Хотя самим ВМП пользоваться неудобно, но эта вот его фича оказалась очень полезной. Раньше думал вообще убить его, а теперь точно оставлю, по крайней мере до тех пор, пока не найду другой лучший плеер с такой же фичей.
Posted by
barsv85
at
1:21 PM
0
comments
Блога для бреда у меня нет. Поэтому напишу эту мысль сюда, притянув ее к теме решений. Решение о том, какой язык выбрать. :-)
Подтолкнула меня сделать эту заметку такая ситуация. Написал я некий алгоритм на delphi. Вышел он с первого взгляда обыкновенным. Но не работал :-D
Попробывал я его поотлаживать - ошибку не нахожу.
Переписал снуля. Получилось не многим лучше.
Переписал на C# - заработало.
Тут можно конечно сказать, что я просто третий раз переписал и получилось, а смена языка тут как бы не при чем. Однако, мне так не показалось. Объясняю свою мысль так: гибкость шарпа позволила решить задачу сначала влоб, а потом переделать под оптимизированный алгоритм. Причем переделки были столь незначительные, что получилось не посадить ошибки.
Вдаваться в подробности кода я не хочу. Это вот такое мое субъективное имхо.
И как-то когда писать просто, то думать проще. Алгоритм получился весьма прозрачный, хотя делает все тоже самое.
Одно плохо - производительность. Хотя это я еще померию и постараюсь записать результаты сюдаже...
Posted by
barsv85
at
10:27 AM
0
comments
runas в висте == аналог никсовой команды su.
У меня по началу эта команда никак не хотела работать. Все дело было в том, что я отключил службу "Вторичный вход в систему". Теперь все прекрасно работает.
Пользуюсь так:
win+r
runas /u:Admin cmd
ввожу пароль админа и попадаю в консоль с правами админа.
Posted by
barsv85
at
2:10 PM
0
comments
Posted by
barsv85
at
1:18 AM
0
comments
Labels: optimization, services, vista
Posted by
barsv85
at
1:26 PM
0
comments
Labels: 6710b
Обзавелся новым модемом, чтобы подключить свой новоиспеченный ноут по WiFi.
Хочется сделать пару замечаний. Самый первый интересный момент - кнопочка питания. На первый взгляд модем как две капли воды похож на старенький LAN120, однако помимо бросающейся в глаза антенны и 4х разъемов LAN, есть еще сбоку кнопочка включения питания. Я ее по началу не заметил и минут 15 мучился включая модем :-)
Еще хочется заметить, что модем греется не меньше старого. Пока почему-то не получается настроить port forwarding, хотя делаю вроде все как и раньше. Зато тут хорошо работает Upnp. В старом модеме надо было его перезагружать, чтобы upnp выдал правильный адрес. Еще столкнулся с такой проблемой: хотел все интерфейсы свалить в одну группу, т.к. делить трафик не собираюсь. Поэтому добавил все SSID в одну группу с Ethernet'ами. После этого отвалился WiFi. Почему до меня так и не дошло. Еле вспомнил, что делал, хотел уже настройки сбрасывать...
Добавлено 9 февраля 2008:
С портфорвардингом все по прежнему странно. С одной стороны он работает в ряде программ. Например, для передачи файлов по аське. Но по прежнему в PeerWeb DC++ активный режим работает только при включении поддержки Upnp.
И еще новость : при интенсивной работе подвисает соединение. Не знаю пока с чем это связано (с модемом или с оборудованием на АТС), но факт - сегодня при работе на скоростях больше 5Мбс уже дважды подвисало соединение WAN за 2 часа. Приходилось передергивать телефонный провод (простейшее стредство перезапустить соединение).
Posted by
barsv85
at
1:15 PM
0
comments
Labels: w422g
Posted by
barsv85
at
1:21 AM
0
comments