Страницы

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

четверг, 6 июня 2019 г.

Перенос папок в папку

Есть папка A Есть папка Б Нужно перенести содержимое Б в А. Содержимое может совпадать по имени. Т.е. если совпали папки, то просто переносится содержимое папки, если совпали файлы, то перезаписываются. Если папки нет, то создается и переносятся данные. Здесь очень похожая функция, но не работает с совпадениями. Думаю многие встречались с подобным. p.s. как запасной план, использовать линуксовые возможности.


Ответ

Создается функция которая принимает на вход путь и создаёт папки для этого пути. (например, mkdirs('/home/pupkin/dirs/A'); на каждой папке проверяет её существование, если папки не существует - то создаём её если существует то ничего не делаем, переходим к вледующей части пути) Создаётся функция рекурсивного копирования. recursiveCopy($from, $to) читаем содержимое папки $from в цикле: если это файл то: копируем его из $from.'/'.$file в $to.'/'.$file если это папка: mkdirs($to.'/'.$file); recursiveCopy($from.'/'.$file, $to.'/'.$file); вот и всё.

Как послать JSON в теле HTTP-ответа?

Отдается JSON так: HttpListener listener = new HttpListener(); listener.Prefixes.Add(new Uri("http://localhost:8181")); listener.Start(); while (isListening) { HttpListenerContext context = listener.GetContext(); HttpListenerRequest request = context.Request; HttpListenerResponse response = context.Response; //... MemoryStream ms = (GeoJsonDeserialize.SerializeGeoJson(ObjToJson) as MemoryStream); byte[] buffer = ms.ToArray(); response.StatusCode = (int)HttpStatusCode.OK; response.KeepAlive = false; response.ContentType = "application/json"; response.ContentEncoding = System.Text.UTF8Encoding.UTF8; response.ContentLength64 = buffer.Length; response.AddHeader("Cache-Control", "private, max-age=0"); Stream output = response.OutputStream; output.Write(buffer, 0, buffer.Length); ms = new MemoryStream(); ms.Write(buffer, 0, buffer.Length); buffer = ms.ToArray(); output.Close(); } В другой проге на C# я запрашиваю так: WebRequest webRequest = WebRequest.Create("http://localhost:8181"); WebResponse webResponse = webRequest.GetResponse(); StreamReader sr = new StreamReader(webResponse.GetResponseStream()); String str = sr.ReadToEnd(); и вижу переданный текст (JSON). Но вот беда - ни Ajax не видит тело ответа (выдает ошибку), ни OpenLayers который по GeoJSON должен показать точки на карте. OpenLayers запрашивает данные (за основу взят пример OpenLayersRotationExample): vectors = new OpenLayers.Layer.Vector( "Simple Geometry", { protocol: new OpenLayers.Protocol.HTTP({ url: "http://localhost:8181", format: new OpenLayers.Format.GeoJSON() }), strategies: [new OpenLayers.Strategy.Fixed()] }); map.addLayers([vectors]); Объект в JSON (GeoJSON) выглядит так: {"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-108.04,44.68]},"properties":{"course":184.7}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-111.04,45.68]},"properties":{"course":44.1}}]} Специально пробовал текст передаваемого JSON загрузить в OL непосредственно в JavaScript: var featurecollection = {"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-111.04,45.68]},"properties":{"course":42.9}},{"type":"Feature","geometry":{"type":"Point","coordinates":[-111.04,45.68]},"properties":{"course":157.5}}]}; var geojson_format = new OpenLayers.Format.GeoJSON(); var vector_layer = new OpenLayers.Layer.Vector("Simple 1", { styleMap: new OpenLayers.StyleMap({ "default": { externalGraphic: "OpenLayersRotationExample_files/marker-gold.png", //graphicWidth: 17, graphicHeight: 20, graphicYOffset: -19, rotation: "${course}", }, "select": { cursor: "crosshair", externalGraphic: "OpenLayersRotationExample_files/marker.png" } }) }); map.addLayer(vector_layer); vector_layer.addFeatures(geojson_format.read(featurecollection)); И все работает - точки отображаются. Вывод - я неправильно отдаю JSON. Подскажите как в ответ на запрос отдать JSON что бы JavaScript его смог принять?


Ответ

Поскольку провайдер точек и страница отображающая карту находится в разных доменах, действует Same Orign Policy В OpenLayers есть OpenLayers.Protocol.Script который использует JSONP для получения данных. По умолчанию callback называется OpenLayers.Protocol.Script.registry.c1. Вам необходимо переделать провайдер соответствующим образом, чтобы он оборачивал результирующий JSON в эту функцию.

Информировать пользователя о том что другой пользователь набирает сообщение (как Вконтакте)

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


Ответ

1) На странице сообщение у каждого пользователя делаем скрытый div внутри которого текст + картинку о наборе текста. 2) При наборе символов в поле - вешать обработчик, что были изменения в поле - и отсылать ajax запрос, что юзер производит написание текста. 3) На ответной стороне производить каждое N секунд проверку ajax запросом, были ли изменения какие-либо, принимать и обрабатывать. 4) Если были изменения открываем div блок. Это самый легкий способ, можно организовать данные вещи на NodeJS + Socket.io

QML vs QPainter Widget - что производительнее?

Собираясь разрабатывать новое приложение (на C++ и Qt), столкнулся перед выбором: как реализовать интерфейс - на QML или сделать по старинке виджетами (будет виджет, наследованный от QPainter на котором будут отрисовываться объекты да скроллироваться, и еще несколько виджетов с различными текстовыми полями и кнопками). С QML у меня нет никакого опыта, поэтому на виджетах я сделаю интерфейс намного быстрее. Однако, может быть у QML есть какие-то плюсы по сравнению с традиционными виджетами? Так какие же? Что из них производительнее?


Ответ

Вы пытаетесь сравнивать кислое с синим. Вот скажите мне, например, что производительнее - XML или Frostbite 2? QML - это удобный способ программировать виджеты, транзишны, разнообразные визуальные эффекты и стили оформления. Он парсится как язык, но в конечном счете отрисовывает то, что вы ему сообщили, с помощью того же самого QPainter'a: QML builds directly upon QGraphicsView, which in turn builds upon QPainter, which in turn builds upon QPaintEngine (and the internal QGraphicsSystem classes), which have various hardware accelerated implementations. Утверждается, что любой случай сложной разметки и логики на QML можно проэмулировать, вручную создавая элементы на QGraphicsView, и, соответственно, получить абсолютно одинаковую производительность.

Выбор виртуальной машины

