Как Использовать Две Разные Версии Файлов Googleplayservices В Двух Разных Продуктах?

По причинам, особенно для моего приложения, я хотел бы использовать две разные версии библиотеки Google Play Services в двух разных продуктах. Но gradle дает мне знакомое сообщение об ошибке:

Исправьте конфликт версии либо путем обновления версии плагина google-services (информация о последней версии доступна на странице https://bintray.com/android/android-tools/com.google.gms.google-services/) или обновить версию com.google.android.gms до 10.2.4.

Обычно я исправляю это, используя согласованные версии библиотек GPS. Но в этом случае я думал, что несогласованность будет в порядке, потому что я собираю приложение в два отдельных вкуса. Это не совсем работает:

app build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion '25.0.2'

    defaultConfig {
        applicationId "com.albertcbraun.googleplayservicesversionconflicttestcase"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
        flavor1 {
            applicationId 'com.albertcbraun.flavor1'
        }

        flavor2 {
            applicationId 'com.albertcbraun.flavor2'
        }
    }
}


dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'

    // these are the problematic lines. GPS versions differ: 
    flavor1Compile 'com.google.android.gms:play-services-identity:10.2.4'
    flavor2Compile 'com.google.android.gms:play-services-identity:9.6.1'
}

apply plugin: 'com.google.gms.google-services'

проект build.gradle

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.1'
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Gradle Версия: 3.3

Версия Android: 2.3.1

Подробнее (2 ответа)

android android-studio android-gradle google-play-services

Удаление Объекта В Пакете Boost В С++

У меня есть класс, который имеет элемент std::list<boost::reference_wrapper<polygonType> > m_children;

Когда объект создается из этого класса, я сохраняю все дочерние элементы этого объекта в качестве ссылки в этой переменной. То, что я хотел сделать, - это когда деструктор объекта вызывается, я хотел, чтобы деструктор детей вызывался.

  1. Это автоматическое поведение в этом случае? или мне нужно что-то написать для этого, дайте этому списку ссылки?
  2. Если я хочу, чтобы они не удалялись, что мне нужно делать? Если я хочу, чтобы они удалили, что мне нужно сделать?

Это в основном сводится к некоторым дизайнерским решениям, которые я принял, и как я их исправляю.

Подробнее (1 ответ)

c++ virtual-destructor boost-ref

Добавить Qgraphicsview В Форме Из Другого Класса

У меня есть класс MainWindow и другой класс. У другого класса есть метод createView, который создает новый QGraphicsView. Этот метод, который я вызываю из MainWindow, и также хочу, чтобы это представление отображалось в моей форме. Это выглядит как:

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)) {
       ...
       AnotherClass object(this);
       object.createView();
       ...
}
...
void AnotherClass::createView() {
       QGraphicsView *gv= new QGraphicsView(mainWindow); // mainWindow - pointer to MainWindow object
       gv->show();
}

Но это не работает так хорошо... на самом деле это вообще не работает. И да, я сохраняю указатель на объекте MainWindow в моем другом классе как mainWindow, который я беру из другого конструктора класса. Если использование

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)) {
       ...
       QGraphicsView *gv= new QGraphicsView(this); 
       gv->show();
       ...
}

Это будет хорошо работать, но это решение меня не удовлетворяет.

Подробнее (1 ответ)

c++ qt qmainwindow qgraphicsview

Лучший Способ Обработки Сообщений Sqs

У меня есть клиент, который постоянно заливает данные в режиме реального времени в очередь sqs и хочет обрабатывать и хранить сообщения. Моя первая мысль заключалась в том, чтобы использовать планировщик CloudWatch, который запрашивает Лямбду с приблизительным количеством сообщений, которые затем лямбда заставляют рабочих лямбда обрабатывать и выталкивать данные в Firehose. Проблема заключается в том, что в очередь будут помещаться сотни тысяч сообщений каждый день. Я мог бы также использовать EC2 для этого, но есть ли другой эффективный с точки зрения затрат способ обработки очереди в режиме реального времени.

Подробнее (1 ответ)

amazon-web-services amazon-ec2 amazon-sqs aws-lambda

Как Разместить Встроенное Видео С Youtube В Верхней Части Изображения (В Виде Рамки Вокруг Видео)

Я хочу поместить встроенное видео с YouTube в верхнюю часть изображения, чтобы он выглядел как кадр вокруг видео Youtube. Они идеально выровнены по горизонтали, но я не могу выровнять видео и изображение по вертикали. Как-то мне нужно добавить отступы к вершине видео Youtube, чтобы оно опустилось в рамку.

Я использую Wordpress, и измерения для рамки идеально подходят для видео. Мне просто нужно опустить видео в рамку.

Любые идеи о том, как снизить видео Youtube, чтобы он правильно выравнивался внутри рамки?

Спасибо!

Подробнее (1 ответ)

html youtube video wordpress

Производительность С++: Std :: Array Vs Std :: Vector

Добрый вечер.

Я знаю, что массивы в стиле C или std :: array не быстрее векторов. Я все время использую векторы (и использую их хорошо). Тем не менее, у меня есть ситуация, в которой использование std :: array работает лучше, чем с std :: vector, и я понятия не имею, почему (протестировано с clang 7.0 и gcc 8.2).

Позвольте мне поделиться простым кодом:

#include <vector>
#include <array>

// some size constant
const size_t N = 100;

// some vectors and arrays
using vec = std::vector<double>;
using arr = std::array<double,3>;
// arrays are constructed faster here due to known size, but it is irrelevant
const vec v1 {1.0,-1.0,1.0};
const vec v2 {1.0,2.0,1.0};
const arr a1 {1.0,-1.0,1.0};
const arr a2 {1.0,2.0,1.0};

// vector to store combinations of vectors or arrays
std::vector<double> glob(N,0.0);

Все идет нормально. Приведенный выше код, который инициализирует переменные, не включен в тест. Теперь давайте напишем функцию для объединения элементов (double) из v1 и v2 или из a1 и a2:

// some combination
auto comb(const double m, const double f)
{
  return m + f;
}

И эталонные функции:

void assemble_vec()
{
    for (size_t i=0; i<N-2; ++i)
    {
        glob[i] += comb(v1[0],v2[0]);
        glob[i+1] += comb(v1[1],v2[1]);
        glob[i+2] += comb(v1[2],v2[2]);
    }  
}

