Страницы

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

четверг, 21 февраля 2019 г.

Работа с Github и Bitbucket с одного компьютера

Имеется ноутбук с установленным git 2.9.3. Есть аккаунт на Github и Bitbucket, зарегистрированный на один и тот же e-mail.
Могу ли я заливать одни проекты на Github, а другие Bitbucket? И нужны ли дополнительные настройки при заливке на Bitbucket?


Ответ

"Заливка" (Отправление файлов и изменений из локального репозитория в удалённый) осуществляется по адресу, который указан в remote каждого локального репозитория.
Когда вы клонируете репозиторий с удалённого сервера (Github или Bitbucket) то в репозиторий устанавливается remote с именем origin в котором указан этот адрес. При git push origin файлы/изменения отправятся на удалённый репозиторий с указанным адресом.
При этом ничто не ограничивает вас в смене и добавлении других remote-ов. Т.е. вы можете склонировать репу с Github, поменять remote и пушить на Bitbucket. Или наоборот. А можете добавить ещё один remote для к-л репы и пушить и в Github и в Bitbucket.

Как открыть модальное окно Bootstrap без JQuery и bootstrap.js?

В моем проекте не используется JQuery и bootstrap.js, так уж сложилось. Стараемся как можно меньше использовать библиотеки.
Нужно реализовать модальное окно, но использовать вышеупомянутые JQuery и bootstrap.js ради одного окошка - крайне не желательно.
Есть ли решение этой проблемы?


Ответ

Например самое простое с применением псевдокласса :target
/* Стили для модального*/ #modal { display: none; } /* Изменяем вид вывода при соответствии */ #modal:target { display: block; } /* Закрытие модального*/ .close { position: absolute; top: 1rem; right: 1rem; } /* Доп. стилизация модального*/ #modal { max-width: 300px; height: 100px; margin: 2rem auto; border: 1px solid #ccc; padding: 5rem 2rem; text-align: center; position: relative; } /* Стилизация кнопки, чтобы глаз радовала.*/ .btn { width: 200px; height: 34px; line-height: 34px; border: 1px solid #ccc; border-radius: 25px; color: #111; background: #eee; text-decoration: none; display: block; text-align: center; position: relative; } вызвать модальное


Псевдо класс :target является одной из замечательных особенностей CSS3. Он соответствует элементу, на который указывает идентификатор в URI документа. Идентификатор в URI содержит символ “#”, за которым следует имя идентификатора, соответствующее значению атрибута id элемента в документе.

Округление после четырёх значащих цифр Python

Имеется следующий результат вычислений:
1.103567 -0.015367 0.000616 -0.023323 1.138369 -0.018582 -0.003442 0.004548 1.195153
Устройство преобразует эти числа следующим образом:
[1.104, -0.01537, 0.000616, -0.02332, 1.138, -0.01858, -0.003442, 0.004548, 1.195]
Для дальнейшей работы необходимо сравнивать вычисления и числа внутри устройства, поэтому возникла потребность в округлении результатов вычислений так же, как это делается на устройстве. Round не даёт удовлетворительного результата.

где m это DataFrame.


Ответ

Товарищ в комментариях подсказал еще один хороший способ, который при больших массивах данных гораздо более предпочтителен: Итак, у нас имеется результат вычислений m и данные с устройства newmatrix. Их необходимо сравнить.
import numpy as np import pandas as pd
m 0 1 2 0 1.099394 -0.015754 0.006890 1 -0.025979 1.119590 -0.002269 2 -0.021262 0.005393 1.191073
type(m)
newmatrix [1.099, -0.01575, 0.00689, -0.02598, 1.12, -0.002269, -0.02126, 0.005393, 1.191]
type(newmatrix)
Приводим newmatrix к формату DataFrame
mat=np.array(newmatrix) mat=mat.reshape((3,3)) mat=pd.DataFrame(mat)
mat 0 1 2 0 1.09900 -0.015750 0.006890 1 -0.02598 1.120000 -0.002269 2 -0.02126 0.005393 1.191000
И затем одной функцией производим сравнение:
numpy.allclose(m, mat, 1e-3,0) True

Права пользователя вне роли