На новой работе приходиться пользоваться виндой :( Хочу поставить нормальную виртуалку и накатить linux. Посоветуйте что-нибудь из личного опыта. Критерии: Минимальная потеря производительности; не надо покупать; хост-машина: windows, гостевая-машина: linux располагаю машинкой с ЦПУ 3,1 Ггц, ОЗУ 4Гб Пробовал VirtualBox, но xubuntu ели тянет. Дома юзаю KVM -- очень хорошая вещь, но для винды версии нет. P.s. Просьба холивар не устраивать и ответы сопровождать комментариями на основе собственного опыта, а не Дяди Васи.


Ответ

Извиняюсь если не конкретно по вопросу, но я без особых проблем в xubuntu на виртуалбоксе запускал xubuntu на своем Asus EeePc - раза в 4 слабее описанных характеристик. Мне кажется надо грамотно подобрать swap и размещение файла оси на ЖД и выделение ресурсов для виртуалки - найти ту золотую серединку чтобы винда не перехватывала ресурсы и чтобы виртуалке хватало.

Динамическое подключение и использование java-классов

Продолжение вопроса. Узнал и разобрался как XJC генерирует классы для типов. Отсюда вопрос - как динамически подключать и использовать их?


Ответ

Я вопрос понял. Вопрос сложный. По сути речь идет о том, чтобы в рантайме скомпилировать исходники и прицепить к аппе - фактически состоит из 2-х частей: Как подключить класс в рантайме Как скомпилировать класс в рантайме Если первый решается загрузчиком класса - конструкцией типа Class.forName() в связке с ClassLoader, то второй вопрос сложнее, но при использовании Java >= 6 это решаемо: String fileToCompile = "MyClass.java"; JavaCompiler compiler = javax.tools.ToolProvider.getSystemJavaCompiler(); int compilationResult = compiler.run(null, null, null, fileToCompile); Если Java < 6 то есть только недокументированные возможности (я уже забыл какие).

Как удалить записи из таблицы одной командой?

Не получается удалить записи в таблице! Нужно удалить все комментарии у которых item_id=6. Этих комментарий штук 8. Пробую удалить таким образом: IQueryable query = (from del in db.Comments where del.item_id == 6 select del); db.DeleteObject(query);//ругается тут Но пишет что: Не удалось удалить объект, поскольку он не найден в ObjectStateManager. однако, если я хочу удалить один комментарий, т.е. так: Comment cquery = (from del in db.Comments where del.id == 4 select del).First(); то получается. Как мне правильно написать, чтобы не применять foreach и подобные вещи, а удалить сразу все комментарии, одним sql запросом (или командой, как правильнее сказать)?


Ответ

var query = from com in db.Comments where com.item_id == 6 select com;
foreach (Comment comment in query) { // тут будет 1 запрос на выборку из бд db.Comments.Remove(comment); }
db.SaveChanges(); // тут будет delete [dbo].[Comments] where ([Id] = 6) То есть удаление всех комментариев с item_id=6 произойдет с помощью одного SQL запроса

Создание Shell Extentions

Здравствуйте, Уважаемые Хэшкодовцы! Благодаря Вам узнал об альтернативных потоках данных для файлов на NTFS системе. Благодаря интернету научился с ними работать через командную строку. Может кому интересно: echo some file > file.txt создали/перезаписали информацию в файлу "file.txt" текстом "some file" echo some description > file.txt:desc создали/перезаписали альтернативный поток с именем "desc" для файла "file.txt" more < file.txt type file.txt отобразили в окне консоли информацию содержащейся в файле "file.txt". В нашем случае "some file" more < file.txt:desc отобразили в окне консоли информацию из альтернативного потока с именем desc. dir /r отобразили список всех файлов в текущем каталоге с их альтернативными потоками В общем выше была лирика, это может кому пригодится. Теперь собственно сам вопрос: Как реализовать окно свойств, которое отобразит данные из альтернативного потока В интернете нахожу много информации, как реализовать свою Shell Extentions. Но информации очень много на английском языке (или я просто не могу найти аналогичной информации на русском), что сильно затрудняет поиски решения с моими познаниями "вражеского" языка. Многие примеры рассказывают как перехватить выполнение команды, как добавить в контекстное меню файлов свои пункты, но это все не то. Мне нужно открыть окно свойств файла, в открывшемся окне свойств добавить свою закладку с конкретным именем, на закладке расположить компонент позволяющий просматривать текстовую информацию (ну пусть скажем это будет RichTextView) ну и поместить туда информацию из альтернативного потока с конкретным именем. Как читать информацию из альтернативного потока примеры я нашел, думаю разберусь самостоятельно, а вот реализацией персональной закладки свойств для файла - увы не получается. На всякий случай уточню, расширений файлов будет несколько, для которых данное окно свойств должно появиться (ну например это будут .ex1, .ex2), и если есть такая возможность, окно свойств не отображать, в случае если альтернативного потока данных с нужным именем отсутствует у файла). Забегая немного вперед, хотел бы еще возможность отображать окно свойств для нескольких выбранных файлов, но с этим сначала попробую сам разобраться. Что собственно хочу от вас? Желательно ссылку на документацию по моей проблеме. Как я понял, махинаций которые можно вытворять при помощи Shell Extentions навалом, человеку который этим никогда не занимался - темный лес. Если есть конкретный пример подобной реализации на c# - буду признателен. Желательно конечно, чтобы код не был навороченным, достаточно самых основ, далее будем плясать от печки по принципу удочки. Ну и самое "здоровское" для меня, как для начала изучения проблемы - это подсказка, с чего начать писать модуль? Какие интерфейсы должны быть реализованы? PS: Если все это будет еще и на русском языке - вообще вам цены не будет =) Заранее спасибо, что дочитали все это до конца, и за ваши ответы.


Ответ

В силу ряда проблем Microsoft не рекомендует писать расширения для обозревателя с помощью управляемого кода и не планирует поддерживать разработку подобных расширений. На неуправляемом коде добавление страницы свойств происходит согласно руководству (на английском): How to Register and Implement a Property Sheet Handler for a File Type Если все же браться за расширение на C#, то в качестве исходной точки можно взять готовый проект на C# (на английском): Property Sheet Shell Extension in C#

Странная работа в NetBeans

Написал программу на java в NetBeans /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package workwithstrings;
/** * * @author Asus */ import java.util.*; public class WorkWithStrings {
/** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here String s, substring; Scanner in=new Scanner(System.in); System.out.println("Введите строку: "); s=in.nextLine(); System.out.println("Введите подстроку: "); substring=in.nextLine(); if (s.indexOf(substring)!=-1) { System.out.println("Подстрока "+substring+" присутствует в строке "+s); } else { System.out.println("Подстрока "+substring+" не присутствует в строке "+s); };
} } В результате при вводе латинсих символов программа работает нормально. А при вводе русских после ввода первой строки и нажатия Enter не появляется строки приглашения Введите подстроку: Приходится нажимать второй раз Enter и терятеся возможность ввода подстроки. Врезультате программа говорит, что подстрока найдена. Вот вывод программы run: Введите строку: ыипмаврперапроао
Введите подстроку: Подстрока присутствует в строке ���������������� ПОСТРОЕНИЕ УСПЕШНО ЗАВЕРШЕНО (общее время: 13 секунд) А при латинских символах выполняется нормально: run: Введите строку: dhgfhjh Введите подстроку: a Подстрока a не присутствует в строке dhgfhjh ПОСТРОЕНИЕ УСПЕШНО ЗАВЕРШЕНО (общее время: 8 секунд)


Ответ

Попробуйте сменить 1. Кодировку проекта. 2. Кодировку консоли Java(ps. геморно, сложно, ничего не дает - не пробуйте:) )

SyntaxError: Non-ASCII character '\xd1'

Написал следующий код conAcc = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=D:\ThirdTask\Northwind.accdb') SqlAccess=conAcc.cursor(); SqlAccess.execute(sql.sql_count_record_clients); CountOfRecords=SqlAccess.fetchone(); conAcc.close(); где в модуле sql.py есть строка sql_count_records_clients='''SELECT COUNT(*) FROM "Список клиентов"''' В результате на эту строку в sql.py выдает ошибку Traceback (most recent call last): File "D:\ThirdTask\connect.py", line 5, in import json,sqlite3,sql File "D:\ThirdTask\sql.py", line 48 SyntaxError: Non-ASCII character '\xd1' in file D:\ThirdTask\sql.py on line 48, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details Что необходимо слелать, чтоб ошибка исчезла?


Ответ

Python 2.x по умолчанию читает исходники как ascii, и если видит октеты больше 127, то кричит вот этим самым SyntaxError Чтобы указать Python в какой кодировке записан файл, нужно в начало файла добавить специальный комментарий, подходящий под регэксп «coding[:=]\s*([-\w.]+)», как правило — одного из следующих видов: # coding=<кодировка> # -*- coding: <кодировка> -*- # vim: set fileencoding=<кодировка> : Где <кодировка> — собственно, кодировка, например, «utf-8» или «cp1251». Подробно это описано в PEP 263

Как уменьшить расход памяти? php, cURL, array

Собираю два массива А и Б по ~миллиону целых чисел из веб сервиса, чтобы затем сосчитать их пересечение. Сервис отдаёт за один запрос 1000 чисел, поэтому в цикле около 1000 раз для каждого приходится делать запрос через cURL. Коннекшн один, используется снова и снова: подставляются новые значения в CURLOPT_POSTFIELDS, и снова curl_exec()
Полученный json разбирается, и очередной массив с 1000 целых чисел merge'ится в А или Б.
Пока это всё работает в виде пруф-оф-концепт на shared хостинге руЦентра, где памяти выделено всего ничего. С партиями меньше миллиона скрипт справляется. Больше - вылетает с фатальной ошибкой об исчерпанной памяти. Иногда на этапе получения второго миллиона из сервиса, иногда уже после, на этапе сравнения.
Вместо ф-ий array_merge() и array_intersect() уже использую свои, менее ресурсоёмкие: мне не нужно сортировать и получать само пересечение, достаточно сосчитать кол-во общих.
Не может только массив целых с 2 млн. значений занимать десятки мегов памяти же! Как понять, раздувается ли это cURL при каждом новом обращении? Или, может, массивы хранят значения не как целые по 4 байта, а как строки например?
Сориентируйте, пожалуйста, с оптимизацией по памяти - куда копать?


Ответ

Имхо при ужатой памяти вам проще на БД переложить этот процесс. Работать будет дольше, но памяти есть меньше. Может быть, можно будет даже часть алгоритмов на базу переложить. Далее, в php с памятью такая анархия, что лучше даже не интересоваться. Достаточно сказать, что размер массива всегда степень двойки (в большую сторону), состоит он из указателей(4-8 байт) на int, а int - это структура(имя, тип, размер etc). И далее, если можно обрабатывать все в процессе - do it. Т.е. получили тысячу, обработали, выкинули, погнали дальше. Если нет - БД. Теоретически можно попробовать с временными файлами поколдовать, но вряд ли этот способ сильно выиграет у БД по удобству/скорости.

Как передать в sqlldr или sqlplus пароль в котором содержится знак доллара $

Например, вызываем sqlldr: sqlldr SYSTEM/PA$$WORD control=loader.ctl > output.txt И получаем в ответе: SQL*Loader: Release 10.2.0.1.0 - Production on Wed Nov 21 17:00:14 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL*Loader-128: unable to begin a session ORA-01017: invalid username/password; logon denied А если вызывать просто sqlldr control=loader.ctl и далее вводить username и password с клавиатуры то все удачно.


Ответ

Используйте двойные кавычки. В sqlplus/sqlldr: SQL> connect SYSTEM/"PA$$WORD"; В командной строке: sqlplus SYSTEM/"PA$$WORD"@DATABASE_NAME или sqlplus SYSTEM/\"PA$$WORD\"@DATABASE_NAME

Поиск клеток в радиусе от заданной

Вход - X,Y,R. Соответственно, координаты центра и радиус. Надо найти все, что внутри круга с такими параметрами. Есть большое подозрение на быдлокод: function getCellsByRadius($x,$y,$r){ for($i=floor($y-$r);$i<=ceil($y+$r);$i++){//высота квадрата со стороной 2r. Искомый круг точно не больше. for($j=floor($x-$r);$j<=ceil($x+$r);$j++){//ширина квадрата со стороной 2r $distance = sqrt(pow(($j - $x),2)+pow(($i - $y),2));//расстояние до каждой точки квадрата if($distance<$r){ $this->cells[$j][$i]='#999'; } } } $this->cells[$x][$y]='#f00'; } Помогите, пожалуйста, разбыдлокодить. =( P.S. можно проверять расстояние до точек, которые внутри квадрата +-r, но все ромба x+r,y x-r,y x,y+r x,y-r Но мне кажется, что лишняя проверка этого ромба может только усугубить ситуацию. Еще можно проверять только для четверти, а потом размножать на весь круг. Но опять же, поворот может дорого обойтись.


Ответ

function getCellsByRadius($x,$y,$r,$ccircle,$ccenter){ $r2 = $r * $r; for($i=floor($y-$r);$i<=ceil($y+$r);$i++){ $dxmax2 = $r2 - ($y - $i) * ($y - $i); if ($dxmax2 < 0) continue; $dxmax = sqrt($dxmax2); $lower = floor($x-$dxmax); $upper = ceil($x+$dxmax); for($j=$lower;$j<=$upper;$j++){ $this->cells[$j][$i]=$ccircle; } } $this->cells[$x][$y]=$ccenter; } (Не уверен, что код правильный, я не знаток php. Может, где-то надо объявить локальные переменные.)

Парсинг XML

Есть xml файл test.xml, в котором содержится: 1 20121126 03:57:10 test Rxxx WMIDxxx 0 3 95.28.75.19 null null -1 0 Вот как, средствами php, получить значение amount?


Ответ

$xml = new DomDocument; $xml -> ValidateOnParse = true; $xml -> load('test.xml'); $amount = $xml -> getElementsByTagName('amount')->item(0)->nodeValue;

Как сделать скролл внизу?

Подскажите скрипт или что-то еще подобное, чтобы при загрузке страницы скролл был всегда внизу, т.е. есть блок, он на авто полосе прокрутке, но нужно, чтобы он был всегда внизу. Нашел что-то такое вот, но тут скорее к textarea было обращение var txt = document.getElementById("ваша текстареа"); hg = txt.clientHeight + txt.scrollTop;
txt.scrollTop(hg);


Ответ

window.scrollTo(0, document.body.scrollHeight); http://jsfiddle.net/PdxrA/

Захват видео с веб-камеры пользователя

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


Ответ

Сложное решение, скажу я вам честно. Раньше реализовывал с помощью видео-серверов. На опыте это - Wowza Media Server, но дорогая, сцука. И обязательно флеш на стороне клиента. Но, конечно, можно сделать и приопретарное ПО, как это сделали мне. Еще как вариант: сейчас есть такая новинка, правда не во всех браузерах - возможность брать изображение с вебки javascript'ом. Суть заключается в том, что мы получаем картинку, каким-то образом кодируем её и отправляем туда, куда нам нужно.

Использование новых тегов html5

Вопросы по использованию новых тегов html5. Если в блоке

Куда девался WritePrivateProfileInt?..

Для загрузки параметров из ini файла я использую функцию GetPrivateProfileInt, логично, для сохранения параметров нужно пользоваться WritePrivateProfileInt. Но в VS2012 его нет! Есть аналоги?


Ответ

Есть аналоги? Не знаю насчет VS2012, GetPrivateProfileString - это все же функция WinAPI, а не Visual Studio но аналог можно сделать так: char Buffer[100]; sprintf( Buffer, "%i", MyIntValue ); ::WritePrivateProfileStringA( ..., Buffer, ... ); или так: char Buffer[100]; ::WritePrivateProfileStringA( ..., _itoa( MyIntValue, Buffer, 10 ), ... ); т.е., такую запись Int можно считать впоследствие через GetPrivateProfileInt, ошибок не будет.

Физически удален хостинг

Доброго времени суток. Сегодня захожу на свой некий сайт и вижу следующее Данный домен зарегистрирован в интересах клиента. Зашел в билинг панель хостера и вижу что заказанного мною хостинга физически не существует. Пропали труды 3-х месячной работы над проектом. На почте хранится куча сообщений о заказе услуги, ее продлению и т.п. Кто сталкивался с подобным ранее? Какие мне принимать меры по произошедшему и т.д. Хочу услышать ваши советы и прочее. UPD Администраторы уже занимаются решением данной проблемы. В ближайшее время работа аккаунта будет восстановлена. Приносим извинения за доставленные неудобства. Жду)


Ответ

ну если есть доказательства на почте, смело пиши им и звони! Если пойдут на попятную, смело подавай в суд, распечатывай материалы с почты - тогда они запоют другую песню. //upd Сначала позвони в саппорт, если в саппорте тебя мягко говоря пошлют, проси старшего по саппорту, если и он такой же тугой, тогда если хостер в твоем городе смело едь к ним! Приедишь к ним, в руках у тебя уже должна быть бумага в 2х экземплярах о том что случилось и что ты хочешь в этом разобраться! один они берут себе, на втором ставят приходный номер и печать, и ФИО того кто принял заявление. в течении времени они обязаны ответить тебе. Можешь распечатать в свое доказательство письма с почты, причем в заголовках писем есть от кого отправлено вплоть до IP. Думаю они быстро решат проблему, иначе 1 отзыв в нете может ой как пагубно отразиться на всем хостере! @Palmervan если есть доказательства на почте, смело разговаривай с ними на тон выше, чем обычно. Не навязывай им то что ты прав, а говори это! Если они не тупые пойдут на встречу и все сделают, если тупые -суд и они станут еще тупее. //upd физически удалить все равно его проблематично в плане бекапов. т.е. тут дело в чем, если пропали данные только у тебя - то дело пахнет керосином, если у 100 клиентов такое же то тут беда вселенского масштаба - но тоже подпадает под нарушение со стороны хостера. А ежели только твой аккаунт - тогда вопрос встанет иначе что они руками искоренили акк + всю инфу и дампы - а это еще +1 в твою карму и выигрыш дела на суде.

Онлайн-перевод API

Здравствуйте, подскажите, как с помощью google api или другого сервиса получить список переведенных слов и желательно и их артикль (т.к. в немецком это важно). На сколько я понял, API для извлечения рода существительного нет и надо тупо загружать страницу для перевода, а потом "что-то" писать, что б вытягивало с необходимых частей страницы нужные мне данные. Или это ломовой метод и так не делается? (я пока не программист, сорри, если где-то пишу чушь). Буду рад увидеть любые ответы. Зараннее спасибо.


Ответ

Попробуйте API Яндекс.Перевода: + пример запроса из программы, ответ в виде XML. Если Google, то API есть, он платный: Google Translate API Если Вам для сайта, а артиклем и озвучкой слов, крутая штука: DictionaryBox - пример находится внизу страницы, доступно много языков.

Поле класса - указатель на метод

Здравствуйте!
В одном из ответов увидел, что поле класса определяется таким образом:
void(My::*z)( int );
Поясните, пожалуйста такую запись. В каких случаях она используется?


Ответ

В каких случаях она используется? Такое поле используется в случаях, когда есть какая-то внешняя зависимость на метод класса. В моем примере эта зависимость от внутреннего состояния объекта. Без "указателя на метод" все равно пришлось бы вводить дополнительную переменную State. Но в таком случае, логика метода была бы не так очевидна. Вот тот же пример без z class My{ int State; public: My( void ) : State( 0 ){} void state( int x ){ switch( State ){ case 0: if( x == 1 ){ State = 1; } break; case 1: if( x == 2 ){ State = 2; }else{ State = 1; } break; case 2: if( x == 3 ){ State = 0; } break; } } } Очевидно, в таком варианте запутаться в номерах состояний гораздо проще, чем в исходном. Для лучшей ориентации по коду в таких случаях вводят enum class My{ enum{ state_1 = 0, state_2, state_3 }; int State; public: My( void ) : State( state_1 ){} void state( int x ){ switch( State ){ case state_1: if( x == 1 ){ State = state_2; } break; case state_2: if( x == 2 ){ State = state_3; }else{ State = state_1; } break; case 2: if( x == 3 ){ State = state_1; } break; } } } Но на мой взгляд, даже в таком случае исходный вариант выгоднее для понимания.

Написать драйвер PCI устройства в C# 5, используя WDK 7

Вполняю задание по написанию PCI device драйвера. Язык реализации - C# 5. Возник вопрос -есть ли какая-то документация для новичка по этой теме и как подключить WDK в C# ?


Ответ

На сколько я помню, то никак. Драйвера работают в режиме ядра. C# не умеет компилировать "ядерные" программы. Драйвера пользовательского режима ограчены работой только с USB ( возможно, за 4 года что-то поменялось)

Чтение и вывод на экран содержимое файла

import java.io.*; import java.util.*;
public class prints{ public static vois main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); FileReader fin = new Filereader("/root/2/Files.txt")); String name; int c; System.out.println("Print File Files.txt? y/n"); name = br.readLine(); if(name.equals("y")) while ((c = fin.read()) != -1) System.out.println((char) c); } } Есть запрос, вывести ли содержимое файла на экран, если "y" то вывод.


Ответ

Если вам требуется вывести текст файла в консоль, то лучше выводить его построчно через BufferedReader. import java.io.*;
public class FileRead{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); File f = new File("/root/2/Files.txt"); BufferedReader fin = new BufferedReader(new FileReader(f)); String name; String line; System.out.println("Print File "+f.getName()+"? y/n"); name = br.readLine(); if(name.equals("y")) while ((line = fin.readLine()) != null) System.out.println(line); } }

Как на Си в целой переменной (регистр) изменить какой либо бит?

Нужно на Си изменить в целой переменной изменить бит, так чтобы не затронуть остальные?


Ответ

Есть несколько вариантов. Но по моему так будет лучше всего: // Присваиваем BIT2 - (0?1 << 2), вместо 2 номер любого бита с которым хотите работать! #define BIT2 (0?1 << 2)
static int per; //Ваша переменная
void set_bit2(void) //Функция которая будет устанавливать Ваш бит { per |= BIT2; //Установка соответствующего бита }
void clear_bit2(void) //Функция которая будет затирать Ваш бит { per &= ~BIT2; //Стираем соответствующий бит } Как то так, но если хотите можете вспомнить битовые поля ))

Как на Java параллельно сложить два массива?

Например, есть два огромных (длина 2-3 млн.) массива float[] или double[] без разницы. Нужно их очень быстро сложить. Как это сделать? Есть ли какие-нибудь библиотеки для этого?


Ответ

Я про 8 Java и LambdaJ написал скорее для общего ознакомления и для ответа на коммент про аналоги LINQ. Если отвечать в рамках вопроса, то ни LINQ, ни Java 8 и ни LambdaJ не является быстрым решением вопрооса сложения (с точки зрения производительности). Сложение слишком простая операция и накладные расходы на вского рода вкусности, вроде функционального стиля, будут слишком велики. Согласно докам по LambdaJ она в два раза медленее в среднем чем просто циклы. (В некоторых местах доходит до 4х раз). Новая Java все еще не в релизе, и пользоваться ей в продакшене не стоит. Остается только ручная многопоточность (мне кажется что 2-3 миллиона это не такие уж и огромные данные для операции сложения). На своем дряхленьком нетбуке я смог ускоритсья на двух тредах. Выложил код на гитхаб, надеюсь ктонить попробует и выложит информацию с нормального железа. Насчет использования с++ и SSE, следующий код: for (int i = 0; i < a.length; i++) c[i] = a[i] + b[i]; Компилится в SSE инструкции JIT'ом. Насколько будет выйгрыш, если вручную написать на SSE - не знаю. Возможно не стоит заморачиваться с нативным кодом.

Как “выдернуть” значение из ячейки DataGridView?

Добрый день!Создал Форму1,добавил DataGridView и кинул событие для Формы1: private void Form1_Load(object sender, EventArgs e) { ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_VideoController"); foreach (ManagementObject queryObj in searcher.Get()) { dataGridView1.Rows.Add(queryObj["Caption"].ToString(), queryObj["PNPDeviceID"].ToString()); } } Далее для button'a в третьей колонки и кинул событие: private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { string url = "http://сайт.ru" + //тут значение из второй колонки// ; Process.Start(url); Close(); } В итоге вышла таблица,где выходит Имя и Значение ("Caption" и "PNPDeviceID"),а в третьей колонке по нажатию на button идет переход на сайт. Вопрос...как выдернуть значение "PNPDeviceID" из второй колонки и подставить в код где написано "//тут значение из второй колонки//"...т.е. чтобы по нажатию на button был переход на сайт с учетом значения во второй колонке "PNPDeviceID"? Надеюсь понятно поставил вопрос. Заранее спасибо.


Ответ

dataGridView1.Rows[e.RowIndex].Cells[1].Value

Макет в несколько столбцов с содержимым разной высоты

Здравствуйте!
Такая проблема:
Из базы данных приходит список новостей. Каждая новость — это картинка, заголовок и поясняющий текст. Все новости помещаются в несколько колонок (от 1 до 3 в зависимости от ширины окна). Все новости одинаковой ширины но разной длинны.
Нужно сверстать примерно такой макет:
При этом нужно сохранить порядок новостей.
И вот не могу придумать, как такое сделать... Очень хочется без js. Используется django, шаблонизатор родной.
UPD: Если все-таки JS — к сайту прикручен JQuery.


Ответ

А как насчет варианта с таблицами? Внешняя таблица имеет 3 столбца, а в эти столбцы добавляйте содержимое как хочется?

Подключение скриптов в ASP.NET MVC

Здравствуйте. У меня такой вопрос. В ASP.NET MVC 4 скрипты можно подключать через файл BundlesConfig.cs и потом на view рендерить их на странице такой инструкцией:
@Scripts.Render("~/bundles/mybundle")
Напрашивается вопрос - а чем это лучше традиционного

Во всяком случае при обычном способе нужно изменять только один файл, а не два как в первом способе
Заранее спасибо


Ответ

Бандлы подразумевают разделение подгружаемых скриптов на логические части. Допустим, отдельный бандл для стилей, отдельный бандл для JavaScript'овых библиотек, отдельный бандл для твоих скриптов. Править нужно только один файл, а не два. При компиляции страницы MVC сам вставит все необходимые теги.

Начать каждое предложение с заглавной буквы средствами css

Хочу чтобы каждое предложение начиналось с заглавной буквы. Какими средствами css пользоваться? text-transform поднимает либо все, либо каждое слово


Ответ

На чистом CSS такое сделать нельзя. Либо заворачивайте каждое предложение в отдельный div и используйте псевдокласс :first-letter, либо прикручивайте JavaScript.

Проверка отправки формы

Привет.Какая лучше проверка что форма отправлена? Припустим у нас есть что я только не встречал: 1.Cамый популярный вариант if (isset($_POST['submit']) 2.Тоже вариант if (isset($_POST['submit']) && !empty($_POST['submit'])) 3.Но мне больше всего пригляделся вариант: if ($_POST['photoList']=='submit'); Это ведь вариант включает по -умолчанию первые 2 проверки.Почему его так массово не используют? C post вроде более менее понятно,а как же быть с GET -отправкой формы? Ведь любой может прописать в адресной строке нужный параметр


Ответ

последний вариант не используют, так как в случае, если сабмита не было, будет предупреждение о несуществующем ключе массива.
ИМХО, из простых самый лучший вариант:
function form_submitted($form_name=false){ if(!isset($_POST['submitted'])){ // был ли вообще сабмит return false; //неа, завершаем } if($form_name && $_POST['submitted']!=$form_name){ //если проверяется конкретная форма, была ли отправлена именно она? return false;//нет, завершаем } return true;//все, ок. }
Более сложный вариант - генерить уникальный хэш при каждой генерации формы, чтобы нельзя было отправить несколько раз, например, при обновлении
Поставил ссыль на этот способ

Защита Connection String

Вопрос сложный, но хотелось бы услышать аргументированные ответы. Суть проблемы: Connection String - способ хранения, как обойтись без нее(если таково возможно) и подключаться к базе данных (платформа .NET). Такие варианты, как app.config(web.config) с шифрованием секции, реестр и сам исходный код - не предлагать. WCF и EntityFramework тоже хранят ее в открытом виде. Как с этой строкой справляются в корпоративном ПО?
P.S. База данных - на удаленном хосте mySql. Может стоит как-то получать эту строку через сайт по защищенному каналу?


Ответ

Я не уверен, что вам это нужно. Connection String, как правило, лежит в app.config/web.config. Конфиг не доступен по сети, локально права на его чтение можно ограничить.

PyCharm, удалённый проект и окружение.

Всем доброе время суток. Есть удалённый проект на Django. Я настраиваю PyCharm для работы с ним по SFTP. При этом изменения в файлах отражаются на сервере (копируются при изменении). Вопрос. Как мне читать окружение с сервера и запускать проект тоже на сервере? Например, на сервере есть модуль, который не установлен на локальной машине. Как мне сделать, чтобы для этого модуля было автодополнение кода и чтобы не ругался на него? Можно ли сделать, чтобы PyCharm думал, что он на сервере, а не на моей машине. Так как от SFTP мне на данный момент пользы как кот наплакал (только копирование кода автоматическое). Спасибо.


Ответ

Для этого существуют Remote Interpreters: http://blog.jetbrains.com/pycharm/2013/03/how-pycharm-helps-you-with-remote-development/ http://www.jetbrains.com/pycharm/quickstart/configuring_interpreter.html#remote_ssh

Вопрос про UITableView и UITableViewCell в iOS

Доброе время суток коллеги! Столкнулся с такой задачей. Необходимо выводить информацию в UITableView в два кастомных UITableViewCell. верхний как бы заголовок, нижний текст с произвольной высотой. Если кликать на заголовок необходимо попадать на профиль пользователя, если кликать на текст попадать на полный текст статьи. Пример реализации которая мне нужна хорошо выполнен в приложении ВКонтакте для iphone, в разделе группы. У меня не получается вывести данные в два UITableViewCell по очереди. https://www.dropbox.com/s/g1g6btk4zudrhr1/screen.pdf В приложенном файле я нарисовал прототип того как должен выглядеть табличный вид на мобильном телефоне. Если кто сталкивался или знает как это можно реализовать прощу помочь.


Ответ

После обсуждения этого вопроса с его автором в скайпе мы совместно выяснили, что оба вида ячеек на самом деле относятся к одной сущности (пользователю и контенту, связанному с ним) и решили, что нужно, чтобы был создан только один тип ячейки, в которую контент нынешних двух типов ячейки войдет в виде двух subviews - один subview для заголовка ячейки (информация о пользователе), другой - для контента (сообщение пользователя). Главная же проблема скрывалась в том, что из-за наличия двух видов ячеек, автор, полагаясь на строку вида EXHeaderTableCell *headerCell = [tableView dequeueReusableCellWithIdentifier:HeaderCellIdentifier forIndexPath:indexPath]; получал неправильное обращение к индексу в массиве Reusable cells, так как indexPath в большинстве случаев указывал на ячейку противоположного типа.

ASP.NET MVC или Python Django

Добрый вечер. Я собираюсь создать веб приложение с повышенной нагрузкой. И сейчас у меня стоит выбор инструмента, но определиться я не как не могу. Обе технологии я знаю на должном уровне, и обе отлично подходят под мою задачу. Скрипт приложения будет стоять на разных сайтах, получая код из моего скрипта из бд. В качестве базы данных я буду использовать Postgresql(даже в случае ASP.NET), так как Sql server по началу в финансах не потяну (но хотелось бы и по этому поводу что-нибудь услышать). В качестве серверной ОС скорее всего будет использоваться Windows Server 2008 R2(даже в случае с Python Django), возможно и линукс подобные, пока не решил точно. Подскажите пожалуйста плюсы и минусы. Спасибо.


Ответ

Есть несколько "сравнений", типа этого: http://www.pythondiary.com/blog/Apr.11,2012/comparing-django-aspnet-mvc.html, но конкретики в них мало, да и сравнивать совершенно разные платформы сложно. Точно можно сказать, что windows выйдет дороже. Дороже лицензия, дороже саппорт (Вы же не собираетесь нагруженный проект поддерживать сами вручную?). Абсолютно точно деплой python на винде будет неудобным и глючным (а деплоя asp на линуксе вообще не будет). В остальном - берите то, что лучше знаете, что больше нравится, и для чего лучше представляете себе могущие возникнуть сложности. Хуже нет на большом проекте, чем упереться в неочевидный косяк технологии, которая выбрана маркетологами из-за "низкого ТСО".

Вывод double числа

Рассчитываю pi 3.141592653589794 - это я вижу в отладчике 3.14159265358979 - это, когда вывожу Как мне вывести число полностью?


Ответ

Советую ознакомиться с вариантами форматирования вещественных чисел. Для вашего случая подходит описатель формата "R", который гарантирует идентичное число при обратном преобразовании (double.Parse()) Console.WriteLine(pi.ToString("R"));

Android: Как на кнопке одновременно задействовать два сушателя

Возникла следующая проблема:
Имеется кнопка у которой необходимо обрабатывать два слушателя. Первый это onTouchListener, второй onClickListener. Код слушателя onTouchListener() ниже:
OnTouchListener dragt = new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { FrameLayout.LayoutParams par = (LayoutParams) v.getLayoutParams(); switch(v.getId()) { case R.id.button1:
{ switch(event.getAction()) { case MotionEvent.ACTION_MOVE: { par.topMargin = (int)event.getRawY() - (v.getHeight()); par.leftMargin = (int)event.getRawX() - (v.getWidth()/2); par.bottomMargin = (int)event.getRawX() - (v.getWidth()/2); par.rightMargin = (int)event.getRawX() - (v.getWidth()/2); v.setLayoutParams(par); break; } case MotionEvent.ACTION_UP: { par.height = 120; par.width = 120; par.topMargin = (int)event.getRawY() - (v.getHeight()); par.leftMargin = (int)event.getRawX() - (v.getWidth()/2); par.bottomMargin = (int)event.getRawX() - (v.getWidth()/2); par.rightMargin = (int)event.getRawX() - (v.getWidth()/2); v.setLayoutParams(par); break; } case MotionEvent.ACTION_DOWN: { par.height = 150; par.width = 150; v.setLayoutParams(par); break; } } break; } } return true; } };
Мне же необходимо чтобы при обычном клике срабатывал onClick(). Назначал слушателя onClickListener - не работает(то есть онтач срабатывает, а онклик нет), назначал кнопке свойство android:onClick="knopka"
Далее вызывал в активити:
public void knopka(View v) { System.out.println("Работай же!!!"); }
Все равно не работает. Как еще сделать не представляю!


Ответ

Как обычно, читаем документацию Returns True if the listener has consumed the event, false otherwise. Таким образом, как нетрудно догадаться, вам нужно возвращать из OnTouchListener.onTouch false, а не true

Автодополнение в Intellij Idea

Подскажите как в Intellij Idea реализовать такую фичу:
печатаю четыре буквы "psvm" получаю вот такое предложение
public static void main(String[] args){}
на автодополнение?


Ответ

File->Settings->Live Templates: other там собственно psvm а вообще всё тоже самое psvm+TAB ну или меняем кнопку в настройках выше p.s. собственно там полезно покопаться и сделать свои шаблоны, ну или отредактировать существующие

Service или asynctask

Здравствуйте. Нужен совет. У меня в приложении регулярно нужно получать данные с сервера. И я думаю как это сделать более рационально по ресурсам и по производительности. Сейчас используется вариант, я получаю асинктаском данные с сервера загоняю их в hashMap и с ними потом работаю. Второй способ: создать сервис который будет с сервера загонять данные в базу sqlite, а потом уже с этой базой работать. Какой способ более правильный по ресурсам, быстродействию?(если надо приведу исходники) Подробнее теперь. В базе на сервере будет где-то сотни записей, по 20 атрибутов каждая запись. и каждые секунд 10 нужно будет делать такой запрос на получение всех полей и всех атрибутов в виде json массива (почти все эти значения могут изменяться, поэтому приходится постоянно подгружать все). Потом этот массив я перевожу в удобный для меня HashMap и пользуюсь им как мне угодно. Я так подумал: сервис скорее всего толще чем асинктаск, да и обращение к базе будет медленнее чем напрямую к hashMap, поэтому наверно пока оставлю асинктаски. хотя я видел довольно похожее приложение как у меня и там было реализовано сервисом. Маркеры на карте появлялись постепенно, при этом карта была активна. При асинктаске, нужно ждать пока выполнится задание. Но я не думаю, что это плюс. Например, если зайти в то приложение, то карта пустая и глупый юзер может не дождаться и просто выключить, а к асинктаску можно присобачить прогрес диалог и юзер будет ждать пока выполнится задача.(можно конечно присобачить и к сервису прогресс дайлог но это уже извращение)


Ответ

Асинк таски уже использовать не рекомендуется. В крупных банковских приложениях от низ уже ушли. Технология Сервис + Контент провайдер много лучше. Прогресс бар - что мешает прикрутить его к сервису?? У вас должен быть ServiceHelper шлющий коллбэки, по ним и стоит обновлять прогресс бар. Вот официальная спецификация Google для реализации RestAPI при помощи сервисов По быстродействию и ресурсам, даже если вы что то и потеряете, то выиграете в надежности приложения. Потому что даже при критической ошибке сервиса, ваше приложение останется работать. По материалам: Реализация колбэков и прогресс бара, а также самой модели Service + ContentProvider + Activity - Организация архитектуры взаимодействия Activity и Service Еще один пример на эту тему - Написание простого приложения для работы с RESTful API под Android От себя совет, переводите ваши апы на Service + ContentProvider + Activity за этим будущее. На Google IO был доклад на эту тему: Developing Android REST client applications. Кстати там использовалась похожая структура. P.S. Как то проходил собеседование в один крупный банк как Android разработчик, так там как услышали про возможность AsyncTask, чуть не закидали яйцами за само предложение :) :)

Получение идентификатора в iOS 7 (UDID, OpenUDID, UUID, и т.п)

В приложении требуется получение идентификатора, но так как UDID запретили использовать еще в iOS 6, я вынужден спрашивать вас :C. Что может заменить UDID? Пробовал NSUUID NSString *uuid = [[NSUUID UUID] UUIDString]; Меняется после переустановки приложения. Пробовал "IDFV" Identifier for Vendor NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; Но он тоже меняется (и не понятно почему, он бывает снова возвращает старый идентификатор). Так же хотел попробовать Advertiser Identifier, но ASIdentifierManager и advertisingIdentifier не распознается xCode. Программа уже готова для обновления в xCode и в iTunesConnect, уже перед заливкой в iTunes заметил что идентификатор менялся. Пожалуйста подскажите уже готовым решением, до 18:00 планирую залить в iTunes. Заранее большое спасибо).


Ответ

Дак это UIID на то и UIID - он должен быть разным каждую долю сикунды во всем мире один такой. Если вы хотите не изменяемый UIID, то раньше, да использовали идентификатор устройства. В связи с чем рекламщики злоупотребляли сбором данной информации. И теперь эта функция контралируется пользователем. На сегодняший день мы вышли из данной ситуации зпросом MAC адреса GSM/Wi-Fi подулей, после хеша md5-подобной функции мы получили UID. Вот пример реализации: @implementation TCMacAddress
+ (NSString *)getMacAddress { int mgmtInfoBase[6]; char *msgBuffer = NULL; size_t length; unsigned char macAddress[6]; struct if_msghdr *interfaceMsgStruct; struct sockaddr_dl *socketStruct; NSString *errorFlag = NULL;
// Setup the management Information Base (mib) mgmtInfoBase[0] = CTL_NET; // Request network subsystem mgmtInfoBase[1] = AF_ROUTE; // Routing table info mgmtInfoBase[2] = 0; mgmtInfoBase[3] = AF_LINK; // Request link layer information mgmtInfoBase[4] = NET_RT_IFLIST; // Request all configured interfaces
// With all configured interfaces requested, get handle index if ((mgmtInfoBase[5] = if_nametoindex("en0")) == 0) errorFlag = @"if_nametoindex failure"; else { // Get the size of the data available (store in len) if (sysctl(mgmtInfoBase, 6, NULL, &length, NULL, 0) < 0) errorFlag = @"sysctl mgmtInfoBase failure"; else { // Alloc memory based on above call if ((msgBuffer = malloc(length)) == NULL) errorFlag = @"buffer allocation failure"; else { // Get system information, store in buffer if (sysctl(mgmtInfoBase, 6, msgBuffer, &length, NULL, 0) < 0) errorFlag = @"sysctl msgBuffer failure"; } } } // Befor going any further... if (errorFlag != NULL) { NSLog(@"Error: %@", errorFlag); return errorFlag; } // Map msgbuffer to interface message structure interfaceMsgStruct = (struct if_msghdr *) msgBuffer; // Map to link-level socket structure socketStruct = (struct sockaddr_dl *) (interfaceMsgStruct + 1); // Copy link layer address data in socket structure to an array memcpy(&macAddress, socketStruct->sdl_data + socketStruct->sdl_nlen, 6); // Read from char array into a string object, into traditional Mac address format NSString *macAddressString = [NSString stringWithFormat:@"%02X:%02X:%02X:%02X:%02X:%02X", macAddress[0], macAddress[1], macAddress[2], macAddress[3], macAddress[4], macAddress[5]]; //NSLog(@"Mac Address: %@", macAddressString); // Release the buffer memory free(msgBuffer); return macAddressString; }
@end

Возможность перевести GC в режим реального времени

Недавно увидел что на хабре промелькнула информация о том, что ..в C# есть возможность перевести GC в режим реального времени (возможность гарантировать выполнение кода последовательно без перерыва на сборку мусора). может поподробней кто нибудь пожалуйста объяснить как это сделать?


Ответ

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

Клиент -android, сервер -java app

Здравствуйте, помогите пожалуйста! Есть Клиент под Android и сервер на java на pc - когда запускаешь с эмулятора - все работает - сообщения передаются. Когда запускаешь приложение на android устройстве - при нажатии на кнопку отправить всё вылетает. Очень нужна ваша помощь.
Код Клиента:
package com.example.client; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.net.Socket; import java.net.UnknownHostException; import com.example.client.R; import android.app.Activity; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity {
private Socket client; private PrintWriter printwriter; private EditText textField; private Button button; private String messsage; String ip="192.168.0.80"; int port=80;
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); textField = (EditText) findViewById(R.id.textout); button = (Button) findViewById(R.id.send);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
messsage = textField.getText().toString(); Socket client =null; textField.setText(""); DataOutputStream dataOutputStream= null; DataInputStream dataInputStream = null;
try {
client = new Socket("192.168.0.80", 80); client.setSoTimeout(100); dataOutputStream = new DataOutputStream(client.getOutputStream()); dataInputStream = new DataInputStream(client.getInputStream()); dataOutputStream.writeUTF(messsage);
} catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { System.out.println("Got an IOException: " + e.getMessage()); } } }); } }


Ответ

Вы производите коннект с сервером в главном потоке, на реальном устройстве в новых версиях Android SDK это выкидывает исключение, а на эмуляторе работает.
Вам нужно создать поток Thread или Runnable и вынести всю логику коннекта и связи на этот поток.
Обновление
Вот этот код внесите в run():
client = new Socket("192.168.0.80", 80); client.setSoTimeout(100); dataOutputStream = new DataOutputStream(client.getOutputStream()); dataInputStream = new DataInputStream(client.getInputStream()); dataOutputStream.writeUTF(messsage);

Android. Проверка на регистрацию реального человека(девайса)

Есть клиент серверное приложение с регистрацией. Необходимо, чтобы регистрировался реальный человек(девайс), а не скрипт посылал пост запросы на регистрацию. Как можно в этом удостовериться? Вроде, есть у девайса аккаунты. И наверняка возможно проверить как то (например с помощью гугл апи), что девайс и аккаунт соответствуют. Но как это сделать? P.S. конкретнее надо сделать так, что бы злодей не смог зарегистрировать много(100+) аккаунтов.


Ответ

Используйте Oauth 2.0 для андроид. Суть: достаем с девайса аккаунт, генерим для него AccessToken для получения информации о email. И передаем на сервер этот AccessToken и email аккаунта. На сервера по AccessToken запрашиваем у гугла email, и если совпадает с тем, что прислал юзер - можно выдавать свой token, с которым и работать дальше. Авторизация Сама библиотека Блогозапись, которая может помочь При возникновении других вопросов - просто гуглите: информации достаточно.

Настоящий джангист [закрыт]

В связи с поиском работы в области Python/Django возник вопрос: что в Django должен знать каждый соискатель? Конечно, лучше всего фреймворк изучить досконально, но он имеет довольно большой объём и его полное изучение займёт значительное количество времени, а кушать хочется сейчас.


Ответ

Боюсь расстроить, но для хорошей востребованности на рынке труда одним фреймворком не обойдешься. Что касательно самого фреймворка - не такой уж он и большой как может показаться на первый взгляд, со временем поймешь. Досконально знать и не нужно - важно уметь ориентироваться в документации. Т.е. если сегодня возникла задача сделать какую-то "фишку", то ты должен знать есть ли средства для этого в приделах фреймворка? Если да, то в каком разделе смотреть документацию? Если нет, то идешь искать сторонние пакеты. И только потом, если ничего не найдешь, пишешь свой велосипед ). Вообще, когда рассматриваешь веб-инструменты как средство заработка, то я бы советовал целиться сразу на конкретную вакансию(в лучшем случае), конкретную компанию или отрасль(на худой конец). Приведу пример двух кардинально отличающихся направления деятельности веб-разработчика: 1. Поподаешь в крупную команду, которая пилит уже несколько лет социальную сеть, где менеджмент внутри конторы налажен добротно и тебе дают работку по твоему уровню, сидишь там API расширяешь и никуда больше не лезешь. 2. Маленькая команда которая параллельно штампует мелкие интернет-магазины по несколько штук в месяц. Там тебе нужно будет быть универсальным солдатом: модели, формы, на фронт лезть, платежные системы прикручивать и т.д. Чувствуется разница? Вот потому конкретного ответа на твой вопрос быть не может.

Регулярка на js “не искать внутри кавычек, но все выражение в кавычках - да”

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


Ответ

Вот что получилось
/(^|[\s
])-(([^\s"'][^"']*?)(?=\s)|(["'])([^\s"'][^"']*?)\4)/g
Это не сработает
"например -"для вот такой конструкции"" "для -этого слова"
Перед выражением должен бы пробел, перевод строки или начало текста, а кавычки должны стоять прямо перед и сразу после текста. Это необходимое условие,иначе выражение, оказавшееся между двумя выражениями в кавычках, тоже будет пропускаться. По этой же причине нельзя отследить второе исключение из списка выше:
@eicto, да, это пропустит, вы правы. Но отслеживать кавычки обрамлённые пробелами бессмысленно, потому как такая форма проверки отсеит и текст не заключённый в кавычки, а находящийся между двумя фразами в кавычках, потому остаётся предполагать, что кавычки стоят прямо перед текстом, или сразу после него. Так же пропустит "вот -это слово", так как ни одна кавычка не стоит рядом с ним. Если же сделать проверку на наличие кавычек более дотошной, учитывающей такой вариант, то она отсеит -это "слово".
Выражение проверяет как двойные, так и одинарные кавычки.
Для более тщательной проверки стоит использовать несколько последовательных обработок текста, как советует @VenZell.

Как склеить строки ?

Вопрос в заголовке. Только не все строки. Про tr -d '
' мне известно. Пример: abc ; fgh ; " qwe rty " ; " asd " ; end В конвейере нужно превратить в: abc;fgh;"qwe rty";"asd";end
Другими словами, сделать нормальный CSV из вывода, где поля в отдельных строках, разделитель полей ';' тоже в отдельной строке и поля, которые могут содержать
, обрамлены строками '"'. Последний
надо заменить на
Для программы (на Си?) я бы сформулировал задачу просто: убрать все
вне "...", а внутри "..." убрать первый сразу за '"'. (на Си писать не надо, если "однострочник" не получится, то на нем сам как-нибудь напишу). ... Пока замер на проблеме, что я никак не могу заставить работать что-нибудь типа s/
;
/;/ ни в sed, ни в perl (т.е. работать с выражением для 2-х строк) P.S. python 2.4 тоже подойдет.


Ответ

perl -0777 -lpe 'BEGIN{$\="
"}s#
;
#;#gsm;s#;"
#;"#gsm'

Сделать кроссдоменный запрос к стороннему серверу

Подскажите, пожалуйста, как сделать кроссдоменный запрос к стороннему серверу на jQuery ??? Тестировал на своем хостинге, и если делаю запрос с локального сервера на свой хостинг то ответ я получу только в том случае если на хостинге в файле .htaccess явно прописано Header add Access-Control-Allow-Origin "*", может я чего не так понимаю, но хотелось бы узнать как сделать запрос не прописывая такой строчки в .htaccess, и возможно ли это ?


Ответ

Нет, это не возможно стандартными средствами JavaScript. Все дело в политике безопасности браузера, он требует подтверждения на стороне сервера, что такой запрос разрешен. Если сервер не отошлет специальный заголовок в ответ на Ajax запрос, то сам браузер блокирует ответ от сервера, хотя вы его получаете. Тут остается только использовать обходные пути. Можете почитать подробнее: http://learn.javascript.ru/xhr-crossdomain

Правильное масштабирование фона

Не могу найти правильное решение моей задачи. нужно относительно размера масштабировать картинку фона(т.е. что бы хотя бы раз она была в полном размере). для картинок размер которых больше экрана можно использовать background-size: 100% auto; но если картинка меньше экрана, то она просто растягивается. а мне этого не нужно. как это можно сделать средствами css?


Ответ

Попробую объяснить на пальцах. (тут можно потрогать руками рабочий пример)
Если написать вот так:
.demo { background-image: url(cat.png); background-position: 50% 50%; background-repeat: no-repeat; }
Мы передадим такие пожелания браузеру:
Вставь на фон блока с классом "demo" картинку с котиком Размести ее, по возможности, в центре этого блока Не надо использовать свойство "замостить", если фоновая картинка меньше этого блока
Немного уточним пожелания:
.first { background-size: 100px 100px; }
Хочу, чтобы фоновое изображение было 100 на 100 пикселей; масштабировать не надо; пропорции сохранять не надо

Попробуем иначе:
.second { background-size: contain; }
Хочу, чтобы фоновое изображение заняло максимальную область блока, при которой сохранит свои пропорции и будет видно целиком

И последний вариант:
.third { background-size: cover; }
Хочу, чтобы фоновое изображение закрыло блок целиком, оно не обязательно должно быть видно целиком, главное, чтобы сохранились пропорции
Поскольку мы в самом начале указывали расположение фонового изображения в центре блока, в первую очередь будет видна центральная часть изображения. Это можно изменить с помощью свойства background-position
Что в итоге получится (первый, второй и третий примеры один под одним):

Как по другому выполнить запрос в Oracle?

Есть две таблицы - А и В. create table a ( KEY1 number );
create table b ( KEY2 number, KEY3 number ); Нужно проверить, что для каждой записи таблицы А нет записей в таблице B по условию A.KEY1 = B.KEY2. Если же записи есть, то для каждой такой записи таблицы В проверить что нет записей в таблице А по условию В.KEY3 = A.KEY1. Реализовал так: SELECT * FROM A WHERE NOT EXISTS (SELECT * FROM B WHERE A.KEY1 = B.KEY2 AND B.KEY3 NOT IN (SELECT KEY1 FROM A)) Есть другие варианты выполнить этот же запрос?


Ответ

select * from A where key1 not in(select key2 from B) union all ( select * from A where key1 in(select key2 from B) intersect select * from a where key1 not in(select key3 from b) )

Темизация таксономии Drupal 6

Как переопределить стандартный шаблон вывода таксономии в Drupal 6 (везде натыкаюсь только на howto для 7 версии).


Ответ

также добавлю , что шаблон node-taxonomy.tpl.php по умолчанию не определен - его надо определить в файле template.php вашей темы function ИМЯТЕМЫ_preprocess_node(&$vars) { if(arg(0) == 'taxonomy'){ $suggestions = array('node-taxonomy'); $vars['template_files'] = array_merge($vars['template_files'], $suggestions); } }

Извлечение случайного значения из массива в Visual Basic 2010

Начал изучать Visual Basic и столкнулся с проблемой. Нужно сделать символьный массив и получить случайное значение из этого массива в переменную. Я только начал изучать Visual Basic, но на php это бы выглядело как: $mass = array("lalka", "fsdfsd546", "heyt");//массив с названием $mass $per = array_rand($mass, 1);//Извлекаю из этого массива одно значение в переменную echo ($per);//Вывожу сообщение Прошу написать как этот код будет выглядеть в Visual Basic.


Ответ

Поймите: Visual Basic и VB.NET - практически одно и тоже (синтаксис очень схож), отличие в том, что VB.NET[Visual Basic .NET] работает на платформе .NET Framework. Вы просите код на "Visual Basic 2010". Ппрактически, это он и есть, этот код будет работать и в "Visual Basic 2008", "Visual Basic 2005", и даже в "VS Express 2013 for Desktop"(который содержит Visual Basic). Почитайте спецификацию и определение Visual Basic 6/VB.NET/.NET Framework. Повторюсь, лучше учите C# (тоже на платформе .NET Framework)! Сама функция: Public Function RandomWord() ' Случайное число Dim rnd As New Random() ' Ваш массив: Dim massive() As String = {"lalka", "fsdfsd546", "heyt"} ' Случайное число, ограниченное количеством строк массива Dim random As Integer = rnd.Next(massive.Length) ' Вернуть результат: Return massive(random) End Function Затем используйте функцию, функция возвращает string: Dim randomword As String = RandomWord() И делайте вывод при помощи MessageBox.Show(randomword), Console.WriteLine(randomword) или другими

В терминале не выводится строка перед длительной операцией

Работаю в Ubuntu 14.04 x86, Sublime Text 2 + терминал
Странность высветилась во время вывода строки перед длительной операцией. Я использовал выделение большого кол-ва памяти:
MyType* type; long int MyNumber = 3000000;
cout << "Initialization... "; MyType* type = new MyType[MyNumber]; cout << "Done! << endl;
По всей логике вывод терминала должен быть следующим:
Initialization...*пауза* Done!
Но по какой-то причине пауза проходит вначале, а две строки выводятся одновременно.
*пауза* Initialization... Done!
После добавления к выводу первой строки команды endl первая надпись срабатывает так, как нужно.
Initialization... *пауза* Done!
Что за особенность работы терминала такая?


Ответ

Это не особенность терминала, а свойство всех буферизированных потоков вывода. Пока не будет вызван метод flush(), или в поток не попадёт
- данные из буфера не будут переданы на устройство.

Остановить сервис через некоторое время после его старта

Как остановить сервис через некоторое время после его старта. Допустим, служба проработала минуту, теперь надо её убить.


Ответ

Попробуйте так: то, что вы напишите в "run" исполнится через количество миллисекунд, заданных числом в конце метода. final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { // Сделать что-то чрез 60с = 60 000мс //Тут останавливать сервис context.stopService(new Intent(context, Service.class)); } }, 60000); Соответственно поместите этот кусок кода в метод, коий запускается при старте сервиса.

Конструкторы и операторы копирования

Могу ли я записать конструктор копирования через оператор присваивания? Например вот так: A::A(const A * a) { *this = a; }
A &A::operator=(const A * a) { delete str; str = new char[strlen(a->str)+1]; strcpy(str, a->str); return *this;
} Еще хочется уточнить, правильно ли если я делаю A * a в примере выше, потому примеры с разных сайтов A & a. C этого всплывает вопрос, что должен возвращать оператор присваивание: A &A::operator=(const A * a) или A * A::operator=(const A * a) Вообщем правильный ли мой код выше? Объект класса создается так A * a = new A();


Ответ

Конструктор копирования можно написать через оператор присваивания, не вопрос. Только то, что вы пишете — это не конструктор копирования и не оператор присваивания. Для них аргументом является экземпляр класса, а не указатель на него. Код неправильный ещё и по другой причине: вы не учитываете случай копирования объекта в себя Сигнатура конструктора копирования обязана быть A(A& a) или A(const A& a) (есть ещё немного экзотических возможностей, вот документация), всё остальное, в частности, то, что у вас — не конструктор копирования. Сигнатура оператора копирующего присваивания (а начиная с C++11 возможен и перемещающий) обязана быть A& operator= (A a) или A& operator= (const A& a) (документация), всё остальное — не оператор копирующего присваивания. В частности, у вас просто конструктор из стороннего типа, и оператор присваивания значения стороннего типа. Указатель на A для A — сторонний тип.

Ковариантность возвращаемых типов

В книге Thinking in Java (Bruce Eckel) есть такой код: Собственно интересует место с комментарием //Covariant return. Откуда тут ковариантность вообще? //: interfaces/interfaceprocessor/Processor.java package interfaces.interfaceprocessor;
public interface Processor { String name(); Object process(Object input); } ///:~
//: interfaces/interfaceprocessor/Apply.java package interfaces.interfaceprocessor; import static net.mindview.util.Print.*;
public class Apply { public static void process(Processor p, Object s) { print("Using Processor " + p.name()); print(p.process(s)); } } ///:~
//: interfaces/interfaceprocessor/StringProcessor.java package interfaces.interfaceprocessor; import java.util.*;
public abstract class StringProcessor implements Processor{ public String name() { return getClass().getSimpleName(); } public abstract String process(Object input); public static String s = "If she weighs the same as a duck, she’s made of wood"; public static void main(String[] args) { Apply.process(new Upcase(), s); Apply.process(new Downcase(), s); Apply.process(new Splitter(), s); } }
class Upcase extends StringProcessor { public String process(Object input) { **// Covariant return** return ((String)input).toUpperCase(); } }
class Downcase extends StringProcessor { public String process(Object input) { return ((String)input).toLowerCase(); } }
class Splitter extends StringProcessor { public String process(Object input) { return Arrays.toString(((String)input).split(" ")); } }