void assemble_arr()
{
    for (size_t i=0; i<N-2; ++i)
    {
        glob[i] += comb(a1[0],a2[0]);
        glob[i+1] += comb(a1[1],a2[1]);
        glob[i+2] += comb(a1[2],a2[2]);
    }  
}

Я пробовал это с Clang 7.0 и GCC 8.2. В обоих случаях версия массива работает почти вдвое быстрее, чем векторная версия.

Кто-нибудь знает почему? Спасибо!

Подробнее (3 ответа)

c++ performance benchmarking stdvector stdarray

Редактирование Файла Без Изменения Форматирования

У меня есть текстовый файл, содержащий строки и числа. Я хотел бы создать короткий скрипт, который ищет определенную строку, и если строка найдена, она умножает n-й разделитель, разделенный пробелом этой строки, на коэффициент масштабирования и сохраняет все в новый файл.
Мы можем предположить, что в файле будет только одна такая строка, а также что n-й аргумент в этой строке будет числом с плавающей запятой. В идеале программа также сохранит форматирование исходного файла.
Например, для поиска строки "ab ce" и умножения четвертого аргумента этой строки на 2.0:

./prog "ab ce" 4 2.0 inputfile.txt output.txt

inputfile.txt:

ab cd   1.0   2.0       3.0 
ab ce   1.0   2.0       3.0 
ac ce   1.0   2.0       3.0
ac ce   de  ef  1.0   2.0       3.0

output.txt

ab cd   1.0   2.0       3.0
ab ce   1.0   4.0       3.0
ac ce   1.0   2.0       3.0
ac ce   de  ef  1.0   2.0       3.0

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

#!/bin/sh

search_string=$1
n=$2
scaling=$3
inputfilename=$4
outputname=$5

awk -vORS= -v scal="$scaling" -v ch="$n" -v inp="$search_string" 'BEGIN {} {if($0 ~ inp){ s = ""; for (i = 1; i < ch; i++) s = s $i " "; print s; print $ch*scal," "; s = ""; for (i = ch+1; i <= NF; i++) s = s $i " "; print s,"\n" } else print $0,"\n" } END{}' $inputfilename>$outputname

Подробнее (1 ответ)

formatting awk perl

Наложения Карт В Android

Я хотел бы спросить, как добавить различные оверлеи в приложение для Android? поскольку у меня уже есть один класс наложения, который расширяет Overlay, и он рисует полилинии в соответствии с некоторыми точками в файле KML. и теперь я хотел бы создать еще один оверлей, который добавляет булавку в пользовательском местоположении с помощью GPS, поэтому я не знаю, как это можно сделать.

пожалуйста, кто-нибудь знает, как мне помочь? заранее спасибо.

Подробнее (3 ответа)

android google-maps overlay

Как Играть В Youtube Live На Exoplayer

Я пытаюсь воспроизвести YouTube Live с помощью ExoPlayer на устройстве Android.

Я знаю, что ExoPlayer может играть на YouTube, согласно:
1. Карим Абдель Салам отвечает:
Как воспроизводить видео на YouTube в ExoPlayer в Android?
2. Ответ Тейама:
Потоковое видео в прямом эфире youtube для Android-приложения с exoplayer (DASH)

Но, когда я пытаюсь опубликовать http://www.youtube.com/get_video_info?&video_id=[video_id], я не получаю свойство dashmpd в ответе. Кроме того, я попробовал https://www.youtube.com/get_video_info?&video_id=[video_id]&el=info&ps=default&eurl=&gl=US&hl=ru в соответствии с комментарием Карима Абделла Салама, и здесь я получаю статус = fail & errorcode = 2 & reason = Недопустимые + параметры.

Итак, как мне играть в YouTube с ExoPlayer, если я не могу успешно опубликовать get_video_info?

Примечание. Я попробовал несколько видеороликов YouTube, как Live, так и регулярно.

Подробнее (1 ответ)

android exoplayer

Ошибка Памяти С Растровым Изображением И Изображение В Полноэкранном Режиме

Я создаю галерею приложений. Он работал, но так медленно, и после того, как я щелкнул по некоторым изображениям, он получил ошибку из памяти.

FullScreenImageAdapter.java

public class FullScreenImageAdapter extends PagerAdapter {

private Activity _activity;
private ArrayList<String> _imagePaths;
private LayoutInflater inflater;

// constructor
public FullScreenImageAdapter(Activity activity,
        ArrayList<String> imagePaths) {
    this._activity = activity;
    this._imagePaths = imagePaths;
}

@Override
public int getCount() {
    return this._imagePaths.size();
}

@Override
public boolean isViewFromObject(View view, Object object) {
    return view == ((RelativeLayout) object);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
    TouchImageView imgDisplay;
    Button btnClose;

    inflater = (LayoutInflater) _activity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View viewLayout = inflater.inflate(R.layout.layout_fullscreen_image, container,
            false);

    imgDisplay = (TouchImageView) viewLayout.findViewById(R.id.imgDisplay);
    btnClose = (Button) viewLayout.findViewById(R.id.btnClose);

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    //BitmapFactory.decodeFile(pathToImage, bmOptions);
    int photoW = options.outWidth;
    int photoH = options.outHeight;
    int scaleFactor = Math.min(photoW/50, photoH/50);

    options.inJustDecodeBounds = false;
    options.inSampleSize = 8;
    options.inPurgeable = true;

   // options.inPreferredConfig = Bitmap.Config.ARGB_8888;
    Bitmap bitmap = BitmapFactory.decodeFile(_imagePaths.get(position), options);
    imgDisplay.setImageBitmap(bitmap);

    // close button click event

    ((ViewPager) container).addView(viewLayout);

    return viewLayout;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    ((ViewPager) container).removeView((RelativeLayout) object);

}

}

public class FullScreenViewActivity extends Activity{

private Utils utils;
private FullScreenImageAdapter adapter;
private ViewPager viewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_fullscreen_view);

    viewPager = (ViewPager) findViewById(R.id.pager);

    utils = new Utils(getApplicationContext());

    Intent i = getIntent();
    int position = i.getIntExtra("position", 0);

    adapter = new FullScreenImageAdapter(FullScreenViewActivity.this,
            utils.getFilePaths());

    viewPager.setAdapter(adapter);

    // displaying selected image first
    viewPager.setCurrentItem(position);
    //adapter.destroyItem(viewPager,position,i);


}

}

GridViewActivity