Вопрос насчет permissions пользователя экземпляра sql сервера:
Например есть у нас пользователь Vasiok, за ним закреплена роль sysadmin. Возможно ли ему закрепить permission вне зависимости от роли?? То-есть, я хочу чтобы он себе и далее был только sysadmin-ом, но кроме того у него еще был дополнительный permission.
Если обобщить: могут ли существовать permissions отдельно от roles?


Ответ

могут ли существовать permissions отдельно от roles?
Да, могут. И существуют.
В SqlServer есть иерархия разрешений. Разрешения сами по себе не зависят от ролей. Напротив - роль содержит некоторый набор разрешений (и/или запрещений). Есть встроенные роли, - такие как, например, sysadmin, - набор разрешений для них фиксирован и не может изменяться (т.н. fixed roles). Начиная с SqlServer 2012 можно создавать собственные роли уровня сервера, собирая в них необходимые наборы разрешений.
Логин может быть в какой-то одной роли, может быть в нескольких ролях одновременно, может не быть ни в одной роли(*), и также может иметь разрешения, установленные напрямую, а не через членство в ролях.
Допустим есть логин
USE [master] GO CREATE LOGIN [LoginName] WITH PASSWORD = N'L2RG9mZi6EZm' GO
Можно сделать его членом роли сервера sysadmin
ALTER SERVER ROLE [sysadmin] ADD MEMBER [LoginName] GO
но можно дать широкие права и явно
GRANT CONTROL SERVER TO [LoginName] GO
Членство в роли sysadmin и право CONTROL SERVER эквивалентны(**)

(*): строго говоря, любой логин всегда является членом специальной роли public, и отменить это нельзя. (**): на самом деле - почти (из-за некоторых legacy вещей).

Получение длительности видео, Android

Есть mp4 файл, как я могу получить длительность видеозаписи?


Ответ

Получить длительность видео можно как:
MediaPlayer mp = MediaPlayer.create(this, Uri.parse(uriOfFile)); int duration = mp.getDuration();
Источник

Подскажите, как лучше оформить класс

В общем, хочу сделать класс, который будет импортировать DataTable в Access или MS SQL.
Класс будет иметь 1 метод: Append, которому на вход будет подаваться DataTable, а метод в свою очередь будет загружать DataTable в нужный пункт назначения.
Разумеется, внутренняя логика Append у Access может сильно отличаться, например:
В Access нужно следить за тем, что бы файл не был выше 2гб, иначе бд поломается В MS SQL можно воспользоваться BulkCopy, а в Access потребуется какой-то самопал.
Соответственно и конструкторы могут сильно отличаться по параметрам, например:
Строки подключения между двумя типами будут отличаться В MS SQL можно использовать или не использовать транзакцию В Access можно восстанавливать или не восстанавливать БД после каждого Append.
Как лучше всего все это оформить?
UPD:
Есть у меня некоторые предположения, как это можно сделать, но не знаю на сколько это верно.
Сделать интерфейс:
public interface IApend { void Append(DataTable dt); }
Реализовать его в 2 ух классах, каждый из которых будет содержать в себе собственную логику импорта:
public class ImporterToSQL: IApend { //Какие-то поля public void Append(DataTable dt) { //Какая-то логика } } public class ImporterAccess : IApend { //Какие-то поля public void Append(DataTable dt) { //Какая-то логика } }
И создать такой класс:
public class Importer { IApend Concrete;
public Importer(IApend concrete) { Concrete = concrete; } static Importer ImporterToSQL(object v,object v2,object v3) { return new Importer(new ImporterToSQL(object v, object v2, object v3)); } static Importer ImporterToSQL(object v, object v2) { return new Importer(new ImporterToSQL(object v, object v2)); } static Importer ImporterToAccess(object v, object v2, object v3) { return new Importer(new ImporterAccess(object v, object v2, object v3))); } static Importer ImporterToAccess(object v, object v2) { return new Importer(new ImporterAccess(object v, object v2)); } public void Append(DataTable dt) { Concrete.Append(dt); } }
На сколько это верно и на сколько хорошо этот подход будет работать в плане добавления нового функционала(Например, мне приспичило добавить импорт из SQL в Access)? Это , вроде, зовется фабрикой классов?


Ответ