Ответ

Идея очень простая: вы имплементируете метод Object process(Object input) интерфейса Processor методом String process(Object input) Где на самом деле находится метод — в абстрактном классе StringProcessor или в его реализации Upcase — в принципе не так важно, и является скорее теоретическим вопросом. Главное тут то, что тип возвращаемого значения является подтипом требуемого интерфейсом типа.

Задать определенное время в AlarmManager

Возникла проблема при вызове Notification в определенное время суток. Notification вызываю при помощи AlarmManager. Когда задаю текущее время (System.currentTimeMillis()), проблем не возникает, все отлично запускается и выводится, но как только пытаюсь задать определенное, то бишь, точное время, ничего не происходит. Что подскажете? Как правильно задать время?
Рабочий вариант:
private void restartNotify(Context context) { alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent notifyIntent = new Intent(context, NotificationMessage.class); contentIntent = PendingIntent.getBroadcast(this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT ); alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), contentIntent); }
Не рабочий:
private void restartNotify(Context context) { alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent notifyIntent = new Intent(context, NotificationMessage.class); contentIntent = PendingIntent.getBroadcast(this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT );
Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR, 15); calendar.set(Calendar.MINUTE, 20); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), contentIntent); }
Решил проблему. Вот реализация:
private void restartNotify(Context context) { alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent notifyIntent = new Intent(context, NotificationMessage.class); contentIntent = PendingIntent.getBroadcast(this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT );
Calendar calendar = Calendar.getInstance(); Calendar cal = Calendar.getInstance();
calendar.set(Calendar.YEAR, cal.get(Calendar.YEAR)); calendar.set(Calendar.MONTH, cal.get(Calendar.MONTH)); calendar.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH)); calendar.set(Calendar.HOUR_OF_DAY, 13); calendar.set(Calendar.MINUTE, 53); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), contentIntent); }
Прошу обратить внимание, кому интересно, что бы все заработало, нужно задать все пункты (год, месяц, день, часы, минуты, секунды, миллисекунды). Важный пункт calendar.set(Calendar.HOUR OF DAY, 13);. Если указать Calendar.HOUR вместо Calendar.HOUR OF DAY то время вместо 24-х часового формата, будет использовать 12-ти часовой, из-за чего время будет считаться указанным не верно (Если у вас на телефоне 24-х часовой формат)


