Страницы

Поиск по вопросам

вторник, 25 февраля 2020 г.

Чем отличается код javascript?

#prototype #javascript


Объясните пожалуйста, кто знает, чем отличается этот код:
function Button() {
  this.cc = 0;
  this.clicked = function() {
    this.cc+=1;
    console.log('Clicked ' + this.cc);
  }
}

От вот этого:
 function Button() {
      this.cc = 0;
    }
    Button.prototype.clicked = function() {
      this.cc+=1;
      console.log('Clicked ' + this.cc);
    }
    


Ответы

Ответ 1



Внешне - ничем не отличает. Но внутренне, для случая: function Button() { this.cc = 0; this.clicked = function() { cc+=1; console.log('Clicked ' + this.cc); } } (new Button()).clicked != (new Button()).clicked И это реально разные ( почти всегда полностью ) функции, с разным контекстом исполнения, и т.д и т.п... P.S: В принципи, это можно назвать private свойствами: function Button(){ var obj_private = {}, obj_fn = [], obj = this; for( var fn in this ){ if ( typeof this[ fn ] === 'function' ){ obj_fn.push( this[ fn ] ); } } this.get_private = function (){ if ( ( this == obj ) && ( obj_fn.indexOf( arguments.caller.callee ) != -1 ) ){ return private_obj; } } } Button.prototype.clicked = function (){ var pr = this.get_private(); pr[ cc ]++; console.log( 'Clicked' + pr[ cc ] ); }

Ответ 2



Первое - создание одного объекта, инициализация у него свойства и добавление к нему одного метода. Второе - создание одного объекта, инициализация у него свойства и добавление метода к прототипу, то есть ко всем объектам этого типа. (То есть разница в том, что у других объектов этого типа в первом случае нового метода clicked не будет, а во втором - будет.)

Как увеличить точность класса float

#python


Насколько я знаю, точность типа float в python ограничена 16 знаками после запятой.
Мне необходимо около 40 знаков после запятой. И вот вопрос, как увеличить количество
знаков после запятой в типе float, или какой типа данных использовать вместо флоат,
для которого определены операции с комплексными числами?    


Ответы

Ответ 1



Проект GMPY не устроит? Биндинги к gmp и mpfr.

Ответ 2



Также могу посоветовать пакет mpmath; Numpy поддерживает float128, но это около 32 знаков. А вообще, вопрос с точностью очень актуальный, существует весьма простой пример вычислений с плавающей точкой (на Python), заставляющий задуматься, что верить расчетам с плавающей точкой нужно очень осторожно...

Ответ 3



Вообще говоря, для более точных расчетов в Python используют класс Decimal. Подробнее о нем можно прочитать здесь В этом классе можно управлять точностью вычислений, потерь значений в нем не происходит, в отличии от double, но при этом, конечно, ждать высокую скорость работы не стоит.

Ответ 4



Боюсь, но придется их эмулировать самостоятельно. Дело в том, что по умолчанию в питоне используется тип Double, который имеет размер 8 байт, 52 бита из них используется для мантиссы, которые как раз и дают 15-16 знаков в десятичном виде. Что бы обеспечить 40 знаков после запятой, нужно где то 132 бита только для мантиссы. И ещё бит 12-15 для экспоненты. Итого 144-147 бит (18-19 байт). Мне не известны библиотеки, которые оперируют такими числами. Если уточните задачу, зачем нужна такая точность, может быть подкину красивое решение проблемы. Но в обычных задачах оно очень редко нужно. В своей жизни только один раз встречал задачу, в которой нужна была точность 12 знаков после запятой, и то, как потом оказалось, это была синтетическая задача, что бы отсечь тех, кто пользуется калькулятором и не умеет думать.

Скорость селекторов jQuery

#jquery #выборка #быстродействие


Подскажите, чем измерить скорость выборки селекторами jQuery? Раньше для FF был java.console,
но, к сожалению, он уже не обновляется, а на новых версиях лисы не пашет.

Нужен именно плагин, а не какой-либо он-лайн сервис.



Решение: Чтобы измерить скорость выборки, пишем в JS коде:

console.time("имя");
выборка с помощью 1 или нескольких селекторов
console.timeEnd("то же имя");


И в консоли Firebug будет писаться время выборки, если между time и timeEnd была
только выборка. Между запуском и остановкой таймера можно запихнуть что угодно, и будет
измеряться, соответственно, общее время выполнения этой части скрипта.

P.S. В DragonFly оперы в консоли также все работает.
    


Ответы

Ответ 1



FireBug думаю поможет

Ответ 2



Самый не удобный и бесполезный способ. В файрфоксе результаты будут отличаться незначительно, куда интересней измерить скорость различных селекторов в других браузерах, таких как ие, там выигрыш во времени от оптимизации селекторов будет просто громадным, Можете посмотреть скорость различных селекторов у всех популярных js-библиотек в тесте slicktest. Если общей информации не достаточно, можете скачать его и запустить локально, заменив предложенные селекторы на ваши и тестировать именно на вашем документе. Можно сразу тестировать везде, а не только в удобном файрбаге.

Ответ 3



Скорость отработки того или иного селектора в значительной мере будет зависеть от куска DOM на котором его применить. Чтобы грамотно использовать селекторы нужно понять, как работает движок sizzle, который и занимается их анализом и парсингом DOM. Очень хорошо об этом написано тут: http://habrahabr.ru/blogs/jquery/111195/

Шифрование с открытым ключом

#python #шифрование


Мне надо осуществить обмен данными между двумя информационными-системами. Данные
хочу передавать в зашифрованном виде. Слышал о том, что возможно шифрование по ключу,
те на обеих сторонах известен ключ, по нему я шифрую данные. Какой алгоритм использовать?
Не хочу ничего придумывать, хочу воспользоваться API. Подскажите, куда смотреть.    


Ответы

Ответ 1



Думаю в вашем случае вполне подойдёт RSA. Вот конкретный простой пример.

Ответ 2



Смотреть в сторону rsa или aes шифрования. Вот, к примеру, либа для RSA.

Ответ 3



Открытый ключ - это ассиметричное шифрование. Посмотрите по ссылкам: https://www.dlitz.net/software/pycrypto/ http://sourceforge.net/projects/pypgp/

Ответ 4



можно исспользовать blowfish в виде модуля для питона где то есть в сети

Ответ 5



Вот гнездо python-gnupg, хотя можно и отсюда взять. Ну и пару слов про шифрование с открытым ключом. Оно обычно требует немало вычислений, и для скорости используются смешанные схемы, где алгоритмом с открытым ключом шифруется ключ сессии, а сам поток данных шифруется уже алгоритмом с секретным ключом (симметричным), с использованием данного ключа. А шифрование сообщений алгоритмами с открытым ключом -- экзотика.

Использование DirectX в C#

#c_sharp #directx


Написал программу на C# (квадрат из 8 точек, повороты, масштабирование, сброс). Теперь
нужно переделать её под DirectX, о котором я вообще ничего не знаю... Я даже не знаю
как его подключать, могли бы вы посоветовать очень простую лекцию для выполнения этого
простого задания...    


Ответы

Ответ 1



Подключить DX функции для создания графики можно установив пакет DirectX SDK который можно скачать с оффсайта Microsoft. А переделать под него - означает использовать в качестве функции рисования API DX'а(DirectDraw), самый банальный способ на мой взгляд и простой это написать ту же программу юзая Microsoft Visual C++, там вывод графики осуществляется по средствам DirectDraw. Это довольно обширная тема чтобы описать все этапы тут, ведь нам потребуется написать процедуру вызова окна, инициализации палитры и много чего другого, поэтому поделюсь ссылкой на ресурс который помог мне в этом разобраться. http://www.helloworld.ru/texts/comp/games/directx/ddraw/directx.htm

Ответ 2



раз на С# то может надо переделать на Direct2D, а не DirectX? вот библиотека а если все таки на DirectX, то есть смысл скачать себе XNA Game Studio, там все можно сделать в 10 строчек

Ответ 3