public class GridViewActivity extends Activity {

private Utils utils;
private ArrayList<String> imagePaths = new ArrayList<String>();
private GridViewImageAdapter adapter;
private GridView gridView;
private int columnWidth;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_grid_view);

    gridView = (GridView) findViewById(R.id.grid_view);

    utils = new Utils(this);

    // Initilizing Grid View
    InitilizeGridLayout();

    // loading all image paths from SD card
    imagePaths = utils.getFilePaths();

    // Gridview adapter
    adapter = new GridViewImageAdapter(GridViewActivity.this, imagePaths,
            columnWidth);

    // setting grid view adapter
    gridView.setAdapter(adapter);
}

private void InitilizeGridLayout() {
    Resources r = getResources();
    float padding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
            AppConstant.GRID_PADDING, r.getDisplayMetrics());

    columnWidth = (int) ((utils.getScreenWidth() - ((AppConstant.NUM_OF_COLUMNS + 1) * padding)) / AppConstant.NUM_OF_COLUMNS);

    gridView.setNumColumns(AppConstant.NUM_OF_COLUMNS);
    gridView.setColumnWidth(columnWidth);
    gridView.setStretchMode(GridView.NO_STRETCH);
    gridView.setPadding((int) padding, (int) padding, (int) padding,
            (int) padding);
    gridView.setHorizontalSpacing((int) padding);
    gridView.setVerticalSpacing((int) padding);
}

}

-

public class GridViewImageAdapter extends BaseAdapter {

private Activity _activity;
private ArrayList<String> _filePaths = new ArrayList<String>();
private int imageWidth;

public GridViewImageAdapter(Activity activity, ArrayList<String> filePaths,
        int imageWidth) {
    this._activity = activity;
    this._filePaths = filePaths;
    this.imageWidth = imageWidth;
}

@Override
public int getCount() {
    return this._filePaths.size();
}

@Override
public Object getItem(int position) {
    return this._filePaths.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) {
        imageView = new ImageView(_activity);
    } else {
        imageView = (ImageView) convertView;
    }

    // get screen dimensions
    Bitmap image = decodeFile(_filePaths.get(position), imageWidth,
            imageWidth);


    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    imageView.setLayoutParams(new GridView.LayoutParams(imageWidth,
            imageWidth));
    imageView.setImageBitmap(image);



    // image view click listener
    imageView.setOnClickListener(new OnImageClickListener(position));

    return imageView;
}

class OnImageClickListener implements OnClickListener {

    int _postion;

    // constructor
    public OnImageClickListener(int position) {
        this._postion = position;
    }

    @Override
    public void onClick(View v) {
        // on selecting grid view image
        // launch full screen activity
        Intent i = new Intent(_activity, FullScreenViewActivity.class);
        i.putExtra("position", _postion);
        _activity.startActivity(i);
    }

}

/*
 * Resizing image size
 */
public static Bitmap decodeFile(String filePath, int WIDTH, int HIGHT) {
    try {

        File f = new File(filePath);

        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new FileInputStream(f), null, o);

        final int REQUIRED_WIDTH = WIDTH;
        final int REQUIRED_HIGHT = HIGHT;
        int scale = 1;
        while (o.outWidth / scale / 2 >= REQUIRED_WIDTH
                && o.outHeight / scale / 2 >= REQUIRED_HIGHT)
            scale *= 2;

        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize = scale;
        return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    return null;
}

}

Таким образом, gridview является настолько медленным, и после щелчка на некоторых изображениях fullsecreenImageView я выхожу из памяти

Подробнее (1 ответ)

android out-of-memory bitmap image-gallery

Кодировка Символов В Html Файле С Использованием Webview В Javafx

У меня есть локальный HTML файл, который я хотел бы отображать в WebView, в JavaFX. Это фактически html файл из файла epub. Я, по сути, пытаюсь создать свой собственный зритель.

Файл epub html отображает текст с диакритическими знаками. Большинство из них были обработаны в файлах ebook, используя теги html и CSS, но не все. Например, используется символ "á". Когда я открываю html файл в Chrome, он отображается нормально, но он отображается в моей программе WebView как "Ã".

Я предполагаю, что это кодировка символов. Если я использую значение символа a & # 769, то оно отображается правильно, но мне бы не пришлось проходить через все файлы epub, которые я хочу отобразить, и посмотреть, какие другие символы работают неправильно.

Я сохранил html файл с кодировкой UTF-8, и в любом случае это тот же файл, который читается Chrome и моей программой. Какие-либо предложения?

Подробнее (1 ответ)

eclipse html character-encoding javafx-8

Если Существует Оператор Sql В Тайм-Ауте

If exists 
(
 select 1 from table A join table B
 on A.id = B.id
)
BEgin  
  Select 'Pass'
END
  Select 'Fail'

Я запутался с вышеуказанным запросом, который не выполняется вообще, пока он не истечет, когда он завернут в оператор If exists.

Когда выражение

 select 1 from table A join table B
 on A.id = B.id

выполняется, для получения результата требуется 20 секунд, но когда он завернут его в оператор If exists, он не выполняется вообще, и, наконец, после 4 -5 часов мне пришлось отменить его. Что может быть причиной этого?

Подробнее (2 ответа)

sql sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2

Инъекция Свойств Httphandler С Использованием Ninject, Возвращающая Null

У меня есть следующий httphandler:

public class NewHandler : IHttpHandler
{
    [Inject]
    public IFile FileReader
    {
        get;
        set;
    }

    public NewHandler()
    {
    }

    public void ProcessRequest(System.Web.HttpContext context)
    {
        ....
        var something = SomeMethod(FileReader);
        ....
    }

    public bool IsReusable
    {
        get
        {
            return true;
        }
    }
}

Это мой модуль Ninject в Global.asax.

internal class ServiceModule : NinjectModule
{
    public override void Load()
    {
        Bind<IFile>().To<FileWrapper>().InSingletonScope();
    }
}

Каждый раз, когда обработчик срабатывает, FileReader имеет значение NULL. Я что-то упускаю? Правильно ли это сделать инъекцию свойств с помощью Ninject?

Спасибо

Подробнее (1 ответ)

ninject asp.net-mvc-2 ninject-2

Проблемы С Работой С Classlist Добавить И Удалить В Реакции

В моем компоненте у меня есть useEffect добавляющая прослушиватели событий в функцию диапазона, чтобы изменить цвет ползунка. Я могу получить только розовый, чтобы работать повсюду, и синий на неправильном конце слайдера.

В console.log() я вижу все перечисленные классы, но, кажется, работает только розовый. Спасибо.