Ответ

А можете проверить какое именно время вы получаете в calendar.getTimeInMillis()? И попробуйте вместо обычного использовать григорианский календарь Calendar calendar = new GregorianCalendar()

Как разбить большой .sql-файл на несколько маленьких?

Есть .sql-файл (68 GB, 1 таблица). Нужно как-то его расчленить на несколько файлов, чтобы запихать в БД. Ничто его не открывает. SQLDumpSplitter его не делит. Как быть?


Ответ

Вариант1: mysql -h localhost -u user -p mydatabase < cat mybigfile.sql ? Вариант2: заходим в консоль mysql (mysql -u user -p) USE yourdatabase; SOURCE /path/to/the/sql/dump/mybigfile.sql; Дополнение к варианту2 со StackOverflow: mysql -u root -p set global net_buffer_length=1000000; --Set network buffer length to a large byte number set global max_allowed_packet=1000000000; --Set maximum allowed packet size to a large byte number SET foreign_key_checks = 0; --Disable foreign key checking to avoid delays,errors and unwanted behaviour source file.sql --Import your sql dump file SET foreign_key_checks = 1; --Remember to enable foreign key checks when procedure is complete! ps; если бы написали с какими ошибками вылетает было бы намного проще предложить workaround :)

Центрирование изображения в блоке меньшего размера.