На С# есть замечательная библиотека SharpDX Основной код(Код шейдера ниже) // Copyright (c) 2010-2013 SharpDX - Alexandre Mutel // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; using System.Diagnostics; using System.Windows.Forms; using SharpDX; using SharpDX.D3DCompiler; using SharpDX.Direct3D; using SharpDX.Direct3D11; using SharpDX.DXGI; using SharpDX.Windows; using Buffer = SharpDX.Direct3D11.Buffer; using Device = SharpDX.Direct3D11.Device; namespace MiniCube { /// /// SharpDX MiniCube Direct3D 11 Sample /// internal static class Program { // [STAThread] private static void Main() { var form = new RenderForm("SharpDX - MiniCube Direct3D11 Sample"); // SwapChain description var desc = new SwapChainDescription() { BufferCount = 1, ModeDescription = new ModeDescription(form.ClientSize.Width, form.ClientSize.Height, new Rational(60, 1), Format.R8G8B8A8_UNorm), IsWindowed = true, OutputHandle = form.Handle, SampleDescription = new SampleDescription(1, 0), SwapEffect = SwapEffect.Discard, Usage = Usage.RenderTargetOutput }; // Used for debugging dispose object references // Configuration.EnableObjectTracking = true; // Disable throws on shader compilation errors //Configuration.ThrowOnShaderCompileError = false; // Create Device and SwapChain Device device; SwapChain swapChain; Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.None, desc, out device, out swapChain); var context = device.ImmediateContext; // Ignore all windows events var factory = swapChain.GetParent(); factory.MakeWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAll); // Compile Vertex and Pixel shaders var vertexShaderByteCode = ShaderBytecode.CompileFromFile("MiniCube.fx", "VS", "vs_4_0"); var vertexShader = new VertexShader(device, vertexShaderByteCode); var pixelShaderByteCode = ShaderBytecode.CompileFromFile("MiniCube.fx", "PS", "ps_4_0"); var pixelShader = new PixelShader(device, pixelShaderByteCode); var signature = ShaderSignature.GetInputSignature(vertexShaderByteCode); // Layout from VertexShader input signature var layout = new InputLayout(device, signature, new[] { new InputElement("POSITION", 0, Format.R32G32B32A32_Float, 0, 0), new InputElement("COLOR", 0, Format.R32G32B32A32_Float, 16, 0) }); // Instantiate Vertex buiffer from vertex data var vertices = Buffer.Create(device, BindFlags.VertexBuffer, new[] { new Vector4(-1.0f, -1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f), // Front new Vector4(-1.0f, 1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f), new Vector4( 1.0f, 1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f), new Vector4(-1.0f, -1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f), new Vector4( 1.0f, 1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f), new Vector4( 1.0f, -1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f), new Vector4(-1.0f, -1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f), // BACK new Vector4( 1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f), new Vector4(-1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f), new Vector4(-1.0f, -1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f), new Vector4( 1.0f, -1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f), new Vector4( 1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f), new Vector4(-1.0f, 1.0f, -1.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f), // Top new Vector4(-1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f), new Vector4( 1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f), new Vector4(-1.0f, 1.0f, -1.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f), new Vector4( 1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f), new Vector4( 1.0f, 1.0f, -1.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f), new Vector4(-1.0f,-1.0f, -1.0f, 1.0f), new Vector4(1.0f, 1.0f, 0.0f, 1.0f), // Bottom new Vector4( 1.0f,-1.0f, 1.0f, 1.0f), new Vector4(1.0f, 1.0f, 0.0f, 1.0f), new Vector4(-1.0f,-1.0f, 1.0f, 1.0f), new Vector4(1.0f, 1.0f, 0.0f, 1.0f), new Vector4(-1.0f,-1.0f, -1.0f, 1.0f), new Vector4(1.0f, 1.0f, 0.0f, 1.0f), new Vector4( 1.0f,-1.0f, -1.0f, 1.0f), new Vector4(1.0f, 1.0f, 0.0f, 1.0f), new Vector4( 1.0f,-1.0f, 1.0f, 1.0f), new Vector4(1.0f, 1.0f, 0.0f, 1.0f), new Vector4(-1.0f, -1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 1.0f, 1.0f), // Left new Vector4(-1.0f, -1.0f, 1.0f, 1.0f), new Vector4(1.0f, 0.0f, 1.0f, 1.0f), new Vector4(-1.0f, 1.0f, 1.0f, 1.0f), new Vector4(1.0f, 0.0f, 1.0f, 1.0f), new Vector4(-1.0f, -1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 1.0f, 1.0f), new Vector4(-1.0f, 1.0f, 1.0f, 1.0f), new Vector4(1.0f, 0.0f, 1.0f, 1.0f), new Vector4(-1.0f, 1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 1.0f, 1.0f), new Vector4( 1.0f, -1.0f, -1.0f, 1.0f), new Vector4(0.0f, 1.0f, 1.0f, 1.0f), // Right new Vector4( 1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 1.0f, 1.0f), new Vector4( 1.0f, -1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 1.0f, 1.0f), new Vector4( 1.0f, -1.0f, -1.0f, 1.0f), new Vector4(0.0f, 1.0f, 1.0f, 1.0f), new Vector4( 1.0f, 1.0f, -1.0f, 1.0f), new Vector4(0.0f, 1.0f, 1.0f, 1.0f), new Vector4( 1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 1.0f, 1.0f), }); // Create Constant Buffer var contantBuffer = new Buffer(device, Utilities.SizeOf(), ResourceUsage.Default, BindFlags.ConstantBuffer, CpuAccessFlags.None, ResourceOptionFlags.None, 0); // Prepare All the stages context.InputAssembler.InputLayout = layout; context.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; context.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(vertices, Utilities.SizeOf() * 2, 0)); context.VertexShader.SetConstantBuffer(0, contantBuffer); context.VertexShader.Set(vertexShader); context.PixelShader.Set(pixelShader); // Prepare matrices var view = Matrix.LookAtLH(new Vector3(0, 0, -5), new Vector3(0, 0, 0), Vector3.UnitY); Matrix proj = Matrix.Identity; // Use clock var clock = new Stopwatch(); clock.Start(); // Declare texture for rendering bool userResized = true; Texture2D backBuffer = null; RenderTargetView renderView = null; Texture2D depthBuffer = null; DepthStencilView depthView = null; // Setup handler on resize form form.UserResized += (sender, args) => userResized = true; // Setup full screen mode change F5 (Full) F4 (Window) form.KeyUp += (sender, args) => { if (args.KeyCode == Keys.F5) swapChain.SetFullscreenState(true, null); else if (args.KeyCode == Keys.F4) swapChain.SetFullscreenState(false, null); else if (args.KeyCode == Keys.Escape) form.Close(); }; // Main loop RenderLoop.Run(form, () => { // If Form resized if (userResized) { // Dispose all previous allocated resources Utilities.Dispose(ref backBuffer); Utilities.Dispose(ref renderView); Utilities.Dispose(ref depthBuffer); Utilities.Dispose(ref depthView); // Resize the backbuffer swapChain.ResizeBuffers(desc.BufferCount, form.ClientSize.Width, form.ClientSize.Height, Format.Unknown, SwapChainFlags.None); // Get the backbuffer from the swapchain backBuffer = Texture2D.FromSwapChain(swapChain, 0); // Renderview on the backbuffer renderView = new RenderTargetView(device, backBuffer); // Create the depth buffer depthBuffer = new Texture2D(device, new Texture2DDescription() { Format = Format.D32_Float_S8X24_UInt, ArraySize = 1, MipLevels = 1, Width = form.ClientSize.Width, Height = form.ClientSize.Height, SampleDescription = new SampleDescription(1, 0), Usage = ResourceUsage.Default, BindFlags = BindFlags.DepthStencil, CpuAccessFlags = CpuAccessFlags.None, OptionFlags = ResourceOptionFlags.None }); // Create the depth buffer view depthView = new DepthStencilView(device, depthBuffer); // Setup targets and viewport for rendering context.Rasterizer.SetViewport(new Viewport(0, 0, form.ClientSize.Width, form.ClientSize.Height, 0.0f, 1.0f)); context.OutputMerger.SetTargets(depthView, renderView); // Setup new projection matrix with correct aspect ratio proj = Matrix.PerspectiveFovLH((float)Math.PI / 4.0f, form.ClientSize.Width / (float)form.ClientSize.Height, 0.1f, 100.0f); // We are done resizing userResized = false; } var time = clock.ElapsedMilliseconds / 1000.0f; var viewProj = Matrix.Multiply(view, proj); // Clear views context.ClearDepthStencilView(depthView, DepthStencilClearFlags.Depth, 1.0f, 0); context.ClearRenderTargetView(renderView, Color.Black); // Update WorldViewProj Matrix var worldViewProj = Matrix.RotationX(time) * Matrix.RotationY(time * 2) * Matrix.RotationZ(time * .7f) * viewProj; worldViewProj.Transpose(); context.UpdateSubresource(ref worldViewProj, contantBuffer); // Draw the cube context.Draw(36, 0); // Present! swapChain.Present(0, PresentFlags.None); }); // Release all resources signature.Dispose(); vertexShaderByteCode.Dispose(); vertexShader.Dispose(); pixelShaderByteCode.Dispose(); pixelShader.Dispose(); vertices.Dispose(); layout.Dispose(); contantBuffer.Dispose(); depthBuffer.Dispose(); depthView.Dispose(); renderView.Dispose(); backBuffer.Dispose(); context.ClearState(); context.Flush(); device.Dispose(); context.Dispose(); swapChain.Dispose(); factory.Dispose(); } } } Код шейдера // Copyright (c) 2010-2013 SharpDX - Alexandre Mutel // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. struct VS_IN { float4 pos : POSITION; float4 col : COLOR; }; struct PS_IN { float4 pos : SV_POSITION; float4 col : COLOR; }; float4x4 worldViewProj; PS_IN VS( VS_IN input ) { PS_IN output = (PS_IN)0; output.pos = mul(input.pos, worldViewProj); output.col = input.col; return output; } float4 PS( PS_IN input ) : SV_Target { return input.col; } SharpDX MiniCube Direct3D 11 Sample (лицензия MIT)

Как сделать ActionBar?

#android #java


Как сделать вот такой ActionBar? Желательно в виде Java-кода, а не XML-разметки.



Я только начал разбираться и написал простой код:

MyActivity extends Activity {
  @Override 
  public void onCreate(Bundle bundle) { 
    super.onCreate(bundle); 

    ActionBar actionBar = getActionBar(); 
    actionBar.addTab(actionBar.newTab().setText("Test")); 
  } 
}


Метод getActionBar всегда возвращает Null. Почему?
    


Ответы

Ответ 1



На самом деле никаких хитростей здесь не нужно делать. Благодаря тому, что в манифесте будет включен АПИ-левел > 11 андроид автоматически будет формировать экшн-бар. Оформляете меню обычным способом @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_activity, menu); return true; } и файл с описанием меню и будет вам экшн-бар. Основной момент здесь - это различные вариации аттрибута android:showAsAction. С его помощью можно настраивать отображение отдельного пункта меню (пункт меню, кнопка экшн-бара с картинкой/без картинки etc.) Выбор элемента отлавливается в стандартном коллбеке. И да, подробнее можно узнать здесь ActionBar on developer.android.com