составная часть

  const range = (r) => {
    // move gradient
    r.addEventListener('input', () => {
      // Change slide thumb color on way up
      if (r.value > r.max * 0.20) {
        r.classList.add('pink')
      }
      if (r.value > r.max * 0.40) {
        r.classList.add('purple')
      }
      if (r.value > r.max * 0.60) {
        r.classList.add('ltpurple')
      }
      if (r.value > r.max * 0.80) {
        r.classList.add('blue')
      }

      // Change slide thumb color on way down
      if (r.value < r.max * 0.20) {
        r.classList.remove('pink')
      }
      if (r.value < r.max * 0.40) {
        r.classList.remove('purple')
      }
      if (r.value < r.max * 0.60) {
        r.classList.remove('ltpurple')
      }
      if (r.value < r.max * 0.80) {
        r.classList.remove('blue')
      }
      // window.requestAnimationFrame(r)
      console.log(r.classList)
    })
  }

  useEffect(() => {
    Array.from(document.getElementsByClassName('range')).map(r => range(r))
  })

JSX

  <div className="row">
        <h3>Grooming</h3>
        <p>Care and health: hair, ears, mouth, nose, lips, face, hands, nails, feet, toes.</p>
        <input type="range" className="range blue"
          min={0} max={100} name="grooming" onBlur={handleBlur} />
        <p>Well groomed: hair, nails, ears, face, hands.</p>
      </div>
      <div className="row">
        <h3>Hygiene</h3>
        <p>Hygiene education and awareness. Routine and other daily practices.</p>
        <input type="range" className="range blue" onBlur={handleBlur}
          min={0} max={100} name="hygiene" />
        <p>Demonstrates appropriate hygiene practices.</p>
      </div>

Подробнее (1 ответ)

reactjs react-hooks

Как Генерировать Случайные Числа В Пакетном Режиме И Превращать Их В Переменные, Чтобы Установить Цвет?

Это сценарий, который я пытался, который не работал:

@echo off
:start
:randomcolors
echo Warning: 1/30 chance to crash
pause>nul
cls
set back1=null
set back2=null
set back3=null
set back4=null
set /a integertype=%random% %% 2+1
if %integertype%==1 set sys=#
if %integertype%==2 set sys=str
if %integertype%==1 set /a back1=%random% %% 9+1
if %integertype%==2 set /a back2=%random% %% 6+1
if back1=null goto skiprc
set color 2=%back3%
goto skiprc2
:skiprc
if %back2%==1 set %back2%=a
if %back2%==2 set %back2%=b
if %back2%==3 set %back2%=c
if %back2%==4 set %back2%=d
if %back2%==5 set %back2%=e
if %back2%==6 set %back2%=f
if %back1%=1 set com1=1
if %back1%=2 set com1=2
if %back1%=3 set com1=3
if %back1%=4 set com1=4
if %back1%=5 set com1=5
if %back1%=6 set com1=6
if %back1%=7 set com1=7
if %back1%=8 set com1=8
if %back1%=9 set com1=9
if %back2%=a set com1=a
if %back2%=b set com1=b
if %back2%=c set com1=c
if %back2%=d set com1=d
if %back2%=e set com1=e
if %back2%=f set com1=f
:skiprc2
:part2
set /a integertype2=%random% %% 2+1
if %integertype2%==1 set sys=number
if %integertype2%==2 set sys=string
if %integertype2%==1 set /a back3=%random% %% 9+1
if %integertype2%==2 set /a back4=%random% %% 6+1
if back3=null goto skiprc3
set color 1=%back3%
goto skiprc4
:skiprc3
if %back4%==1 set %back4%=a
if %back4%==2 set %back4%=b
if %back4%==3 set %back4%=c
if %back4%==4 set %back4%=d
if %back4%==5 set %back4%=e
if %back4%==6 set %back4%=f
:skiprc4
if %back3%=1 set com2=1
if %back3%=2 set com2=2
if %back3%=3 set com2=3
if %back3%=4 set com2=4
if %back3%=5 set com2=5
if %back3%=6 set com2=6
if %back3%=7 set com2=7
if %back3%=8 set com2=8
if %back3%=9 set com2=9
if %back4%=a set com2=a
if %back4%=b set com2=b
if %back4%=c set com2=c
if %back4%=d set com2=d
if %back4%=e set com2=e
if %back4%=f set com2=f
:action
color %com1%%com2%
pause
goto action

Подробнее (1 ответ)

random batch-file

Powershell Remoting Не Может Использовать Удаленные Командлеты

Цель:

Я пытаюсь написать сценарий, который будет автоматизировать неявное удаленное время для 100 или более пользователей ежедневно.

Я следую этому руководству дона Джонса; https://technet.microsoft.com/en-us/library/ff720181.aspx

Проблема:

Я получаю сообщение об ошибке после ввода моих пользовательских командлетов, например:

PS > cmdlet1 FooBar
d : The term 'cmdlet1' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ cmdlet1 FooBar
+ ~
    + CategoryInfo          : ObjectNotFound: (d:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Мой скрипт:

Set-Alias -Name gm -Value Get-TheModules -Description 'Grabs The Modules'
function Get-TheModules
{ 
  $ServerARM = New-PSSession -ComputerName serverA -Authentication Kerberos
  # Import Modules
  Write-Verbose -Message 'Importing Custom modules...'
  Invoke-command -ScriptBlock { import-module -Name 'Z:\Modules\ModuleA' } -Session $ServerARM
  Invoke-command -ScriptBlock { import-module -Name 'Z:\Modules\ModuleB' } -Session $ServerARM
  Invoke-command -ScriptBlock { import-module -Name 'Z:\Modules\ModuleC' } -Session $ServerARM
  Export-PSSession -Session $ServerARM -commandname *Cmdlet1,Cmdlet2,Cmdlet3* -OutputModule 'CustomCMDlets' -Force -AllowClobber
  Remove-PSSession -Session $ServerARM
  Import-Module CustomMods -prefix CRem
  Write-Verbose -Message 'Custom modules successfully imported...'
}

Результаты запуска сценария:

PS> GM

    Directory: Z:\Users\-\Documents\WindowsPowerShell\Modules\CustomCMDlets


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        1/16/2017   1:57 PM             99 CustomCMDlets.format.ps1xml
-a----        1/16/2017   1:57 PM            801 CustomCMDlets.psd1
-a----        1/16/2017   1:57 PM          41584 CustomCMDlets.psm1

Custom modules successfully imported...

Вопрос:

Учитывая мою цель и проблему, что я не понимаю в статье, где проблема в моем скрипте?

Подробнее (1 ответ)

powershell

Как Отключить/скрыть Трехточечный Индикатор (Индикатор Меню Опций) На Телефонах Ics

Как отключить/скрыть трехточечный индикатор (индикатор меню опций) на телефонах ICS, у которых нет кнопки меню.

Я запускаю приложение как <uses-sdk android:minSdkVersion="5"/> в манифесте, код скомпилирован с помощью 4.0. На каждом экране отображается индикатор с тремя точками.

Пример для действий с предпочтениями я не хочу показывать индикатор с тремя точками, так как он не имеет никаких параметров меню.

Добавление android:targetSdkVersion="14" в манифест работает. Однако не нужно скрывать/удалять три точки на всех экранах. Только в настройках предпочтения не хотят показывать эту кнопку с тремя точками.

Подробнее (19 ответов)

android android-4.0

Сделать Изменения "scrollleft" / "scrolltop" Не Запускать Прослушиватель Событий Прокрутки

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

Есть ли способ сделать событие прокрутки не срабатывающим, если прокрутка была выполнена путем установки scrollLeft или scrollTop? Моя первая мысль была основным переключателем, например:

ignoreScrollEvents = true;
element.scrollLeft = x;
ignoreScrollEvents = false;

function onScroll() {
  if(ignoreScrollEvents) return false;
}

но поскольку события не запускаются немедленно (oops, duhh), это не выполнимое решение. Какие еще ответы я мог бы попробовать? Я также использую jQuery, если это что-то помогает.

Подробнее (5 ответов)

javascript jquery html

Wordpress На Iis Дает Ошибку Http 404.3 - Не Найден

Я просто установил Wordpress на сервере Windows 2016. Я использую IIS в качестве веб-сервера для этого и создал веб-сайт на порту 81. Он работает нормально локально (http://localhost: 81), но когда я обращаюсь к сайту за пределами сервера (с моего ноутбука: http://servername: 81) Я получаю

Ошибка HTTP 404.3 - Не найдено. Запрошенная вами страница не может быть выполнена из-за конфигурации расширения. Если страница является скриптом, добавьте обработчик. Если файл должен быть загружен, добавьте MIME-карту.

как в Edge, так и в Chrome.

Я добавил отображение обработчика FastCGI в IIS. Есть идеи, как это решить?

С уважением, Нильс

Подробнее (2 ответа)

iis wordpress

Безопасность Данных Sql Server В Сценарии Потерянного Ноутбука

Ситуация - ноутбук с Windows XP с паролем, необходимым для входа в систему, и база данных, работающая в Microsoft Sql Server Developer, с проверкой подлинности Windows.

Меня попросили исследовать, насколько безопасна информация в том случае, если ноутбук потерян или украден. Я не совсем уверен, как охарактеризовать его. Он кажется довольно защищенным от того, кто только пользователь компьютерного приложения, если у него нет пароля.

Какой уровень IT/хакерских навыков необходим для восстановления данных без пароля? Любой хороший ИТ-парень? Любой хороший администратор базы данных? J Случайный хакер? Нам интересна информация о краже идентификационной информации: имя, адрес, SSN и т.д.

Подробнее (3 ответа)

security sql-server

Отклонение Класса, Поскольку Он Не Прошел Проверку Времени Компиляции

Я пытаюсь интегрировать curve25519-java из openwhispersystems в свое приложение для Android и компилировать его с помощью API 23 (Marshmallow). При использовании не родного кода я получаю это исключение во время выполнения:

java.lang.VerifyError: Rejecting class org.whispersystems.curve25519.java.fe_mul because it failed compile-time verification (declaration of 'org.whispersystems.curve25519.java.fe_mul' appears in /data/app/com.fenritz.safecam-1/base.apk)
      at org.whispersystems.curve25519.java.ge_madd.ge_madd(ge_madd.java:65)
      at org.whispersystems.curve25519.java.ge_scalarmult_base.ge_scalarmult_base(ge_scalarmult_base.java:96)
      at org.whispersystems.curve25519.java.curve_sigs.curve25519_keygen(curve_sigs.java:30)
      at org.whispersystems.curve25519.BaseJavaCurve25519Provider.generatePublicKey(BaseJavaCurve25519Provider.java:50)
      at org.whispersystems.curve25519.JavaCurve25519Provider.generatePublicKey(JavaCurve25519Provider.java:8)
      at org.whispersystems.curve25519.Curve25519.generateKeyPair(Curve25519.java:70)
      at com.fenritz.safecam.SafeCameraActivity.onCreate(SafeCameraActivity.java:105)
      at android.app.Activity.performCreate(Activity.java:6237)
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
      at android.app.ActivityThread.-wrap11(ActivityThread.java)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
      at android.os.Handler.dispatchMessage(Handler.java:102)
      at android.os.Looper.loop(Looper.java:148)
      at android.app.ActivityThread.main(ActivityThread.java:5417)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

Класс, который отклоняется, следующий:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package org.whispersystems.curve25519.java;

public class fe_mul {
    public fe_mul() {
    }

    public static void fe_mul(int[] h, int[] f, int[] g) {
        int f0 = f[0];
        int f1 = f[1];
        int f2 = f[2];
        int f3 = f[3];
        int f4 = f[4];
        int f5 = f[5];
        int f6 = f[6];
        int f7 = f[7];
        int f8 = f[8];
        int f9 = f[9];
        int g0 = g[0];
        int g1 = g[1];
        int g2 = g[2];
        int g3 = g[3];
        int g4 = g[4];
        int g5 = g[5];
        int g6 = g[6];
        int g7 = g[7];
        int g8 = g[8];
        int g9 = g[9];
        int g1_19 = 19 * g1;
        int g2_19 = 19 * g2;
        int g3_19 = 19 * g3;
        int g4_19 = 19 * g4;
        int g5_19 = 19 * g5;
        int g6_19 = 19 * g6;
        int g7_19 = 19 * g7;
        int g8_19 = 19 * g8;
        int g9_19 = 19 * g9;
        int f1_2 = 2 * f1;
        int f3_2 = 2 * f3;
        int f5_2 = 2 * f5;
        int f7_2 = 2 * f7;
        int f9_2 = 2 * f9;
        long f0g0 = (long)f0 * (long)g0;
        long f0g1 = (long)f0 * (long)g1;
        long f0g2 = (long)f0 * (long)g2;
        long f0g3 = (long)f0 * (long)g3;
        long f0g4 = (long)f0 * (long)g4;
        long f0g5 = (long)f0 * (long)g5;
        long f0g6 = (long)f0 * (long)g6;
        long f0g7 = (long)f0 * (long)g7;
        long f0g8 = (long)f0 * (long)g8;
        long f0g9 = (long)f0 * (long)g9;
        long f1g0 = (long)f1 * (long)g0;
        long f1g1_2 = (long)f1_2 * (long)g1;
        long f1g2 = (long)f1 * (long)g2;
        long f1g3_2 = (long)f1_2 * (long)g3;
        long f1g4 = (long)f1 * (long)g4;
        long f1g5_2 = (long)f1_2 * (long)g5;
        long f1g6 = (long)f1 * (long)g6;
        long f1g7_2 = (long)f1_2 * (long)g7;
        long f1g8 = (long)f1 * (long)g8;
        long f1g9_38 = (long)f1_2 * (long)g9_19;
        long f2g0 = (long)f2 * (long)g0;
        long f2g1 = (long)f2 * (long)g1;
        long f2g2 = (long)f2 * (long)g2;
        long f2g3 = (long)f2 * (long)g3;
        long f2g4 = (long)f2 * (long)g4;
        long f2g5 = (long)f2 * (long)g5;
        long f2g6 = (long)f2 * (long)g6;
        long f2g7 = (long)f2 * (long)g7;
        long f2g8_19 = (long)f2 * (long)g8_19;
        long f2g9_19 = (long)f2 * (long)g9_19;
        long f3g0 = (long)f3 * (long)g0;
        long f3g1_2 = (long)f3_2 * (long)g1;
        long f3g2 = (long)f3 * (long)g2;
        long f3g3_2 = (long)f3_2 * (long)g3;
        long f3g4 = (long)f3 * (long)g4;
        long f3g5_2 = (long)f3_2 * (long)g5;
        long f3g6 = (long)f3 * (long)g6;
        long f3g7_38 = (long)f3_2 * (long)g7_19;
        long f3g8_19 = (long)f3 * (long)g8_19;
        long f3g9_38 = (long)f3_2 * (long)g9_19;
        long f4g0 = (long)f4 * (long)g0;
        long f4g1 = (long)f4 * (long)g1;
        long f4g2 = (long)f4 * (long)g2;
        long f4g3 = (long)f4 * (long)g3;
        long f4g4 = (long)f4 * (long)g4;
        long f4g5 = (long)f4 * (long)g5;
        long f4g6_19 = (long)f4 * (long)g6_19;
        long f4g7_19 = (long)f4 * (long)g7_19;
        long f4g8_19 = (long)f4 * (long)g8_19;
        long f4g9_19 = (long)f4 * (long)g9_19;
        long f5g0 = (long)f5 * (long)g0;
        long f5g1_2 = (long)f5_2 * (long)g1;
        long f5g2 = (long)f5 * (long)g2;
        long f5g3_2 = (long)f5_2 * (long)g3;
        long f5g4 = (long)f5 * (long)g4;
        long f5g5_38 = (long)f5_2 * (long)g5_19;
        long f5g6_19 = (long)f5 * (long)g6_19;
        long f5g7_38 = (long)f5_2 * (long)g7_19;
        long f5g8_19 = (long)f5 * (long)g8_19;
        long f5g9_38 = (long)f5_2 * (long)g9_19;
        long f6g0 = (long)f6 * (long)g0;
        long f6g1 = (long)f6 * (long)g1;
        long f6g2 = (long)f6 * (long)g2;
        long f6g3 = (long)f6 * (long)g3;
        long f6g4_19 = (long)f6 * (long)g4_19;
        long f6g5_19 = (long)f6 * (long)g5_19;
        long f6g6_19 = (long)f6 * (long)g6_19;
        long f6g7_19 = (long)f6 * (long)g7_19;
        long f6g8_19 = (long)f6 * (long)g8_19;
        long f6g9_19 = (long)f6 * (long)g9_19;
        long f7g0 = (long)f7 * (long)g0;
        long f7g1_2 = (long)f7_2 * (long)g1;
        long f7g2 = (long)f7 * (long)g2;
        long f7g3_38 = (long)f7_2 * (long)g3_19;
        long f7g4_19 = (long)f7 * (long)g4_19;
        long f7g5_38 = (long)f7_2 * (long)g5_19;
        long f7g6_19 = (long)f7 * (long)g6_19;
        long f7g7_38 = (long)f7_2 * (long)g7_19;
        long f7g8_19 = (long)f7 * (long)g8_19;
        long f7g9_38 = (long)f7_2 * (long)g9_19;
        long f8g0 = (long)f8 * (long)g0;
        long f8g1 = (long)f8 * (long)g1;
        long f8g2_19 = (long)f8 * (long)g2_19;
        long f8g3_19 = (long)f8 * (long)g3_19;
        long f8g4_19 = (long)f8 * (long)g4_19;
        long f8g5_19 = (long)f8 * (long)g5_19;
        long f8g6_19 = (long)f8 * (long)g6_19;
        long f8g7_19 = (long)f8 * (long)g7_19;
        long f8g8_19 = (long)f8 * (long)g8_19;
        long f8g9_19 = (long)f8 * (long)g9_19;
        long f9g0 = (long)f9 * (long)g0;
        long f9g1_38 = (long)f9_2 * (long)g1_19;
        long f9g2_19 = (long)f9 * (long)g2_19;
        long f9g3_38 = (long)f9_2 * (long)g3_19;
        long f9g4_19 = (long)f9 * (long)g4_19;
        long f9g5_38 = (long)f9_2 * (long)g5_19;
        long f9g6_19 = (long)f9 * (long)g6_19;
        long f9g7_38 = (long)f9_2 * (long)g7_19;
        long f9g8_19 = (long)f9 * (long)g8_19;
        long f9g9_38 = (long)f9_2 * (long)g9_19;
        long h0 = f0g0 + f1g9_38 + f2g8_19 + f3g7_38 + f4g6_19 + f5g5_38 + f6g4_19 + f7g3_38 + f8g2_19 + f9g1_38;
        long h1 = f0g1 + f1g0 + f2g9_19 + f3g8_19 + f4g7_19 + f5g6_19 + f6g5_19 + f7g4_19 + f8g3_19 + f9g2_19;
        long h2 = f0g2 + f1g1_2 + f2g0 + f3g9_38 + f4g8_19 + f5g7_38 + f6g6_19 + f7g5_38 + f8g4_19 + f9g3_38;
        long h3 = f0g3 + f1g2 + f2g1 + f3g0 + f4g9_19 + f5g8_19 + f6g7_19 + f7g6_19 + f8g5_19 + f9g4_19;
        long h4 = f0g4 + f1g3_2 + f2g2 + f3g1_2 + f4g0 + f5g9_38 + f6g8_19 + f7g7_38 + f8g6_19 + f9g5_38;
        long h5 = f0g5 + f1g4 + f2g3 + f3g2 + f4g1 + f5g0 + f6g9_19 + f7g8_19 + f8g7_19 + f9g6_19;
        long h6 = f0g6 + f1g5_2 + f2g4 + f3g3_2 + f4g2 + f5g1_2 + f6g0 + f7g9_38 + f8g8_19 + f9g7_38;
        long h7 = f0g7 + f1g6 + f2g5 + f3g4 + f4g3 + f5g2 + f6g1 + f7g0 + f8g9_19 + f9g8_19;
        long h8 = f0g8 + f1g7_2 + f2g6 + f3g5_2 + f4g4 + f5g3_2 + f6g2 + f7g1_2 + f8g0 + f9g9_38;
        long h9 = f0g9 + f1g8 + f2g7 + f3g6 + f4g5 + f5g4 + f6g3 + f7g2 + f8g1 + f9g0;
        long carry0 = h0 + 33554432L >> 26;
        h1 += carry0;
        h0 -= carry0 << 26;
        long carry4 = h4 + 33554432L >> 26;
        h5 += carry4;
        h4 -= carry4 << 26;
        long carry1 = h1 + 16777216L >> 25;
        h2 += carry1;
        h1 -= carry1 << 25;
        long carry5 = h5 + 16777216L >> 25;
        h6 += carry5;
        h5 -= carry5 << 25;
        long carry2 = h2 + 33554432L >> 26;
        h3 += carry2;
        h2 -= carry2 << 26;
        long carry6 = h6 + 33554432L >> 26;
        h7 += carry6;
        h6 -= carry6 << 26;
        long carry3 = h3 + 16777216L >> 25;
        h4 += carry3;
        h3 -= carry3 << 25;
        long carry7 = h7 + 16777216L >> 25;
        h8 += carry7;
        h7 -= carry7 << 25;
        carry4 = h4 + 33554432L >> 26;
        h5 += carry4;
        h4 -= carry4 << 26;
        long carry8 = h8 + 33554432L >> 26;
        h9 += carry8;
        h8 -= carry8 << 26;
        long carry9 = h9 + 16777216L >> 25;
        h0 += carry9 * 19L;
        h9 -= carry9 << 25;
        carry0 = h0 + 33554432L >> 26;
        h1 += carry0;
        h0 -= carry0 << 26;
        h[0] = (int)h0;
        h[1] = (int)h1;
        h[2] = (int)h2;
        h[3] = (int)h3;
        h[4] = (int)h4;
        h[5] = (int)h5;
        h[6] = (int)h6;
        h[7] = (int)h7;
        h[8] = (int)h8;
        h[9] = (int)h9;
    }
}

Любые идеи, почему это отвергается и как я могу это исправить.

Подробнее (2 ответа)

java android elliptic-curve

Пароль Ресурса Tomcat Context.xml Не Позволяет Использовать Специальные Символы

Я пытаюсь добавить источник данных в tomcat conf/context.xml, как показано ниже.

<Resource name="jdbc/DS1"
                        auth="Container"
                        type="javax.sql.DataSource"
                        driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
                        url="jdbc:sqlserver://121.111.11.91;databaseName=DB_NAME"
                        username="testUanme"
                        password="TT&123$"
                        maxPoolSize="50"
                        removeAbandoned="true"
                        removeAbandonedTimeout="1000"
                        logAbandoned="true"
                        /> 

После того, как вы установили запись источника данных в файл конфигурации, перезапустите tomcat и получите ошибку, например:

Ссылка на объект "TT" должна заканчиваться символом ';' разделитель.

Пароль не позволяет использовать специальные символы, которые я использовал & и $.

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

Заранее спасибо.

Подробнее (1 ответ)

tomcat6

Пользовательский Инструмент Не Отображает View, Laravel Nova

Я просто выполнил все шаги, чтобы создать собственный инструмент Laravel/Nova/custom/tools. Но он не отображает представление по умолчанию, нет ошибки консоли (js) или php, но вид пуст. enter image description here

 

    namespace Mihrbi\CompanyConfig;

    use Laravel\Nova\Nova;
    use Laravel\Nova\Tool;

    class CompanyConfig extends Tool
    {
        /**
         * Perform any tasks that need to happen when the tool is booted.
         *
         * @return void
         */
        public function boot()
        {
            // Nova::script('company-config', __DIR__.'/../dist/js/tool.js');
            // Nova::style('company-config', __DIR__.'/../dist/css/tool.css');
            Nova::serving(function (ServingNova $event) {
                Nova::script('company-config', __DIR__.'/../dist/js/tool.js');
                Nova::style('company-config', __DIR__.'/../dist/css/tool.css');
            });
        }

        /**
         * Build the view that renders the navigation links for the tool.
         *
         * @return \Illuminate\View\View
         */
        public function renderNavigation()
        {
            return view('company-config::navigation');
        }
    }

это единственные изменения, которые я сделал, чтобы использовать Nova ::, чтобы избежать "nova-api/scripts/company-config 500 (Internal Server Error)",

enter image description here

Это происходит, когда я удаляю продукт Nova :: serve и npm rund

local.ERROR: file_get_contents (/home/site/nova-components/CompanyConfig/src/../dist/css/tool.css): не удалось открыть поток: нет такого файла или каталога

здесь мой пакет.json

{
"private": true,
"scripts": {
    "dev": "npm run development",
    "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
    "watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
    "watch-poll": "npm run watch -- --watch-poll",
    "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
    "prod": "npm run production",
    "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
},
"devDependencies": {
    "cross-env": "^5.0.0",
    "laravel-mix": "^1.0"
},
"dependencies": {
    "vue": "^2.5.0"
}

}

Подробнее (1 ответ)

php laravel laravel-nova

Uiviewcontroller Не Деинициализирует (Mvvm + Координаторы)

Из-за этой проблемы у меня болит голова. Почему мой SplashscreenViewController не деинициализирует? Вы, ребята, видите какие-либо потенциальные циклы удержания кода ниже? Я попытался проверить стек Malloc, но не нашел никакой полезной информации.

final class SplashscreenViewController: UIViewController {
    var viewModel: SplashscreenViewModelType!

    private let animationStartScale: CGFloat = 0.75
    private let animationEndScale: CGFloat = 1.0
    private let animationDuration: TimeInterval = 0.4

    private let splashscreenDuration: TimeInterval = 1.5

    @IBOutlet private weak var logoImageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        animateLogo(scale: animationStartScale)
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        DispatchQueue.main.asyncAfter(deadline: .now() + splashscreenDuration, execute: { [weak self] in
            self?.viewModel.onFinish.onNext(())
        })
    }

    private func animateLogo(scale: CGFloat) {
        UIView.animate(withDuration: animationDuration, animations: {
            self.transformImage(scale: scale)
        }, completion: { _ in
            if scale == self.animationStartScale {
                self.animateLogo(scale: self.animationEndScale)
            } else {
                self.animateLogo(scale: self.animationStartScale)
            }
        })
    }

    private func transformImage(scale: CGFloat) {
         logoImageView.transform = CGAffineTransform(scaleX: scale, y: scale)
    }
}

Класс, который содержит экземпляр SplaschreenViewController, является его координатором. Код ниже:

final class SplashscreenCoordinator: BaseCoordinator {
    private let window: UIWindow

    init(window: UIWindow) {
        self.window = window
    }

    override func start() -> Observable<Void> {
        let vc: SplashscreenViewController = SwinjectStoryboard.instantiateInitialViewController()
        window.rootViewController = vc
        window.makeKeyAndVisible()

        let onFinish = vc.viewModel.onFinish
            .asObservable()
            .flatMap { [unowned self] _ -> Observable<Void> in
                guard self.window.rootViewController == vc else {
                    return Observable<Void>.empty()
                }
                if UserPreferencesManager.isLoggedIn() {
                    return self.startAppForLoggedInUser()
                } else {
                    return self.startAppForAnonymousUser()
                }
            }

        return onFinish
    }

    private func startAppForLoggedInUser() -> Observable<Void> {
        let tabBar = TabBarCoordinator(window: window)
        return coordinate(to: tabBar)
    }

    private func startAppForAnonymousUser() -> Observable<Void> {
        let startCoordinator = StartCoordinator(window: window)
        return coordinate(to: startCoordinator)
    }
}

И некоторый код из BaseCoordinator:

...
private func store(coordinator: BaseCoordinator) {
    childCoordinators[coordinator.identifier] = coordinator
}

private func free(coordinator: BaseCoordinator) {
    childCoordinators[coordinator.identifier] = nil
}

func coordinate(to coordinator: BaseCoordinator) -> Observable<Void> {
    store(coordinator: coordinator)
    return coordinator.start()
        .do(onNext: { [weak self] _ in
            self?.free(coordinator: coordinator)
        })
}
...

Заранее благодарю за ваши ответы!

Подробнее (1 ответ)

swift mvvm rx-swift swinject

Почему Сериализация Double [] Не Работает В Wince?

У меня есть объект с (де-) сериализует его конфигурацию через system.xml.serializer

Конфигурация в классе выглядит следующим образом:

    public struct Phase
    {
        public Int16 Trafo;
        public KorrekturWerte Spannung;
        public KorrekturWerte Strom;
        [XmlArray("Min")]
        public double[] Min;
        [XmlArray("Max")]
        public double[] Max;
        public bool CheckThis;
    }

    public class ParameterHardware
    {
        public string WAGOId = "00:30:DE:05:33:CB";
        public Byte Phasen = 0x07;
        public Phase L1;
        public Phase L2;
        public Phase L3;
    }

(De-) Сериализация этого в WindowsXP-системе работает очень хорошо, но в Windows CE Min/Max-Array просто рушится после дезактивации и затем ресериализуется ( "CheckThis" был помещен туда как тест и следует после сериализации значений "Strom" ). Поскольку KorrekturWerte снова является структурой, глубина не может быть проблемой. [XmlArray...] не было в моей первой версии, это просто из другого теста.

Edit:

  • Проблема не (только) в сериализации. Пытаюсь получить доступ к Min [...] Я получаю ошибку нулевой ссылки.

  • Возможно, это не ясно: у меня есть сериализация класса, который содержит все значения. Уничтожьте его, чтобы инициализировать класс, а затем повторите его как проверку отладки. Теперь поля отсутствуют. (Исходный файл был сериализован в XP, где он работает правильно)

  • Смена двойного [] на список не помогает. (Тот же результат)

  • xml файлы: Оригинал:

      00: 30: DE: 05: 53: 65   1        50            -0,2       1                 0,004       0,994                 0       0       0       0       0                 500       32       15000       15000       1          правда           50            0       1                 0       1                 0       0       0       0       0                 500       32       15000       15000       1                50            0       1                 0       1                 0       0       0       0       0                 500       32       15000       15000       1        

Повторная инициализация (извините, CE сериализуется в одной строке):

<?xml version="1.0" encoding="utf-8"?><ClassTest_FCT_Extern xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><Hardware><WAGOId>00:30:DE:05:53:65</WAGOId><Phasen>1</Phasen><L1><Trafo>50</Trafo><Spannung><Offset>-0.2</Offset><Steigung>1</Steigung></Spannung><Strom><Offset>0.004</Offset><Steigung>0.994</Steigung></Strom><CheckThis>true</CheckThis></L1><L2><Trafo>50</Trafo><Spannung><Offset>0</Offset><Steigung>1</Steigung></Spannung><Strom><Offset>0</Offset><Steigung>1</Steigung></Strom><CheckThis>false</CheckThis></L2><L3><Trafo>50</Trafo><Spannung><Offset>0</Offset><Steigung>1</Steigung></Spannung><Strom><Offset>0</Offset><Steigung>1</Steigung></Strom><CheckThis>false</CheckThis></L3></ClassTest_FCT_Extern>
  • Извините за то, что вы нанесли все кусочки ломтиками. Вот код сериализации (с использованием System.Xml.Serialization;)

    try
    {
        fstream = new FileStream(filepath, FileMode.Open, FileAccess.Read);
        reader = new XmlTextReader(fstream);
        serializer = new XmlSerializer(typeof(T));
        retobj = (T)serializer.Deserialize(reader);
    }
    catch (Exception e)
    {
        Debug("Serialization: "+e.ToString());
        retobj = Activator.CreateInstance<T>();
     }
    

Отладка не вызывается, поэтому ошибок не возникает.

  • Версия .net 2.0.

Подробнее (2 ответа)

c# .net windows-ce xml-serialization