Профиль пользователя заблокирован сроком с 16 октября 2023 г. и навсегда по причине: систематические нарушения правил сервиса
  • Будет ли работать 350 метров витой пары?

    @MR27
    1) Оптика нынче не дорогая.
    2) Есть репиторы Etherner для вашего случая. В том числе и с питанием по POE, то есть от самой локальной сети.
    Ответ написан
    Комментировать
  • VMware: ubuntu+веб сервер (под windows) — как пробросить общую папку вебсайта для работы с файлами?

    AntonAK83
    @AntonAK83
    Может лучше FTP-сервер поставить на Ubuntu и на Windows пользоваться ftp-клиентом?
    Ответ написан
    Комментировать
  • Как установить приложение?

    параметры командной строки msiexec.exe
    https://msdn.microsoft.com/ru-ru/windows/desktop/c...

    араметры
    /qn
    Запрет на отображение пользовательского интерфейса.
    /qb
    Отображение основного пользовательского интерфейса.
    /qr
    Отображение сокращенного пользовательского интерфейса с выводом модального диалогового окна в конце установки.
    /qf
    Отображение полного пользовательского интерфейса с выводом модального диалогового окна в конце.
    /qn+
    Запрет на отображение пользовательского интерфейса за исключением вывода модального диалогового окна в конце.
    /qb+
    Отображение основного пользовательского интерфейса с выводом модального диалогового окна в конце.
    /qb-
    Отображение основного пользовательского интерфейса без модальных диалоговых окон.
    Примечания
    Параметр /qb+- не является поддерживаемым уровнем пользовательского интерфейса. При отмене установки пользователем модальное окно не выводится.
    Ответ написан
    Комментировать
  • Определение живых пользователей от ботов?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Цель любой защиты - сделать ее взлом не выгодным. Самая дешевая защита:
    1. Проверка user-agent
    2. CSRF
    3. Гугло каптча перед важным действием
    4. Блокировка на N минут после неудачного входа / важного действия

    Простые атаки это отсечет, но не более. Невидимая картинка вас спасет от примитивных curl/wget, не более. WebDriver ко многим защитам на стороне браузера (секреты в localStorage, iframe, ...) не восприимчив.

    Те защиты, что я привел - тоже не дают особых гарантий, но они довольно дешевые
    Ответ написан
    2 комментария
  • C#. Как правильно вместить внешние dll в один exe?

    shai_hulud
    @shai_hulud
    Соеденить все managed (!) dll в одну dll/exe можно с помощью ILRepack.
    ILMerge мертв, его заменил ILRepack.
    Сборку можно делать Post Build Event проекта вызовом ILRepack.exe на результатам сборки.

    <Target Name="Repack" AfterTargets="BuiltProjectOutputGroup">
    		<GetFrameworkPath>
    			<Output TaskParameter="Path" PropertyName="FrameworkPath" />
    		</GetFrameworkPath>
    		<ItemGroup>
    			<NetPlatformFolders Include="$(NuGetPackageFolders.Split(';'))"></NetPlatformFolders>
    		</ItemGroup>
    		<ItemGroup>
    			<AllowDup Include="System.%2A" />
    			<AllowDup Include="JetBrains.%2A" />
    		</ItemGroup>
    		<ItemGroup>
    			<RapackTarget Include="$(TargetDir)MyDll1.dll" />
    			<RapackTarget Include="$(TargetDir)MuDll2.dll" />
    		</ItemGroup>
    		<PropertyGroup>
    			<ILRepack Condition="'$(ILRepack)' == ''">$(NuGetPackageRoot)ilrepack\2.1.0-beta1\tools\ILRepack.exe</ILRepack>
    			<ILRepackTargetPlatform Condition="'$(TargetFramework)' == 'net45'">v4,$(FrameworkPath)</ILRepackTargetPlatform>
    			<ILRepackTargetPlatform Condition="'$(TargetFramework)' == 'netstandard1.3' or '$(TargetFramework)' == 'netcoreapp2.0' or '$(TargetFramework)' == 'netstandard2.0'">v4</ILRepackTargetPlatform>
    			<IlRepackLibs Condition="'$(TargetFramework)' == 'netstandard2.0'">@(NetPlatformFolders->'"/lib:%(FullPath)\netstandard.library\2.0.0\build\netstandard2.0\ref"', ' ')</IlRepackLibs>
    			<IlRepackLibs Condition="'$(TargetFramework)' == 'netcoreapp2.0'">@(NetPlatformFolders->'"/lib:%(FullPath)\microsoft.netcore.app\2.0.0\ref\netcoreapp2.0"', ' ')</IlRepackLibs>
    			<IlRepackAllowDup>@(AllowDup->'"/allowdup:%(Identity)"', ' ')</IlRepackAllowDup>
    			<IlRepackTargets>@(RapackTarget->'"%(Identity)"', ' ')</IlRepackTargets>
    		</PropertyGroup>
    
    		<Exec Command="$(mono) &quot;$(ILRepack)&quot; /target:exe &quot;/targetplatform:$(ILRepackTargetPlatform)&quot; /union /parallel /internalize &quot;/lib:$(TargetDir.TrimEnd('\'))&quot; $(IlRepackLibs) $(IlRepackAllowDup) &quot;/out:$(TargetPath)&quot; &quot;$(TargetPath)&quot; $(IlRepackTargets)" WorkingDirectory="$(SolutionDir)" />
    
    		<Delete Files="@(RapackTarget);" />
    	</Target>


    Конечно надо всё настраивать.
    Ответ написан
    2 комментария
  • Как сверстать шестиугольники вокруг цифр?

    politon
    @politon
    HTML5,CSS3,JS,PHP,SQL,API,canvas,animation...
    Можно и так
    Ответ написан
    1 комментарий
  • Как красиво реализовать возможность подписания блока данных?

    lam0x86
    @lam0x86
    Как я понял задачу: у вас есть две сущности, реализация которых неизвестна:
    • подписываемый объект
    • сервис генерации подписи

    Объект ничего не знает, каким сервисом он будет подписан, а сервис не знает, какая структура у подписываемого объекта.
    В этом случае логично ввести некую промежуточную сущность, в которую объект может себя сериализовать, а сервис будет знать, как её подписать. В простейшем случае это может быть массив, например, byte[]. Можно придумать более изощренный способ с потоковой генерацией подписи, чтобы не создавать промежуточный объект.

    Может, я неправильно понял задачу, но вот, что у меня вышло.

    Интерфейсы:
    public interface ISignable
    {
        ISignature Signature { get; set; }
        byte[] Serialize();
    }
    
    public interface ISignature
    {
    }
    
    public interface ISignatureService
    {
        bool Validate(ISignable signable);
        void Sign(ISignable signable);
    }


    Простейшая имплементация (в качестве подписи используется просто хеш-код):
    class MyObject : ISignable
    {
        public ISignature Signature { get; set; }
        public long Param1 { get; set; }
        public string Param2 { get; set; }
        public string InnerData { get; set; }
    
        public byte[] Serialize()
        {
            return Encoding.UTF8.GetBytes(Param1 + Param2 + InnerData);
        }
    }
    
    public class HashCodeSignatureService : ISignatureService
    {
        public void Sign(ISignable signable)
        {
            var signature = CalculateSignature(signable);
            signable.Signature = signature;
        }
    
        public bool Validate(ISignable signable)
        {
            var s1 = CalculateSignature(signable);
            var s2 = signable.Signature as SimpleHashCodeSignature;
            return s1?.HashCode == s2?.HashCode;
        }
    
        private static SimpleHashCodeSignature CalculateSignature(ISignable signable)
        {
            var body = signable.Serialize();
            var signature = new SimpleHashCodeSignature(body.Aggregate(0, (a, b) => a + b.GetHashCode()));
            return signature;
        }
    }
    
    public class SimpleHashCodeSignature : ISignature
    {
        public int HashCode { get; }
    
        public SimpleHashCodeSignature(int hashCode)
        {
            HashCode = hashCode;
        }
    }


    А так это можно использовать:
    class Program
    {
        static void Main(string[] args)
        {
            var obj = new MyObject {Param1 = 1, Param2 = "asd", InnerData = "some data"};
            var signatureService = new HashCodeSignatureService();
            signatureService.Sign(obj);
            // Passing the object across untrusted boundary
            signatureService.Validate(obj);
        }
    }
    Ответ написан
    Комментировать