Иконки бэкгроунды и прочее [закрыт]

#веб_дизайн #иконки


        
             
                
                    
                        
                            Закрыт. Этот вопрос не по теме. Ответы на него в данный
момент не принимаются.
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Переформулируйте вопрос,
чтобы он соответствовал тематике «Stack Overflow на русском».
                        
                        Закрыт 4 года назад.
                                                                                
           
                
        
Какими медиа-ресурсами пользуетесь Вы, для создания своих программ / сайтов ?
Где вы берете иконки и другие медиа файлы ? Может кто знает интересные ссылки по теме ?
вот что известно мне:

famfamfam 
iconizer
iconogratis 
iconpicker 
led24
    


Ответы

Ответ 1



http://www.deviantart.com/ - тут очень много всякой - всячины графической http://iconfinder.com/ http://google.com - это мой любимый))) UPD: еще один нашел с хорошей и довольно полезной графой) http://freebiesbooth.com/

Ответ 2



spritecow.com - клевый сервис для вырезания картинок из неоднородных спрайтов и последующей генерацией в css. jqueryui icon set- Качаем фреймвок, там есть приятный набор спрайтов разных цветов с иконками 16x16 и фреймворк в виде jqueryUI к нему, но я предпочитаю делать все вручную.

Ответ 3



Также, можно поискать на vremenno.net - иногда там попадаются дельные вещи.

Только горизонтальная прокрутка div

#html


Всем привет!
Подскажите как сделать только горизонтальную прокрутку?
Я делаю:
Sect 1
Sect 2
Sect 3
При этом внутренние секции добавляются динамически, но скролл происходит только вертикально после заполнения внешнего блока по горизонтали. А мне надо, чтобы внутренние секции располагались по горизонтали, и скроллинг внешнего блока происходил только по горизонтали.


Ответы

Ответ 1



Вот как это делается, господа: http://jsfiddle.net/yeo0m0dk/ Ключевые моменты: display: inline-block; внутренние элементы, и white-space: nowrap; родителю. Для того чтобы между inline-block элементами не было лишнего расстояния, можно так-же добавить родителю: font-size: 0;. .parent { width: 400px; height:80px; overflow: hidden; overflow-x: scroll; background: yellow; white-space:nowrap; } .child { display: inline-block; vertical-align: top; width: 60px; height:60px; background: red; }


Ответ 2



Чтобы внутренние секции располагались по горизонтали надо добавить в style "display:inline;" для каждой внутренней секции.

Ответ 3



Надо добавить в style "overflow-x:scrolll;overflow-y:hidden;max-height: высота блока;"

Ответ 4



Сделай внутренние секции в виде списка
  • Содержимое 1
  • Содержимое 2
  • Содержимое 3
  • Содержимое 4
А потом задайте в цсс для каждого .element { display: table-cell}

Удаление пробелов и переводов строк

#регулярные_выражения #perl


Для того что б вырезать все пробелы и переводы строк, как с начала, так и с конца,
+ убирать двойные пробелы, написал регулярку:
$opis =~ s/^\s+|^(\r?\n)+|\s+$|(\r?\n)+$//g;
$opis =~ s/\s+/ /g;

Локально все работает, как только запускаю на сервере, работать не хочет.
Вернее оно удаляет вообще все переводы строк, даже те, что есть в середине текста.
Почему?    


Ответы

Ответ 1



\s в регулярном выражении означает и перевод каретки в том числе, поэтому в середине строки исчезают переводы. используйте \h $opis =~ s/^\s+|\s+$//g; $opis =~ s/\h+/ /g;

Ответ 2



Потому что g в конце поставил. Рекомендую начальные/конечные пробелы убирать одной регуляркой (или двумя), а двойные переводы строк другой, уже с g.

Ответ 3



$opis=~s/\s{2,}|\n//g

Ошибка с скриптом: “failed to open stream: No such file or directory”

#php


Дело в том, что на обычном хосте все ок... но скрипт перехвата доменов ложит сервер.
Заказал впс, но тут при запуске root@73545:~# /usr/bin/php /var/www/drop_catch.php
выдает

PHP Warning:  file_get_contents(drops.txt): failed to open stream: No such file or
directory in /var/www/drop_catch.php on line 31

В самом скрипте есть строчка $file = "drops.txt"; Я так понял, скрипт не может до
него добраться... Оба файла drop_catch.php и drops.txt находятся в папке var/www/
доменное имя указанное в тхт файле верное, правда осободится сегодня ближе к вечеру...
Прошу вас, подскажите, что не так?    


Ответы

Ответ 1



Если у вас /drop_catch.php файл лежит вместе с файлом drops.txt пропишите так - $file = dirname(__FILE__).'/drops.txt'; думаю поможет

Ответ 2



Ещё проверь права на папку. chmod

Как подключиться к интернет через iexplore?

#c_sharp #windows #visual_studio


Делаю проект Windows Forms приложения на Visual Studio 2010. Программа работает со
службой WCF опубликованной в интернете. Т.е. для нормальной работы этого приложения,
нужно активное соединение с интернет.  

Сейчас нормальная работа возможна, только, если есть прямое подключение компьютера
к интернет. Обычно в программах бывают настройки подключения к интернет: прокси-сервер,
как у браузера. Например, некоторые программы используют настройки iexplore, отображается
диалог авторизации на сервере.

Как я могу реализовать тоже самое в своем приложении, настрйки подключение к интернет?
Не важно, на чем и какой проект приложения, лишь бы можно было добавлять ссылки на
службы WCF и работать с ними.  

UPD

Остался вопрос: как подключиться к интернет используя настройки iexplore?
    


Ответы

Ответ 1



Добавить настройки прокси в приложение можно в конфиге, например так: UPD: Про диалог браузера ничего не могу сказать, но программно устанавливать прокси можно, как в этом примере с МСДН.

Как узнать об аварийном закрытии программы на c#?

#c_sharp #исключения


Тестирую программу, не могу везде написать try... except. Можно ли как-то при аварийном
закрытии программы вывести сообщение пользователю типа "Аварийное закрытие программы,
запомните, пожалуйста, Ваши последние действия"?    


Ответы

Ответ 1