Вы на правильном пути. Общий интерфейс для конвертации -- это правильно. Только я бы назвал его чуть поконкретнее, хотя б IImporter какой-нибудь.
Что касается создания конкретных экземпляров и вашего класса Importer. Для создания действительно нужна фабрика. Однако она у вас получилась не в чистом виде. Смысла оборачивать экземпляр в ваш Importer нет -- у вас уже есть интерфейс. Просто создавайте нужные экземпляры и возвращайте их. А клиент уже будет вызывать напрямую методы:
public static class ImporterFactory { static IImporter CreateSQLImporter(object v, object v2, object v3) { return new ImporterToSQL(v, v2, v3); }
static IImporter CreateAccessImporter(object v, object v2, object v3) { return new ImporterAccess(v, v2, v3); }
// и так далее }
В качестве параметров для конструкторов у вас наверняка выступают специфичные для каждой реализации данные: например, строка подключения для SQL и путь к mdb файлу для Access. В идеале клиент вообще не должен знать что-то о деталях реализации, а фабрика должна содержать один метод на тип. Все детали о реализации прячутся в фабрике, которая подсовывает нужные параметры напрямую из конфигурации (например, из app.config). При этом клиент вообще ничего не будет знать о реализации:
public static class ImporterFactory { static IImporter CreateImporter(object v) { var generalConfig = GetGeneralConfig(); if (generalConfig.Type == "sql") { var config = GetSqlImporterConfig(); return new ImporterToSQL(config.ConnectionString, v); } else if (generalConfig.Type == "access") { var config = GetAccessImporterConfig(); return new ImporterToAccess(config.ConnectionString, v); } } }
Такой подход будет очень хорошо работать, если вам потребуется импорт в новое место. Вы просто напишете еще одну реализацию IImporter, внести изменения в ImporterFactory и все. Все клиентs, которые используют IImporter, менять не придется. В случае же отдельных методов вам придется менять вызывающий код, который управляет тем, какой метод вызвать.

Что касается импорта из SQL в Access, то такую задачу описанным выше способом не решить. Выше мы рассмотрели только задачу "как данные, представленные в универсальном виде (DataTable), записать в конкретное место". Задачу импорта из SQL в Access можно переформулировать как "как извлечь данные из одного места и записать их в другое место". Такую задачу полезно разбить на два шага и ввести промежуточный этап. Какой? Правильно, получение данных в универсальном виде. Таким образом, шага будет два:
Импорт из источника с преобразованием в универсальный вид Экспорт в другое место
Соответственно, два основных контракта будут выглядеть как-то так:
interface IImporter { DataTable Import(); }
interface IExporter { void Export(DataTable data); }
Реализация второго шага у вас уже есть, правда сейчас она называется импортом. При наличии двух шагов будет логичнее назвать их с т.з. того, как данные движутся относительно вашего приложения. Вы импортируете (загружаете) данные из одного источника и экспортируете (выгружаете) их в другое место.
Реализация первого шага будет аналогична -- различные реализации интерфейсов, фабрика.
Для осуществления процесса конвертации вам понадобится некоторая общая сущность, которая будет соединять шаги. Она может принимать в качестве зависимостей как фабрики, так и экземпляры импортера/экспортера:
public class DataConverter // придумайте имя поудачнее, пожалуйста :) { private readonly IImporter _importer; private readonly IExporter _exporter;
public DataConverter(IImporter importer, IExporter exporter) { _importer = importer; _exporter = exporter; }
public void Convert() { var data = _importer.Import(); _exporter.Export(data); } }

Сборка проекта С++/С# из командной строки

Требуется собрать проект с помощью bat-файла. Параметры сборки следующие:
MsVstudio\incredibuilder - тип сборки локальная\распределенная win32\x64 debug
elease build
ebuild
Можно ли как-то при запуске VS передать в неё такие параметры? Читал про команду devenv, она даёт возможность только указать Build или Rebuild.


Ответ

В общем локальная сборка делается с помощью MSBuild, как мне посоветовали выше.
Полный пример:
msbuild.exe %SolutionPath% /t:build /p:configuration=release /p:platform=x86
Запускается из Bat, только после перехода в каталог, в котором находится MSBuild.
Распределённая сборка, через IncrediBuild, делается через BuildConsole:
BuildConsole.exe %SolutionPath% /build /cfg="release|x86"
Является командой самой windows cmd, так что ничего придумывать не надо.