Страницы

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

четверг, 30 мая 2019 г.

Как получать html документы из другого приложения?

Во многих программах есть кнопка "Share", которая открывает список приложений, умеющих обрабатывать этот тип файлов, например:

Я хочу, чтобы мое приложение могло обрабатывать html файлы. Например пользователь нажимает кнопку "Share" в Google Chrome или в DropBox, а ссылка передается моему приложению. Где искать информацию?


Ответ

Сначала в Info.plist прописываете:
CFBundleDocumentTypes CFBundleTypeName HTML LSHandlerRank Alternate LSItemContentTypes public.html public.xhtml
В AppDelegate:
//Swift func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { //do something with html file here return true }
//Objective-C - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options { //do something with html file here return YES; }
И передавайте:


Чтобы получить url из Safari создайте App Extension:
File -> New -> Target -> Share Extension

Соглашаетесь создать схему, запускаете и видите:

Схема как это работает:
Подробнее в Документации
Далее необходимо настроить. Для начала в
- (BOOL)isContentValid { // Do validation of contentText and/or NSExtensionContext attachments here return YES; }
Проверяете что Вам необходимо и если подходит, return YES; если что-то не то return NO;
Включить и настроить App Groups:

И сохранять данные можно через NSUserDefaults:
NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.test.one"]; [shared setObject:object forKey:@"yourkey"]; [shared synchronize];
Получить:
NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.test.one"]; id value = [shared valueForKey:@"yourkey"]; NSLog(@"%@",value);

Round Robin DNS

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


Ответ

A записей может быть сколько угодно. Для балансировки нагрузки надо именно добавить дополнительные записи с другими IP адресами. Если интерфейс регистратора не позволяет добавлять несколько записей уточните в техподдержке, действительно ли это так. Если не позволяет - меняйте регистратора или выносите DNS-сервера в другое место (поддержка DNS не обязательно должна быть на мощностях самого регистратора).

как установить конкретную версию rspec для проэкта

Как можно строго указать версию rspec в гемфайле При том, если прописываю вручную
gem "rspec", '3.5.1'
то после комманды bundle install ругается на
Could not find gem 'rspec (= 3.5.1) in any of the gem sources listed in your Gemfile or available on this machine.
хоть и rpec -v показывает 3.5.1


Ответ

Немного непонятно, с гемами. В цитате из гемфайла используется какой-то rpec, хотя бандлер ругается на rspec. Рискну предположить, что вопрос именно про rspec Ни rubygems.org ни офф. репозиторий rspec'a не знают про версию 3.5.1. Если им верить, то последняя версия это 3.5.0. 3.5.1 есть только для rspec-core

Категории изменчивости функции (PostgreSQL)

Когда какую волатильность выставлять у функции (VOLATILE, STABLE, IMMUTABLE)?


Ответ

Документация оригинальная, пока актуальный перевод от российских контрибьютеров
Выставлять необходимо минимально необходимую. От этого зависит, что оптимизатор сможет полезного сделать. Например, выполнить функцию один раз заранее и потом пользоваться только результатом.
Изменчивая функция (VOLATILE) может делать всё, что угодно, в том числе, модифицировать базу данных. Она может возвращать различные результаты при нескольких вызовах с одинаковыми аргументами. Оптимизатор не делает никаких предположений о поведении таких функций. В запросе, использующем изменчивую функцию, она будет вычисляться заново для каждой строки, когда потребуется её результат. Стабильная функция (STABLE) не может модифицировать базу данных и гарантированно возвращает одинаковый результат, получая одинаковые аргументы, для всех строк в одном операторе. Эта характеристика позволяет оптимизатору заменить множество вызовов этой функции одним. В частности, выражение, содержащее такую функцию, можно безопасно использовать в условии поиска по индексу. (Так как при поиске по индексу целевое значение вычисляется только один раз, а не для каждой строки, использовать функцию с характеристикой VOLATILE в условии поиска по индексу нельзя.) Постоянная функция (IMMUTABLE) не может модифицировать базу данных и гарантированно всегда возвращает одинаковые результаты для одних и тех же аргументов. Эта характеристика позволяет оптимизатору предварительно вычислить функцию, когда она вызывается в запросе с постоянными аргументами. Например, запрос вида SELECT ... WHERE x = 2 + 2 можно упростить до SELECT ... WHERE x = 4, так как нижележащая функция оператора сложения помечена как IMMUTABLE. И ещё по таким функциям можно строить функциональные индексы.

Как поставить условие если папка не содержит файлов?

Добрый день, получаю список файлов из папки
File folder = new File("D://Photo_and_Video//");// доступ к папке с файлами System.out.println(folder.listFiles()); File[] listOfFiles = folder.listFiles();// получаем список файлов for (File f : listOfFiles) {
if(fileName.equals(f.getName())){ какой то код } }
и соответственно проверяю на совпадение имён, но тут возник вопрос а как задать условие, делать что то если папка не содержит файлов то есть folder.listFiles() ничего не возвращает ?


Ответ

if(listOfFiles.length > 0) { for(File f : listOfFiles) { ... } } else { System.out.println("Пустая папка"); }

Выборка значений нескольких полей из базы с занесением в одну переменную

Допустим, есть такой запрос:
SELECT `street`, `house`, `apartment` FROM `table`
Могу ли я как-то поместить все 3 значения в 1 переменную address?


Ответ

Попробуйте соединение строк:
Oracle:
select street || ' ' || house || ' ' || apartment as address from table MySQL:
select concat(street, ' ', house, ' ', apartment) as address from table
или
select concat_ws(' ', street, house, apartment) as address from table

Архивировать только «скрытые» файлы

tar -cvzf archive.tar.gz .*
Шаблон .* не работает
Как архивировать только файлы/каталоги, имена которых начинаются с точки?


Ответ

например так:
$ find -maxdepth 1 -regex './\..*' | tar -cvzf archive.tar.gz -T -
если не устраивает префикс ./ перед именами файлов/каталогов, то чуть длиннее:
$ find -maxdepth 1 -regex './\..*' -printf '%P
' | tar -cvzf archive.tar.gz -T -

можно и без -regex
$ find -maxdepth 1 -mindepth 1 -name .\* | tar -cvzf archive.tar.gz -T - $ find -maxdepth 1 -mindepth 1 -name .\* -printf '%P
' | tar -cvzf archive.tar.gz -T -

а можно и без find
$ tar -cvzf archive.tar.gz .??*
но под маску не подпадут файлы/каталоги с именем, состоящим из двух символов. типа .1. тогда так:
$ tar -cvzf archive.tar.gz .[^.]*