Если вы хотите перехватывать все необработанные исключения в вашем приложении, подпишитесь на AppDomain.UnhandledException [SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlAppDomain)] public static void TestSomeException() { AppDomain domain = AppDomain.CurrentDomain; domain.UnhandledException += new UnhandledExceptionEventHandler(SomeExceptionHandler); throw new Exception("Тестовое исключение"); } static void SomeExceptionHandler(object sender, UnhandledExceptionEventArgs args) { Exception e = (Exception) args.ExceptionObject; // TODO: Обработать исключение } public static void Main() { TestSomeException(); }

Доступ к журналу (Log) SMS в Android

#android_sdk #android #sms #java


Здравствуйте. Знаю, что в SDK есть классы и методы для доступа к журналу звонков
в ОС Android. Есть ли такая же возможность для SMS? Т.е. стоит задача: получить список/массив
входящих SMS с текстом, номером приславшего, датой-временем и проч. информацией.    


Ответы

Ответ 1



Uri uriSms = Uri.parse("content://sms/inbox"); Cursor c = context.getContentResolver().query(uriSms, null,null,null,null); // column names for above provider: 0: _id 1: thread_id 2: address 3: person 4: date 5: protocol 6: read 7: status 8: type 9: reply_path_present 10: subject 11: body 12: service_center 13: locked Вместо inbox могут также использоваться другие категории например sent

Ответ 2



mText.append("\n\n SMS сообщения"); mText.append("\n-------------------------------------------------------------"); Uri uriSms = Uri.parse("content://sms/"); Cursor cur = mainContext.getContentResolver().query(uriSms, null,null,null,null); startManagingCursor(cur); SimpleDateFormat format1 = new SimpleDateFormat("HH:mm:ss dd.MM.yyyy"); if (cur.getCount() > 0){ while (cur.moveToNext()){ mText.append("\n" + format1.format(cur.getLong(4)) + " " + cur.getString(2) + ": " + cur.getString(12) ); mText.append("\n"); } } mText.append("\n########################################"); Знаю, что в SDK есть классы и методы для доступа к журналу звонков в ОС Android если знаешь можешь помочь? где почитать?

Ответ 3



AndroidManifest LayOut

Как сделать хлебные крошки на php?

#php #mysql


Здравствуйте! У меня сайт на базе mysql. Интересует Как сделать хлебные крошки на
php(типа такого: Главная>Новости>Погода...и т.д.)?
В инете много таких крошек для cms, а у меня самописный сайт. Буду рад любой помощи.
Спасибо.    


Ответы

Ответ 1



Как-то делал давно. Обработчик крошек: function navigation() { $arg_list = func_get_args(); $numargs = func_num_args(); $str = ''; for ($i = 0; $i < $numargs; $i++) { $str .= ($arg_list[$i][1] ? ($arg_list[$i][0] ? '' . $arg_list[$i][1] . '' : $arg_list[$i][1] ) . ($numargs - 1 > $i && $arg_list[$i][0] ? '' : '' ) : '' ); } return $str; } Использование: echo navigation( array('/', 'Главная'), array('/old', 'Чуток ниже'), array('/old-s', 'И еще чуток ниже') ); Результат: ГлавнаяЧуток нижеИ еще чуток ниже Естественно HTML-код можно изменить как нужно. Да, функция кривая и бла бла бла. Еще Месси 5 голов забил, ага.

Ответ 2



Делал когда-то используя Nested Sets. Преимущество - не надо у каждого родителя спрашивать родителя или таскать за собой всю связку id-шников, а только зная 1 id получай всю ветку разом

Ответ 3



//Определяем переменную parent_id $parent_id = isset($_GET['parent_id']) ? $_GET['parent_id'] : null; function breadcrumb($cat, $parent_idid){ //Проверяем что parent_ID это число if(!intval($parent_idid)) return false; //Создаем пустой массив $brc = array(); //Перебираем полученый массив с меню for($i = 0; $i < count($cat); $i++){ //Проверяем что мы не нашли родителя и не массив пуст if($parent_id != 0 and !empty($cat[$parent_id])){ //Ищем родителя $brc[$cat[$id]['parent_id']] = $cat[$parent_id]['title']; $parent_id = $cat[$parent_id]['parent']; } //Останавливаем цикл else break; } //Возвращаем перевернутый массив с сохранением ключей return array_reverse($brc, true); }

Как в HTML сделать так, чтобы слова переносились на следующую строку, а не уходили влево? [дубликат]

#html #css


        
             
                
                    
                        
                            На этот вопрос уже даны ответы здесь:
                            
                        
                    
                
                        
                            Неправильное отображение текста в блоке div
                                
                                    (2 ответа)
                                
                        
                                Закрыт 2 года назад.
            
                    
Здравствуйте! Интересует, как отформатировать текст, чтобы если он выходит за пределы
страницы или своего блока, он автоматически переносился на другую строку, а то появляется
полоса прокрутки снизу... Что можно сделать в HTML или CSS?


    


Ответы

Ответ 1



Есть такое CSS-свойство: word-wrap break-word Его укажите в свойствах блока, в котором расположено "вылезающее" содержимое.

Как в переменную загрузить данные из файла?

#javascript #html #mustache


Здравствуйте! 
Есть сторонняя библиотека работы с шаблонами  Mustache. При заполнении шаблона, я
использую два входных параметра, это файл шаблона и файл содержащий JSON строку, содержимое
которой подставляется в шаблон.
Первый вопрос: как загрузить эти файлы непосредственно в переменные, для передачи
их в  Mustache функцию, например:
html = Mustache.to_html(template, json);

Второй вопрос: Может можно сразу указывать в качестве входных параметров Mustache
функции, пути к файлам:
html = Mustache.to_html(File_path_to_template, File_path_to_json);
    


Ответы

Ответ 1



function getData( url, ready ) { var xhr = new XMLHttpRequest(); xhr.open( 'GET', url, true ); xhr.onreadystatechange = function() { if( this.readyState === 4 && this.status !== 404 ) { ready( this.responseText ); } } xhr.send(); } getData( 'pathToTemplate', function( templateData ) { getData( 'pathToJSON', function( jsonData ) { console.log( templateData ); console.log( jsonData ); }) }) Асинхронный вариант, по хорошему нужно делать примерно так, а в вашем случае вообще лучше делать запросы "паралельно", здесь я кое-что писал об этом.

Ответ 2



Возможно, вам подойдет такая немудреная функция: loadURL = function(url) { var oRequest = new XMLHttpRequest(); oRequest.open('GET', url, false); oRequest.setRequestHeader("User-Agent", navigator.userAgent); oRequest.send(null); return oRequest.responseText; }; Я ее успешно использую в своем приложении для загрузки данных из текстовых фалов.

Ответ 3



var json; $.get('/data.json', function (data) { json = data; }); alert(json.test); На чистом JS сами пишите.

Ответ 4



Я реши проблему так:

Проблема с парсингом русских букв в Android

#xml #android #кодировка #java


Есть xml. Его парсю через андройд апликэйшн. Всё получается, если английский язык.
Но если поменять в xml - на русский язык, то при отображении страницы в android api
- символы отображаются некорректно. Испробовал поменять кодировку в xml  с utf-8 на
windows-1251. Не помогло. Пробовал заставить апликацию понимать кодировку -          

InputSource is = new InputSource();
is.setCharacterStream(new StringReader(xml));
is.setEncoding ("windows-1251");    
doc = db.parse(is);

Ничего не выходит. Может, кто сможет подсказать. Если надо больше исходника - выложу...
is.setEncoding("UTF_8");

тоже ничего не выходит
Посмотрел в вики: кракозябры. 
Сравнил кракозябры. Если мы ставим в xml, который парсим, кодировку 1251, то крокозябры
как будто идёт перекодировка из 1251 в 1252. Если мы ставим в xml кодировку utf-8,
то крокозябры выглядят, как будто перекодируем из utf в 1252. В чём может быть проблема?    


Ответы

Ответ 1



HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); line = EntityUtils.toString(httpEntity, "UTF-8"); Это ответ!

Ответ 2



Проверьте кодировку самого XML файла, он должен быть в UTF-8. Android по умолчанию использует кодировку UTF-8, так что данные должны лежать в UTF-8, а иначе надо перекодировать.

Расположение элементов HTML по кругу

#html #вёрстка #css


Всем здравствуйте!  

Только начинаю осваиваться с web-программированием, но решил с самого начала делать
все правильно: красиво и по стандартам, а то что у меня пока получилось по моему вопросу
я бы красивым не назвал.  Необходимо сверстать страницу следующего вида:  



В общем-то я все уже сверстал с помощью CSS-свойств position (absolute), top и left
с необходимыми значениями (с футером только беда - он вверх поднимается, но я просто
задал фиксированную высоту тому блоку, в котором все это отображается, и вроде все
нормально). Но что-то мне подсказывает, что это все можно было сделать... красивее
что-ли, по правильному в общем.  Никто никогда не сталкивался с подобной задачей? Или
может теоретически что подскажет?  

P.S. Встречал примеры подобного расположения картинок с помощью javascript (можно
было бы переделать под себя), но хочется справиться только с помощью HTML и CSS.
    


Ответы

Ответ 1



Можно взять готовый плагин jQuery Radmenu. Можно позиционировать JavaScript'ом. var divs = document.getElementsByTagName('div'); var delta = Math.PI * 2 / divs.length; var x = 0, y = 0, angle = 0; for (var i = 0; i < divs.length; i++) { divs[i].style.position = 'absolute'; divs[i].style.left = 100 * Math.cos(angle) + 'px'; divs[i].style.top = 100 * Math.sin(angle) + 'px'; angle += delta; } И думаю, можно поисследовать возможности SVG для HTML5.

Хаки к играм и их создание

#разработка_игр #взлом


Возник такой вопрос, ответ на который хочется уточнить. Иногда можно встретить различные
"хаки" к играм, к примеру в warcraft 3/dota пишут различные maphack: запускаем приложение
и оно, к примеру, показывает в цифрах скорость регенерации health points, открывает
всю карту и т.п.

В Call Of Duty : Modern Warfare 3 можно запустить приложение и сделать inject dll
файла в запущенных экзэшник игры, после чего бот ходит и стреляет за тебя, в смысле
стоит лишь, чтобы враг попал в область видимости - бот сразу же точно сам стреляет
и убивает.

Почему возник вопрос... Я-то в игры играю редко, но само то, как делаются такие хаки
- стало интересно, задумался... Как это они так делают? Что ли как-то модифицируют
какие-то игровые значения или что? Reverse Engineering может быть?

Допустим, как в Modern Warfare 3 выделяет оппонента издалека красным квадратом -
как? Как программа знает об этом? И что вообще даст inject dll файла?

А как заставляет бота стрелять автоматически..

Сложно ли это и что за сферы нужно учить? (может кому-то вопрос покажется легким
или даже тупым, но я, к сожалению, не профи в этом деле, поэтому хотел бы задать такой
вот вопрос)
    


Ответы

Ответ 1



Допустим, как в Modern Warfare 3 выделяет оппонента издалека красным квадратом - как? Если очень примитивно, то на карте вы расположены с определенными координатами. Между машинами играющих идет постоянный обмен пакетами, в которых содержаться координаты всех игроков. Именно поэтому вы и видите или не видите каждого игрока в определенный промежуток времени. Но эти координаты предназначены в первую очередь для машины, которая должна знать, где "отрисовать" того или иного игрока. Хак перехватывает эти пакеты и "рассказывает" вам где кто находится, даже если он не в поле вашего зрения. А подсветить красным квадратиком - уже дело техники ))

Ответ 2