Имеется div заданной высоты, ширина у div в процентах. В div вставлено изображение. При разрешении экрана более 1024 изображение центрируется. При разрешении равном или менее 1024 оно обрезается с одного края, т.к. ширина блока становится меньше ширины изображения. Как можно в таком случае горизонтально центрировать изображение средствами js и обрезать его с обоих боков? Вариант с изменением размеров изображения не подходит, т.к. по высоте div фиксирован и изображение должно занимать его полностью. HTML:

CSS: .box { width: 21%; height: 70px; background: #222; float: left; text-align: center; margin: 20px 2%; overflow: hidden; }


Ответ

@x01x, на моё предложение в комментарии, вы не отреагировали. Значит, могу предложить такой вариант решения вашей задачи. Только учтите, что решение не очень кроссбраузерное .box { position: relative; display: inline-block; width: 21%; height: 70px; margin: 5px; text-align: center; border: 1px solid #999; overflow: hidden; } .box img{ position: absolute; -webkit-transform: translateX(-50%); -moz-transform: translateX(-50%); -ms-transform: translateX(-50%); transform: translateX(-50%); } UPD Вариант с JS var box = $('.box'), img = $('img', box), imgW = img.width(); $(window).resize(function(){ img.css({ marginLeft: (box.width() - imgW) / 2 }); }).resize();

Django сохранение изображения из формы

Подскажите как сохранить на сервер изображение, указанное в форме.
С формы информацию в бд сохраняю, считывая get или post запрос. Т.е. получается что я должен принять путь к изображению, но вот как его сохранить?

То есть чтобы загрузить изображение, можно при обработке страницы, куда приходят данные, делать так?
caption = request.POST['caption'] preDescription = request.POST['preDescription'] description = request.POST['description'] image = request.POST['image']
Потом уже использовать вот это?
image = models.ImageField(upload_to='news')

Сделал:
models.py
from django.db import models
class News(models.Model):
caption = models.CharField(max_length=30) preDescription = models.CharField(max_length=100) description = models.CharField(max_length=300) image = models.ImageField(upload_to='news')
forms.py
from django import forms from anime.models import *
class NewsForm(forms.Form):
class Meta: model = News
views.py
def addnews_status(request):
a = NewsForm(request.POST) a.save()
Пишет вот что - 'NewsForm' object has no attribute 'save'.
Ошибку я перевести могу, но я не понимаю почему его нет? Делал всё как положено. Я хотя бы на верном пути?


Ответ

С формы информацию в бд сохраняю, считывая get или post запрос. Неправильно делаете. Почитайте про ModelForms, там все работает абсолютно автоматически.

Распарсить json

Добрый вечер. Так как я не очень силен в php однако пишу сейчас vk-api приложение, хотелось бы узнать следующее: как в PHP можно распарсить json? Знаю что через json_decode, но как именно не знаю. Хотелось бы записать строчку id в переменную. Сам JSON: response: [{ id: 123456, first_name: 'First', last_name: 'Name' }]


Ответ

$responseJson = "[{ id: 123456, first_name: 'First', last_name: 'Name' }]"; // ваш пример строки $response = json_decode($responseJson, true); // преобразование строки в формате json в ассоциативный массив $id = $response[0]['id']; // ваш искомый id Документация: JSON json_encode() json_decode() работа с массивами

Одновременная работа и обновление ListView

Доброго времени суток, форумчане! Создаю мобильное приложение в Android Studio. столкнулся с такой проблемой: Принцип работы активности: Отправляется POST запрос на сервер Получаем обратно информацию в JSON формате Обновляем полностью ListView Нужно следующее: Если я прокручиваю список ListView и останавливаюсь на середине списка, то при автоматическом обновлении ListView, я так же должен остаться на середине списка. Реализовано: //создаем адаптер и отправляем ему ArrayList(groups, locations) а так же context(PZakazi.this) ExpListAdapter adapter = new ExpListAdapter(getApplicationContext(), groups, locations, PZakazi.this); adapter.notifyDataSetChanged();
//отключаем видимый Scroll listView.setScrollContainer(false);
//сохраняем положение ListView Parcelable state = listView.onSaveInstanceState();
//обновляем ListView listView.setAdapter(adapter);
//Восстанавливаем положение ListView listView.onRestoreInstanceState(state); Все работает замечательно! но есть НО! Когда происходит ошибка? Если запустить данную активность, и начать шевелить пальцем ListView туда<->сюда, быстро то выбивает следующую ошибку: Ошибка: FATAL EXCEPTION: main java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2131230815, class android.widget.ExpandableListView) with Adapter(class android.widget.ExpandableListConnector)] Я приблизительно(на 80%) понимаю из-за чего это происходит, но не понимаю как именно исправить это.. Альтернатива: Или возможно есть альтернативный способ обновить ListView, сохранив его позицию? Очень нужна ваша помощь!


Ответ

@Fabien Вы создаете адаптер, потом notifyDataSetChanged, а потом устанавливаете этот адаптер ListView. Декларативно оно все верно, но вот только notifyDataSetChanged должен быть в самом конце. Данная ошибка возникает почти всегда, если кол-во элементов адаптера изменилось (по отношению к ListView. А присвоить адаптер, это почти всегда поменять кол-во элементов), а notifyDataSetChanged не был отправлен до того момента, когда ListView решил обновиться.

Проверить, принадлежит ли какая-либо точка отрезка заданной (заданным) окружностям

Привет. Прошу помощи. В общем задача: на координатной плоскости задается отрезок с началом в точке А и с концом в точке В. Также задаются круги (можно и 1 круг) с центрами в точках M1,M2,M3,...M100 и с радиусами R1,R2,R3,...,R100. Нужно проверить, принадлежит ли какая-либо точка отрезка заданной (заданным) окружностям. В общем-то это задача из олимпиады, код компилируется на сервере. Мой код: http://ideone.com/J5MJEH double xA, yA, xB, yB; int count = 0; int n;
cin >> xA >> yA >> xB >> yB; // Координаты A и B отрезка: cin >> n; // Количество окружностей
double * * Arr = new double * [3]; // Задаем массив для кругов, в каждой строчке которого будут хранится x,y,r круга for (int i = 0; i < n; i++) Arr[i] = new double[3];
for (int i = 0; i < n; i++) { for (int j = 0; j < 3; j++) { cin >> Arr[i][j]; } } double r12 = sqrt((xB - xA) * (xB - xA) + (yB - yA) * (yB - yA)); // Длина отрезка от A до B for (int i = 0; i < n; i++) { double r1 = sqrt((Arr[i][0] - xA) * (Arr[i][0] - xA) + (Arr[i][1] - yA) * (Arr[i][1] - yA)); // Длина отрезка от т. M до A double r2 = sqrt((Arr[i][0] - xB) * (Arr[i][0] - xB) + (Arr[i][1] - yB) * (Arr[i][1] - yB)); // Длина отрезка от т. M до B
if (((r12 * r12 + r1 * r1) - r2 * r2) >= 0 && ((r12 * r12 + r2 * r2) - r1 * r1) >= 0) { // Если перпендикуляр опущенный на прямую, проведенную через A u B лежит на отрезке AB, то проверяем, равен или больше ли радиус окружности double d = (abs((yB - yA) * Arr[i][0] + (xB - xA) * Arr[i][1] + (xA * yB - yA * xB))) / sqrt((yB - yA) * (yB - yA) + (xB - xA) * (xB - xA)); if ((Arr[i][2] - d) >= 0) { count++; } } else { // Иначе, если перпендикуляр опущенный на прямую лежит вне отрезка, то проверяем, равен или больше ли радиус одному из отрезков от точки М до А или В if ((Arr[i][2] - r1) >= 0 || (Arr[i][2] - r2) >= 0) { count++; } } } cout << count; В комментариях кода написал, что,где, как нахожу. То, как определить, падает ли перпендикуляр на отрезок, я взял отсюда: http://algolist.manual.ru/maths/geom/misc/perp.php, а именно неравенства: B2 <= A2 + C2, C2 <= A2 + B2. В общем-то программа работает, но, вероятно, не всегда правильно. Уже достаточно много перепробовал тестовых примером, всё правильно определяет. Но, когда отправляю решение на сервер олимпиады, сервер говорит: "Wrong Answer". Я все грешу на типы. Сможете помочь?


Ответ

Вы не проверяете случай, когда часть отрезка лежит в одной окружности, а часть - в другой. Например, A(10, 10), B(10, 20), M1(10, 10), R1(5), M2(10, 20), R2(5). тут половина отрезка лежит в первой окружности, а половина - во второй. http://ideone.com/TdMCuz Я бы предложил следующий алгоритм. Для каждой окружности проверяем, лежит ли отрезок в ней полностью (т. е. лежат ли оба конца отрезка внутри окружности). Если да, то ответ - "да", выходим. Если оба конца отрезка вне окружности, переходим к следующей окружности. Если один конец внутри, а другой - снаружи, то обезаем отрезок, оставляя только ту его часть, что снаружи, и продолжаем проверки. Если после проверки всех окружностей остался ненулевой участок отрезка, ответ - "нет".

Церковнославянская раскладка в Ubuntu

Необходимо набирать текст на церковнославянском языке. Как мне это сделать?


Ответ

Церковно-славянский в LinuxКак установить церковнославянские шрифтыМетоды реализации церковно-славянского письма в компьютерных системахДля разработчиковЦерковнославянский язык в Линуксе

Android, GridLayout для 2.3 верии системы

Добрый день, подскажите, пожалуйста, вот у меня в интерфейсе используется GridLayout, который поддерживается с API 14, а есть ли способы как-то сделать чтобы GridLayout работал и на 10-11 API? Мне говорили, что что-то нужно до установить, но я не понимаю, что и как. Заранее спасибо за помощь!


Ответ

Вам нужно подключить к проекту support library v7. После этого используйте в коде и XML-layout'ах android.support.v7.widget.GridLayout вместо android.widget.GridLayout

Как определить, нажата ли кнопка

На некоторых наушниках есть одна кнопка, обычно она принимает/завершает звонок и вызывает google поиск. Как можно программно определить, нажата ли кнопка? P.S. Андроид разработка.


Ответ

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

Начать воспроизведение первого byte[], как только он сформировался

Допустим, байты приходят из какого-то источника (аудио), складываются в одинаковые по размеру byte[], и так в цикле, причем неизвестно, сколько всего байтов придет. Как начать воспроизведение первого byte[], как только он сформировался? По окончании массива подавать ему следующий и так, чтобы не было разрыва в звуке. new MediaPlayer() не принимает byte[]


Ответ

Интересный вопрос.
На ум приходят 3 варианта:
Организовать ContentProvider с кастомным Uri и подать плееру на вход Uri, но что-то подсказывает мне, что в этом случае будет очень больно и долго :) Покопаться в Android NDK, где-то краем уха слышал, что там можно организовать подачу потока в плеер (не уверен). Создать MemoryFile, над которым организовать ParcelFileDescriptor, который и подать на вход плееру. См. пост на стэке

Что нужно сделать с приложением перед добавлением в google play?

У меня уже практически готовая версия приложения (осталось доделать маленькие штрихи), даже зарегистрировался как разработчик, но я не знаю точно, что надо сделать с приложением. Читал как-то статью об этом, но потерял её. Там говорилось,что нужно что-то в эклипсе сделать, потом в ProGuard и т.п. Подскажите, пожалуйста,что нужно сделать по пунктам или дайте ссылку на подробную статью. Заранее благодарю!


Ответ

Сгенерировать сертификат. Если приложение paid, то озаботиться защитой через License Verification Library Подписать сгенерированным сертификатом. ProGuard необязательно. Выставить в Google Play Чеклист, что надо сделать, здесь, и немного устаревшая статья

Как отсортировать массив объектов по их свойствам?

var a = {prop: 3, name: 'a'}, b = {prop: 2, name: 'b'}, c = {prop: 1, name: 'c'};
var array = [ a, b, c ], result = null;
result = array.sort(function(a, b){ var c = a.prop, d = b.prop;
if( c < b ){ return -1; }else if( c > b ){ return 1; }
return 0; });
for(var i in result){ console.log(result[i].name); // a, b, c } Так не работает... Добавлено: А в js так нельзя сортировать?? А какая разница сорту, что двигать местами?


Ответ

У вас две ошибки: Метод sort сортирует массив на месте, т.е. изменяет массив, к которому он применен. Если вы хотите сохранить исходный массив, сделайте копию перед сортировкой: result = array.slice().sort() Вы используете b в сравнениях (c < b) и (c > b), хотя хотели d. Исправленная программа работает как надо.