Сильно упрощенно пример отрисовки прямоугольника можно представить следующим образом. Исходный код игры: class GlobalContext { static GameDev.IGame Game = new GameDev.Game(); // ..... } Злоумышленник разрабатывает следующий код: namespace GameHack { // наследуемся от класса разработчика игры class Game : GameDev.Game { protected override DrawPlayer(PlayerInfo pi) { // рисуем все что было раньше base(pi); // получаем координаты прямоугольника, ограничивающего модель игрока Coordinates border = this.GetPlayerBorderRectangle(pi); // рисуем закрашенный прямоугольник по этим координатам this.DrawBar(border, Color.Red); } } } И при inject dll внедряет в программу этот код и выполняет дополнительно следующий: GlobalContext.Game = new GameHack.Game(); Таким образом при отрисовке изобретать велосипед не обязательно, а можно использовать уже готовую функциональность игры. Злоумышленнику достаточно лишь добавить небольшой штрих в урпавлении программой. В моем примере для создания этого штриха использовался шаблон проектирования декоратор. Кстати мультиплеер в МВ2 был реализован на .NET и за него отвечал интерфейс IWNet. "Сторонние разработчики" создали свою реализацию интерфейса IWNet и назвали ее AlterIWNet. Альтернативный мультиплеер AlterIWNet - пример высокоуровневого хака игры :). Ссылку дать не могу, т.к. на данный момент насколько я понял этот проект прекратил свое существование.

Как растянуть текст на всю длину страницы?

#html #css


Добрый день.

Есть элементарная разметка вида



Это просто какой-то текст

Как сделать так, чтобы параграф

...

занимал всю ширину страницы (или какую-то его часть) и при этом размер шрифта масштабировался? Так чтобы при разных размерах окна обозревателя высота шрифта была разной.


Ответы

Ответ 1



Как оказалось, задача элементарно решается в HTML5 с помощью встроенного SVG (проверено в Chrome и Firefox). Пример: Stretch to fit

Ответ 2



p{ width:100%; text-align:justify; }

Ответ 3



function onres() { var browwidth = document.documentElement.clientWidth; var myp = document.getElementById("myp"); myp.style.fontSize = browwidth / 5 + "px"; } window.onresize = onres; onres(); #myp { position: absolute; left: 0px; top: 0px; line-height: 100%; font-size: 9px; }

Это просто какой-то текст



Как заполнить объект структуры в аргументах функции по умолчанию?

#cpp


Хочу создать функцию с аргументами по умолчанию:

void MaterialDiffuse(D3DCOLORVALUE Difzf = {1,1,1,0}){
     //code
}

но аргументы по умолчанию не возможно занести в объект структуры D3DCOLORVALUE.
Как видно конструктора нет:
     typedef struct _D3DCOLORVALUE {
         float r;
         float g;
         float b;
         float a;
     } D3DCOLORVALUE;

Как можно заполнить струтуру в функции?


Кто-то ответил, но удалил ответ. Решение такое(кому-нибудь пригодится):

const _D3DCOLORVALUE defaultA = {1.0, 1.0, 10}; 
void MaterialDiffuse(_D3DCOLORVALUE Difzf = defaultA){
     //code 
}
    


Ответы

Ответ 1



В C++11 можно так: void MaterialDiffuse(D3DCOLORVALUE Difzf = D3DCOLORVALUE{1,1,1,0}){ //code }

Ответ 2



А почему бы не написать конструктор(-ы) для этой структуры и далее в параметрах функции: void MaterialDiffuse(D3DCOLORVALUE Difzf = D3DCOLORVALUE (1,1,1,0)){ ....... }

Java, Scala, Groovy и проч. что выбрать для разработки десктопа? [закрыт]

#groovy #desktop #java #scala


        
             
                
                    
                        
                            Закрыт. Этот вопрос не по теме. Ответы на него в данный
момент не принимаются.
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Переформулируйте вопрос,
чтобы он соответствовал тематике «Stack Overflow на русском».
                        
                        Закрыт 4 года назад.
                                                                                
           
                
        
Есть запрос на написание десктопного мультиплатформенного приложения. Условие язык
должен быть на платформе Java. 
Писать надо быстро, так что надо чтобы язык имел приличную гуйную библиотеку.
Что посоветуете?
По C/C++/Perl и проч. просьба не умничать. У приложения есть довольно большой набор
Java библиотек с бизнес-логикой, так что платформа строго Java - вариантов нет.    


Ответы

Ответ 1



Сами по себе Scala и Groovy пока не содержат в себе отдельных production-ready решений для GUI, кроме оберток над swing. При этом вариантов, вообще говоря, два - SwingBuilder для Groovy и scala.swing для Scala. Если вы хорошо знакомы с Groovy / Scala (и если вы не единственный из команды, кто может этим похвастаться), то можете воспользоваться одним из этих подходов. При этом, очевидно, стоит учитывать время на необходимость разобраться в деталях соответствующих оберток и возможные риски из-за их непродуманности или недоделанности. Очень обидно будет нарваться на UnsupportedOperationException("Not yet implemented") в конце спринта. Если нет, а выбор между vanilla Java / Scala / Groovy появился только благодаря "модности" последних, то работайте через них с java.swing, либо вообще остановитесь на просто Java. Лично я, не будь у меня как минимум года работы со Scala / Groovy / Clojure / Kotlin, не стал браться за разработку бизнес-решения на их базе.

Ответ 2



Наткнулся сегодня на dzone на номер журнала Java Tech Journal, посвященный Groovy, а уже в нем на статью о Grails-подобной платформе для десктопных приложений Griffon. Что дают (если верить статье): Набор утилит командной строки для создания проекта, сборки, упаковки и деплоя MVC Bindings для свойств бинов различные реализации непосредственно GUI (Swing, SWT, JavaFX) расширяемость плагинами Convention over Configuration, управление структурой и жизненным циклом приложения В общем, если есть тяга к экспериментам, я бы взглянул.

Ответ 3



Если надо быстро написать десктопное мультиплатформенное приложение, сегодня это возможно только на Lazarus+freepascal, который к тому же очищает совесть своим openSource. Слова "быстро написать", "java" и "мультиплатформенное приложение" не вяжутся. Сказки про java просто хорошо раскручены.

Локализация приложения Android

#android #java


Доброй ночи всем, писал приложение и тут стал вопрос о локализации, нашел один пример,
но как заюзать, не пойму, вот он пример: локализация приложений.
Может кто-нибудь объяснить, как сделать, что бы язык зависил от версии языка на самом
телефоне? Все стринг файлы есть, так что нужно только вот это сделать.    


Ответы

Ответ 1



Он и зависит. Создавайте соответствующие директории с названием локалей необходимых, подцепятся автоматом. res/values/strings.xml - дефолтные надписи res/values-ru_rRU/strings.xml - русские надписи res/values-en/strings.xml - английские надписи аналогично для картинок и проч. Вот таблица с возможными суффиксами, среди которых не только локаль может присутствовать но и другие параметры.

Вывод на экран [закрыт]

#ассемблер


        
             
                
                    
                        
                            Закрыт. Данный вопрос необходимо конкретизировать. Ответы
на него в данный момент не принимаются.
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Переформулируйте вопрос,
чтобы он был сосредоточен только на одной проблеме, отредактировав его.
                        
                        Закрыт 4 месяца назад.
                                                                                
           
                
        
Подскажите как в Assebmler вывести на экран слово Hello    


Ответы

Ответ 1



Fasm, через MessageBox: include 'win32ax.inc' .code start: invoke MessageBox,HWND_DESKTOP,'Hello!','Title',MB_OK invoke ExitProcess, 0 .end start Fasm, консоль, через WriteConsole: format pe console include 'win32ax.inc' .data hOut dd ? .code sHello db 'Hello!' .length = $ - sHello start: invoke GetStdHandle, STD_OUTPUT_HANDLE mov [hOut], eax ; на случай если будет использоваться не один раз invoke WriteConsole, [hOut], sHello, sHello.length, 0, 0 invoke ExitProcess, 0 .end start Fasm, консоль, через puts из msvcrt: format pe console entry start include 'win32ax.inc' section '.code' code readable executable start: cinvoke puts, 'Hello!' ret section '.idata' import data readable library msvcrt,'msvcrt.dll' import msvcrt,\ puts,'puts' Fasm, dos, через int 21h :) org 100h mov ah, 9 mov dx, hello int 21h ret hello db 'Hello!$'

Ответ 2



MASM32+WinAPI .686 .model flat, stdcall option casemap:none includelib C:\masm32\lib\kernel32.lib include C:\masm32\include\kernel32.inc include C:\masm32\include\windows.inc includelib C:\masm32\lib\user32.lib include C:\masm32\include\user32.inc .data cWritten DWORD 0 stdout DWORD 0 _title db " " mess db "Hello, world!" .code _st: invoke MessageBox, 0, ADDR mess, ADDR _title, 0 invoke ExitProcess, 0 end _st

Форматированый ввод в андроид

#android #java


Необходимо организовать проверку ввода в текстовое поле по фильтру.

+Х(ХХХ) ХХХ-ХХХХ

Идеальный сценарий таков. Изначально текст ввода выглядит так: 

+_ ( _ _ _   )    _ _ _-_ _ _ _ .

Пользователь вводит только цифры и они встают на свои места. Т.е. после первой цифры
будет так:

+7 ( _ _ _   )    _ _ _-_ _ _ _

Второй: 


+7 (4 _ _ )    _ _ _-_ _ _ _ и т.п.

Помогите с реализацией, примеры идеи...  Сам нашел это: using a mask with EditText,
но до ума довести не получается.
package my.dfedorenko;

import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;

public class TestPhoneparserActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    EditText phone = (EditText)findViewById(R.id.phone);  
    phone.addTextChangedListener(new MaskedWatcher("(###) ###-##-##"));  
    setContentView(R.layout.main);
}}
    


Ответы

Ответ 1



Самое простое, что приходит в голову, - нарезать текст .substring(), дальше надо смотреть, как у тебя вообще реализован ввод, через какие виджеты? Или просто в строку... import android.app.Activity; import android.os.Bundle; import android.widget.EditText; public class TestPhoneparserActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); EditText phone = (EditText)findViewById(R.id.phone); phone.addTextChangedListener(new MaskedWatcher("(###) ###-##-##")); }}

Условия в JavaScript (if, тернарный оператор или что-то еще?)

#style_guide #javascript


Есть ли возможность прописать условия более элегантно:
if (x2 > x1) {
  x = x1,
  w = x2 - x1;
} else {
  x = x2,
  w = x1 - x2;
}
if (y2 > y1) {
  y = y1,
  h = y2 - y1;
} else {
  y = y2,
  h = y1 - y2;
}
    


Ответы

Ответ 1



x = Math.min(x1, x2); w = Math.max(x1, x2) - x; y = Math.min(y1, y2); h = Math.max(y1, y2) - y;

Ответ 2



Не уверен, стоит ли это считать более элегантным способом, но можно так: [x, w] = (x2 > x1)? [x1, x2 - x1] : [x2, x1 - x2];

Ответ 3



Как то так :) : (x2 > x1 ? function(){x = x1; w = x2 - x1;} : function(){x = x2; w = x1 - x2;})(); (y2 > y1 ? function(){y = y1; h = y2 - y1;} : function(){x = y2; h = y1 - y2;})();

Ответ 4



Тернарный оператор, как правило, применяется для условных вычислений с возвратом результата. a = b>0?b:c; В остальных случаях для независимых блоков кода - обычный if. По крайней мере, именно такой смысл применения этих двух операторов ждет каждый программист работающий с чужим кодом.

Перегрузка двойной индексации C++

#перегрузка_операторов #cpp


Пусть имеется класс Matrix:
    class matrix
    { 
       public:

          int row;
          int col;
          double **M;

          matrix (int i, int j) {
              row = i;  
              col = j;
              M = new double*[row];

              for (int i = 0; i < row; i++) {
                  M[i] = new double[col];
                  for (int j = 0; j < col; j++) {
                      M[i][j] = 0;
                  }
              }
         };
     };

Нужно реализовать перегрузку двойной индексации на чтение и на запись элемента матрицы.
Ход моих мыслей:


Сделаю сначала на чтение, это легко =>
double* operator [] (int i, int j){ return M[i][j]; }



Угу... много параметров... =>
friend double* operator [] (int i, int j){ return M[i][j]; }



operator[] must be a member function ...хм...блин...


Вопрос: В чем проблема? Как исправить? =)    


Ответы

Ответ 1



Так не получится. Индексация в С++ всегда одинарная. Запись M[x][y] означает (M[x])[y] Просто M[x] должен возвращать строку, а далее к строке применяется её индексация. double* operator [] (int i){return M[i];}

Ответ 2



#include "stdafx.h" #include using namespace std; class MMassiveInt { private: class submasint;// подкласс строк матрицы (объявление) int row, col; // количества строк и колонок матрицы submasint *arrint; // указатель на массив подкласса строк матрицы class submasint// подкласс строк матрицы (реализация) { public: int *sarrint; // конструктор по умолчанию необходим для создания массива указателей на класс подстрок матрицы submasint() {} submasint(int size) { sarrint = new int[size]; // создание массива целочисленных данных for (int i = 0; i < size; i++)//инициализация полей нулями { sarrint[i] = 0; } } int & operator [] (int i) // оператор [] возвращает ссылку на int { return sarrint[i]; } // деструктор не нужен, если если его поставить, то строки матрицы будут // удаляться до того, как заполнится вся матрица // ~submasint() //{ // if (sarrint != nullptr) delete[] sarrint; //} }; public: MMassiveInt(const int rows, const int cols) //класс матрица целых чисел { rows < 1 ? row = 1: row = rows; // защита от ввода количества строк или столбцов менее 1 cols < 1 ? col = 1: col = cols; // создание массива указателей с использованием конструктора по умолчанию (без параметров) arrint = new submasint [row]; for (int i = 0; i < row; i++) { // создания строк матрицы. если у подкласса строк матрицы будет деструктор, // то строки будут удаляться в каждей итерации цикла arrint[i] = submasint(col); } } submasint & operator [] (int i)// оператор [] возвращает ссылку на подкласс строк матрицы { return arrint[i]; } int GetCol() // метод получения количества колонок матрицы { return col; } int GetRow()// метод получения количества строк матрицы { return row; } ~MMassiveInt() { for (int i = 0; i < row; i++) {// удаление строк матрицы if (arrint[i].sarrint!=nullptr) delete[] (arrint[i].sarrint); } if (arrint!=nullptr) delete[] arrint;// удаление массива указателей на строки матрицы } }; int main() { int mrow = 2, mcol = 3; // инициализация значения количество строк и столбцов матрицы MMassiveInt mas(mrow, mcol); // создание двумерного массива, и инициализация его полей нулями // вывода матрицы в консоль for (int i = 0; i < mas.GetRow(); i++) { for (int k = 0; k < mas.GetCol(); k++) { cout << mas[i][k] << "\t"; } cout << endl; } system("Pause"); return 0; } Аналогично делается и для Double.

Post-build event: Копирование результатов сборки в другую папку

#c_sharp #visual_studio #visual_studio_2010


Есть проект с dll, которую после билда постоянно вручную копирую в нужную папку.
Для автоматизации попробовал указать Post-build event. Просто dll скопировать легко: 
copy $(TargetPath) $(SolutionDir)..\..\lib\

А как за ней утянуть еще и xml описание? Не силен в bat'анике, надо как то отрезать
от $(TargetPath) расширение ".dll" или есть другие способы?    


Ответы

Ответ 1



Visual Studio сама копирует все сборки (dll'ки) и соответствующие им xml файлы в выходную папку, если ваш проект на .NET имеет на них ссылки (References), при этом сложные графы зависимостей резолвятся автоматически. С учетом того, что вы говорите о копировании xml файлов, предположительно, с документацией к сборке, то речь видимо идет о некоторой managed сборке. Таким образом, можно предположить, вы просто неправильно проставили настройки References в вашем проекте, поскольку копирование dll'ок, необходимых для запуска проекта должно происходить автоматически. Файлы с xml документацией по сборкам также копируются автоматически. Если я где-то ошибся в своих предположениях, то могу предложить вам более общее решение. Вместо того, чтобы как-то отрезать от названий файлов расширения и реализовывать некоторую сложную логику в Post-Build Events, сделайте примерно следующее: Определите множество файлов, которые всегда необходимо копировать в папку с собранным приложением (в вашем случае здесь будет дополнительная dll'ка и соответствующий ей xml файл). Отведите для этих файлов специальную папку в вашем проекте. Я в своих проектах использую папки с названиями data и static_data. Семантика этих названий следующая - в data хранятся файлы, без которых запуск приложения или тестов невозможен. Это могут быть какие-то входные данные, файлы для тест-кейсов, какие-то unmanaged dll'ки и т.п. В static_data находятся вспомогательные данные, которые просто используются в проекте - например, графические assets, скетчи UI, важная информация в pdf'ках. Далее в Post-Build Events добавьте следующую команду: xcopy "$(SolutionDir)data\*.*" "$(TargetDir)" /S /E /Y Этим вы гарантируете, что в случае успешной сборки проекта все файлы из data будут скопированы в Output папку с собранным приложением. Есть еще один важный момент, на который стоит обратить внимание - если файлы в папке data обновились, то они, естественно, не будут скопированы в Output до пересборки проекта, а значит, в некоторый момент времени, несмотря на то, что вы уже обновили файлы, собранное приложение будет работать со старым комплектом файлов. Это достаточно критично для тестов.

Ответ 2



Нужны просто немного другие команды в макросе. Вот пример из нашего проекта: copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)....\Export\$(TargetName).dll" copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)....\Export\$(TargetName).xml" точно так же можно добавить и pdb

Запись вызова метода в лог

#c_sharp #attribute #net #рефлексия


Есть такой код:
public class Foo
{
    [Log("Calling bar")]
    public void Bar()
    {
    }
}

Как сделать, чтобы при вызове метода Bar что-то писалось в лог?
Хотелось бы какое-нибудь событие типа OnCall.    


Ответы

Ответ 1



Аспектно-ориентированное программирование Ведение лога и обработка ошибок — типичные примеры сквозной функциональности. PostSharp - одна из лучших библиотек АОП для c# Вот пример аспекта: public class LogAttribute : PostSharp.Aspects.OnMethodBoundaryAspect { // Выполняется перед входом в метод. public override void OnEntry(MethodExecutionArgs args) { Console.WriteLine("Входим в метод {0} класса {1}", args.Method.Name, args.Method.DeclaringType.FullName); } // Выполняется при успешном завершении работы метода public override void OnExit(MethodExecutionArgs args) { Console.WriteLine("Метод {0} класса {1} успешно отработал", args.Method.Name, args.Method.DeclaringType.FullName); } } Быстрый старт PostSharp. Решение задач логгирования и аудита Несколько полезных аспектов для PostSharp

Событие добавления нового элемента

#jquery #javascript #dom


Как можно поймать событие, когда динамически добавляется новый элемент?
.live('ready' function(){}) не работает
    


Ответы

Ответ 1



$('#someId').on('appendCompleted', function(){ console.log('append completed'); }); $('#container').append(function(idx){ $('#someId').trigger('appendCompleted'); return '
...
'; }); UPD: более каноническое решение $.when($('#container').append('
...
')) .done(function(){ console.log('append completed'); }) .trigger() .append() jQuery.when()

Ответ 2



$("div#container").delegate("div#obj", "click", function() { $(this).toggleClass("chosen"); }); источник

Ответ 3



Если используете версию дж квери последнюю, то лучше использовать on. И ставить обработчик не на сам объект а через делегирование, вот так: $('body').on('click', '.elem', function(){});

PHP-реализация WebSockets

#php #websocket #html5


Здравствуйте, написал небольшой скрипт для работы с WebSockets относительно скриптов
в паблике.
По идее должно работать отлично, но всё не так, как хотелось бы :(
Когда я отправляю данные из браузера (подопытный Google Chrome 18) на сервер, то
php-демон должен писать мне эти данные в терминал. Однако, вместо данных присылаются
непонятные рандомные символы. Расскажите пожалуйста, каким образом их нужно дешифровать
или же исправьте мой код, пожалуйста. 
Спасибо заранее.
client.html
server.php    


Ответы

Ответ 1



Вы неправильно ознакомились с протоколом WebSocket. Если говорить конкретно по вашему вопросу, то вы не учитываете факт того, что данные фрейма содержат не только переданные вами данные, но еще дополнительную информацию. Например данные практически всеми браузерами маскируются (т.е. шифруются) с помощью маски. Формат фрейма выглядит примерно так: В любом случае вы неправильно реализовали протокол и я рекомендую почитать вам описание websocket на javascript.ru.

Ответ 2



попробуй вместо $buffer = substr($buffer,strpos($buffer,"Sec-WebSocket-Key: ")+19); написать mb_substr($buffer,strpos($buffer,"Sec-WebSocket-Key: ")+19,'utf-8'); не посмотрел внимательно на код но это должно помочь при такой ситуациии

Ответ 3



Для отправки текста необходимо его декодить по правилам, указанным выше. Вот готовое решение: function encode($payload, $type = 'text', $masked = true) { $frameHead = array(); $frame = ''; $payloadLength = strlen($payload); switch ($type) { case 'text': // first byte indicates FIN, Text-Frame (10000001): $frameHead[0] = 129; break; case 'close': // first byte indicates FIN, Close Frame(10001000): $frameHead[0] = 136; break; case 'ping': // first byte indicates FIN, Ping frame (10001001): $frameHead[0] = 137; break; case 'pong': // first byte indicates FIN, Pong frame (10001010): $frameHead[0] = 138; break; } // set mask and payload length (using 1, 3 or 9 bytes) if ($payloadLength > 65535) { $payloadLengthBin = str_split(sprintf('%064b', $payloadLength), 8); $frameHead[1] = ($masked === true) ? 255 : 127; for ($i = 0; $i < 8; $i++) { $frameHead[$i + 2] = bindec($payloadLengthBin[$i]); } // most significant bit MUST be 0 (close connection if frame too big) if ($frameHead[2] > 127) { $this->close(1004); return false; } } elseif ($payloadLength > 125) { $payloadLengthBin = str_split(sprintf('%016b', $payloadLength), 8); $frameHead[1] = ($masked === true) ? 254 : 126; $frameHead[2] = bindec($payloadLengthBin[0]); $frameHead[3] = bindec($payloadLengthBin[1]); } else { $frameHead[1] = ($masked === true) ? $payloadLength + 128 : $payloadLength; } // convert frame-head to string: foreach (array_keys($frameHead) as $i) { $frameHead[$i] = chr($frameHead[$i]); } if ($masked === true) { // generate a random mask: $mask = array(); for ($i = 0; $i < 4; $i++) { $mask[$i] = chr(rand(0, 255)); } $frameHead = array_merge($frameHead, $mask); } $frame = implode('', $frameHead); // append payload to frame: for ($i = 0; $i < $payloadLength; $i++) { $frame .= ($masked === true) ? $payload[$i] ^ $mask[$i % 4] : $payload[$i]; } return $frame; } function decode($data) { $unmaskedPayload = ''; $decodedData = array(); // estimate frame type: $firstByteBinary = sprintf('%08b', ord($data[0])); $secondByteBinary = sprintf('%08b', ord($data[1])); $opcode = bindec(substr($firstByteBinary, 4, 4)); $isMasked = ($secondByteBinary[0] == '1') ? true : false; $payloadLength = ord($data[1]) & 127; // unmasked frame is received: if (!$isMasked) { return array('type' => '', 'payload' => '', 'error' => 'protocol error (1002)'); } switch ($opcode) { // text frame: case 1: $decodedData['type'] = 'text'; break; case 2: $decodedData['type'] = 'binary'; break; // connection close frame: case 8: $decodedData['type'] = 'close'; break; // ping frame: case 9: $decodedData['type'] = 'ping'; break; // pong frame: case 10: $decodedData['type'] = 'pong'; break; default: return array('type' => '', 'payload' => '', 'error' => 'unknown opcode (1003)'); } if ($payloadLength === 126) { $mask = substr($data, 4, 4); $payloadOffset = 8; $dataLength = bindec(sprintf('%08b', ord($data[2])) . sprintf('%08b', ord($data[3]))) + $payloadOffset; } elseif ($payloadLength === 127) { $mask = substr($data, 10, 4); $payloadOffset = 14; $tmp = ''; for ($i = 0; $i < 8; $i++) { $tmp .= sprintf('%08b', ord($data[$i + 2])); } $dataLength = bindec($tmp) + $payloadOffset; unset($tmp); } else { $mask = substr($data, 2, 4); $payloadOffset = 6; $dataLength = $payloadLength + $payloadOffset; } /** * We have to check for large frames here. socket_recv cuts at 1024 bytes * so if websocket-frame is > 1024 bytes we have to wait until whole * data is transferd. */ if (strlen($data) < $dataLength) { return false; } if ($isMasked) { for ($i = $payloadOffset; $i < $dataLength; $i++) { $j = $i - $payloadOffset; if (isset($data[$i])) { $unmaskedPayload .= $data[$i] ^ $mask[$j % 4]; } } $decodedData['payload'] = $unmaskedPayload; } else { $payloadOffset = $payloadOffset - 4; $decodedData['payload'] = substr($data, $payloadOffset); } return $decodedData; } Для отправки в сокет данных делаем так: fwrite($connect, encode('hello'));. Ну и чтение соответственно.

3D-вращение без jQuery (jQuery 3D plugin)

#javascript #html #css #3d


Существует отличный плагин (http://www.zachstronaut.com/projects/rotate3di/#demos)
для вращения элементов разметки. Использование плагина весьма просто и удобно
$('#something').click(function () {
    $(this).rotate3Di('-=180', 1000);
});

где #something - это тот элемент, который нужно вращать по клику. Однако возникла
необходимость вращать элемент без подключения внешних библиотек, вроде jQuery. Как
это сделать одним HTML5/CSS3/JavaScript?    


Ответы

Ответ 1



Вариант №1 - изучить исходники http://www.zachstronaut.com/js/rotate3di.js и почитать инфу тут: http://www.zachstronaut.com/projects/rotate3di/#demos Используется transform вкупе со skew и scale. Нужно будет переписать анимацию на setTimeout (а лучше на requestAnimationFrame + setTimeout) и просто можно заюзать формулы преобразований их исходника. Вариант №2 - заняться изучением css3 более подробно: http://www.html5rocks.com/en/tutorials/3d/css/ http://www.netmagazine.com/features/20-stunning-examples-css-3d-transforms

Ответ 2



Работай с матрицами напрямую, смотри доки к функциям OpenGL. Зачем? Затем, что там заодно описана матрица. Нужна матрица вращения? Пожалуйста - http://www.opengl.org/sdk/docs/man/xhtml/glRotate.xml , там есть матрица, хромом не отображает, так что юзай Oper'y. Напиши функцию перемножения матрицы на вектор. Кстати, матрицы, описываемые на том сайте, ориентированы по столбцам (прошу прощения за некорректное выражение), т.е. чтобы получить результирующий вектор - необходимо именно матрицу умножить на вектор-столбец. PS. Посмотрел, там не хватает перспективы! Так что матрицы - это ваше все. Цените их, пока они не обиделись.

Ответ 3



front
back
Для chrome пример : http://jsfiddle.net/zNvP6/

Как можно узнать высоту страницы в пикселях?

#html #php


Есть страница сайта. Можно ли как-то узнать, какова её высота в пикселях?    


Ответы

Ответ 1





Ответ 2





Ответ 3





Ответ 4



document.documentElement.scrollHeight - высота всей страницы

Приложения баз данных. Паттерны проектирования.

#c_sharp #шаблоны_проектирования #sql_server


Здравствуйте! Есть небольшая база данных, допустим, библиотеки. Какие паттерны проектирования
стоило бы использовать? Какие правила стоит учитывать при проектировании базы данных
и самого приложения? Стоит ли использовать паттерн MVP и какая выгода будет от этого?
Заранее спасибо.    


Ответы

Ответ 1



Как сказали в уточнениях, паттерн MVP действительно не имеет отношение к БД. Он скорее имеет отношение к интерфейсной части (client-side). Я бы сказал, что самое главное правило, которого стоит придерживаться при разработке приложений, которые обращаются к БД, это трехслойная архитектура: UI - Business Logic - DB. В самом тупом случае, слой DB у вас может представлять собой набор хелперов для работы с БД. В частности, отмечу некоторые важные моменты: все прямые обращения к БД должны быть только в слое DB, никаких прямых вызовов к БД, разбросанных по всему коду все обращения к слою DB должны исходить только из слоя BL, в UI не должно быть прямых вызовов кода из слоя DB В остальном, реально не имеет значения (особенно в небольшом проекте), как у вас будет организовано получение и сохранение данных: тупые датасеты, ORM или что-то еще. Существует несколько распространенных паттернов для работы с данными, однако их применение также не очень критично (и уж точно не стоит применять их ради самого факта применения, о чем говорили выше). Главное — обособить код для работы с базой, это уже избавит вас от множества проблем. Ниже список некоторых паттернов для работы с БД: http://design-pattern.ru/patterns/repository.html http://ru.wikipedia.org/wiki/Data_Access_Object http://design-pattern.ru/patterns/table-data-gateway.html http://design-pattern.ru/patterns/row-data-gateway.html http://design-pattern.ru/patterns/active-record.html -- тут я готов спорить, предпочитаю иметь тупые объекты (DTO, только данные) плюс классы, которые отвечают за загрузку/сохранение http://design-pattern.ru/patterns/data-mapper.html

Перенос тернарного оператора и вызываемых методов

#c_sharp #code_style


Какой способ переноса для тернарного оператора является наиболее общепринятым?
a = b ?
    c :
    d;

a = b
    ? c
    : d;

Аналогичный вопрос про вызываемые методы.
someObject.
   Foo();

someObject
  .Foo()

В качестве ответа меня бы вполне устроила ссылка на code style conventions какой-нибудь
крупной компании, где фигурируют эти вопросы.    


Ответы

Ответ 1



Придерживаюсь второго варианта как в первом, так и во втором случае. Врядли здесь можно найти "общепринятый" способ переноса. Каждый это решает сам, или придерживается правил, принятых в команде.

Ответ 2



1) Второе. 2) Второе.

Ответ 3



Первый вариант более привычно выглядит, т.к. ближе к естественной пунктуации английского языка (знак препинания в конце строки). Второй вариант более эффективен с технической точки зрения. Вы можете в отладочных целях комментировать отдельные строки кода, не нарушая его синтаксической корректности, что было бы затруднительно, будь у Вас оператор в конце строки. Ну и само размещение оператора в начале строки просто нагляднее - там он заметнее.

Ответ 4



Если уж приходится переносить, то первый вариант это a? b: c; или (ну, совсем не влезает) a? b: c; Вообще, если выражение столь громоздко, что в две строки не помещается, то стоит подумать о функции. Второй однозначно obj .m();

Эмуляция команды ROR

#c_sharp


Приветствую всех :)
Собственно интересует такой вопрос: Как можно имитировать ассемблеровскую команду
ROR в C#?     


Ответы

Ответ 1



Попробуйте так: static UInt32 ROL(UInt32 number, int shift) { shift %= 31; return ((number << shift) | (number >> (32 - shift))); } static UInt32 ROR(UInt32 number, int shift) { shift %= 31; return ((number >> shift) | (number << (32 - shift))); }

Ответ 2



C: #define WORD_LENGTH (8*sizeof(value)) int rol(unsigned value, int places) { return (value<>(WORD_LENGTH-places)); } int ror(unsigned int value, int places) { return (value>>places)|(value<

План изучения Java для Web [закрыт]

#java #java_ee


        
             
                
                    
                        
                            Закрыт. На этот вопрос невозможно дать объективный ответ.
Ответы на него в данный момент не принимаются.
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Переформулируйте вопрос,
чтобы на него можно было дать ответ, основанный на фактах и цитатах, отредактировав его.
                        
                        Закрыт 3 года назад.
                                                                                
           
                
        
Посоветуйте план изучения java для веб, собственно, java ee. Что почитать, что необходимо
знать. Понимаю, что вопрос уже задавался не один раз, но хотелось бы услышать актуальное
мнение.
Немного о себе: изучал java по первому тому хорстманна, писал небольшие приложения
в университете (лабораторные, курсовые работы), html, xml.
Что советуете прочитать/узнать, чтобы получить более менее полное представление о
веб разработке на java.
Язык предпочтительно русский, но английский не будет большой проблемой    


Ответы

Ответ 1



Последовательность изучения: Servlets (установить себе в конце-то концов Tomcat) JSP (обратить внимание на теги и простейшие фреймворки типа Struts) JDBC (перед изучением знать хотя бы что-то о SQL и не ограничиваться одним JDBC-ODBC бриджем) Hibernate (попробовать пару-тройку диалектов, скажем MySQL/MS SQL Server/Oracle) Spring По JSP/Servlet есть уже классическая книга: М.Холл: Сервлеты и Java Server Pages По Hibernate и Spring сложно - не знаю ничего приличного.

Ответ 2



Советую найти любую книжку по Java EE и сделать акцент на самые простые вещи, например; как сделать так что б дата которая посылается от клиента заходила в БД, как вытягивать из базы данных информацию - и где и как ее отображать. А еще, если вы уже делали некие лабораторные работы то можете прямиком их же и реализовать для постройки веб-сайта, скорее всего он будет мини сайт но зато вы будете опираться на то что уже знаете .

Нужна ли обратная связь в мобильном приложении?

#android #windows_phone_7 #ios #iphone


Доброго времени суток, Господа!
Только что поучаствовал в споре — «а нужна ли обратная связь в мобильном приложении?»
Я с читаю что нужна, потому что когда я пользуюсь приложениями, иногда возникает
необходимость сообщить о каком то баге, неудобстве или еще о чем-нибудь, но очень редко
встречается, что приложение имеет такую функцию, а идти на маркет, искать это приложение
и писать туда отзыв, не очень приятное занятие(я ленивый). Так вот, может у кого-то
был уже подобный опыт или кто-то сталкивался с таким вопросом и к чему это привело,
поделитесь пожалуйста. 
Какие аргументы мне привели против:
— слишком навязчиво получается, если по-твоему… Ты с хабра! Ты учить будешь! А мне
не надо ниче.
PS: моя идея реализации такова: текстбокс и кнопка отправить, никаких пользовательских
данных передаваться не будет.    


Ответы

Ответ 1



С одной стороны фидбек, особенно быстрый, всегда важен, с другой стороны на почту с большой долей вероятности -будет сыпаться много спама, который придётся фильтровать, но думаю будут и полезные письма. Мой выбор - такая форма нужна, но находится она должна, где-то в настройках.

Ответ 2



Не знаю как там насчет WP7 и iOS, но в Android: Возможность фидбека при падении приложения по умолчанию встроена в Android, при согласии юзера крэш репорт отсылается разработчику Для Android существует огромное количество либ/инструментов для организации обратной связи - в основном они используются для маркетинга, выдачи рекламных баннеров (в зависимости от страны, аппарата, сети и проч.) - бессмысленно их перечислять, достаточно погуглить Google недавно запустил сервис Google Cloud Messaging, который позволяет пересылать девелоперу сообщения в свою аппу В общем и целом в сумме, рынок движется в сторону интенсификации связи приложение <-> девелопер. Так что считаю, это нужная и полезная штука.

Ответ 3



Сейчас работаю над IOS приложением где на каждом контроллере маленькая кнопка инфо в углу. По нажатию открывается форма обратной связи с разработчиками. Это было требованием по тз и я считаю это абсолютно верным, так как Вы как разработчик получаете возможность быстрого и вероятно всеобъемлющего тестирования ресурсами других людей, и возможность быстро залатать баги или протестить функционал при внедрении обновления например. Плюс меньше будет негативных отзывов в аппсторе если все же будут баги. А чтобы ненавязчиво было - подключайте UI дизайнера. И все будет отлично

Ответ 4



ИМХО, возможность фидбека была бы не плохой, однако любые отчеты об ошибках должны отправляться в автоматическом режиме, либо с разрешения пользователя(для экономии трафика). Также хочу уточнить пользовательские данные ДОЛЖНЫ отправляться. Будь то id телефона или же уникальный id для копии приложения. Как минимум это должно быть реализовано для банально защиты от флуда в фидбек и соответственно реализованы механизмы его предотвращения на сервере и возможно в приложении. Так же я считаю что фидбек не должен находится на видном месте и мозолить глаза пользователя. Лучшим вариантом запрятать эту функцию куда нибудь в настройки или же в информацию о ПО. Возможно даже лучшим вариантом было бы простая ссылка на очень легкую страницу для фидбека. Повторяю все вышеописанное - мое мнение и не претендует на истину.

Хороший и краткий учебник по компьютерным сетям [закрыт]

#сеть #книги


        
             
                
                    
                        
                            Закрыт. На этот вопрос невозможно дать объективный ответ.
Ответы на него в данный момент не принимаются.
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Переформулируйте вопрос,
чтобы на него можно было дать ответ, основанный на фактах и цитатах, отредактировав его.
                        
                        Закрыт 4 года назад.
                                                                                
           
                
        
Доброго времени суток.
Прошу совета по кратким пособиям по компьютерным сетям. Я - программист, но вот с
пониманием работы сетей и протоколов у меня плоховато. Хочу подтянуться.
Не нужны учебники на 1к листов, я хочу почитать связный материал и быстро узнать
что такое DHCP, DNS, WINS, Шлюзы, DNS-суффиксы и так далее. Я конечно мог бы просто
пройтись по википедии и почитать определения, но это было бы не совсем связно, я хочу
узнать что происходит от момента втыкания патчкорда в сетевую карту и до момента доступа
к интернету, что ОС делает сама, а что иногда приходится делать в ручную. Если таковые
встречали - посоветуйте пожалуйста.
Заранее большое спасибо!    


Ответы

Ответ 1



Э. Таненбаум "Компьютерные сети"

Ответ 2



Самая короткая из знакомых мне полезных - Й.Снейдер "Эффективное программирование TCP/IP" - примерно 300 страниц. А вообще, очень хорошо разжеванный материал - Д. Камер "Сети TCP/IP" - тут уже страниц 800, но кто мешает выбрать отдельно интересующие главы, в частности в начале книги очень хорошо и доступно описан механизм работы сетей с нуля, этих глав Вам на первое время будет достаточно.