GOOGLE ADS

суббота, 30 апреля 2022 г.

Удалить переменную env на Mac

введите описание изображения здесь, мне нужна помощь, я не могу удалить переменную env с неустановленным значением.

введите описание изображения здесь

Я хочу удалить переменную env conda: я использую unset:

введите описание изображения здесь

Я смотрю на переменную env:

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

Большое тебе спасибо.


Решение проблемы

Дистрибутив Anaconda Python устанавливает переменную среды при запуске оболочки. Вам нужно найти это и удалить это. Обычно они могут находиться в .bashrc,.cshrc,.zshrc,.profile, /etc/profileи так далее. Если вы отключите их в консоли, они будут установлены снова при следующем запуске оболочки. Это также верно для другой вкладки в терминале в mac os, поскольку она запускает новую оболочку zsh.

Переменная React.js пуста при использовании в массиве

Я пытаюсь сделать так, чтобы массив компонентов отображал имя пользователя пользователя на основе идентификатора из базы данных или «УДАЛЕН», если пользователь не существует. Моя функция работает правильно, и значение отображается в журналах, но фактически отображаемый компонент имеет пустую строку там, где должно быть значение.

postsList = this.state.postsArray.map(post => {
var author = "";
AccountService.getUsernameFromId(post.author, function(id, username) {
author = username;
console.log(author);
});
return(
<Item key={post._id}>
<Item.Image size="small" src={post.image} />
<Item.Content>
<Item.Header as="a" href={"/blog/post/?id=" + post._id}>{post.name}</Item.Header>
<Item.Meta>{author} | {post.date_created}</Item.Meta>
<Item.Description>{post.post_contents.slice(0, 200) + "..."}</Item.Description>
</Item.Content>
</Item>
);
});

Может кто-нибудь, пожалуйста, помогите мне с этим?


Решение проблемы

я еще не уверен, что getUsernameFromId, но я чувствую, что вы пытаетесь сделать запрос API на сервер во время карты.

поэтому в начале цикла вы делаете запрос к API, компонент отображается, не дожидаясь ответа API, когда запрос API разрешается, результат регистрируется, что является ожидаемым поведением.

Вам нужно будет объявить ее AccountService.getUsernameFromIdкак асинхронную функцию или сделать ее функцией на основе обещаний.

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

postsList = this.state.postsArray.map(async post => {
var author = await AccountService.getUsernameFromId(post.author);

return(
<Item key={post._id}>
<Item.Image size="small" src={post.image} />
<Item.Content>
<Item.Header as="a" href={"/blog/post/?id=" + post._id}>{post.name}</Item.Header>
<Item.Meta>{author} | {post.date_created}</Item.Meta>
<Item.Description>{post.post_contents.slice(0, 200) + "..."}</Item.Description>
</Item.Content>
</Item>
);
});

Кнопка Bootstrap Accordion для переключения «данные-родитель» не работает

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

Однако я не могу заставить атрибут data-parent работать. Я хочу, чтобы при открытии вопроса все остальные закрывались. Я читаю документы ( http://getbootstrap.com/javascript/#collapse-usage ), но все еще не могу заставить его работать.

Я использую следующий код:

<div class="accordion" id="myAccordion">
<button type="button" class="btn btn-danger" data-toggle="collapse" data-target="#collapsible-1" data-parent="#myAccordion">Question 1?</button>
<div id="collapsible-1" class="collapse">
<p>Etiam posuere quam ac quam. Maecenas aliquet accumsan leo. Nullam dapibus fermentum ipsum. Etiam quis quam. Integer lacinia. Nulla est.</p>
</div>
<button type="button" class="btn btn-danger" data-toggle="collapse" data-target="#collapsible-2" data-parent="#myAccordion">Question 2?</button>
<div id="collapsible-2" class="collapse">
<p>Etiam posuere quam ac quam. Maecenas aliquet accumsan leo. Nullam dapibus fermentum ipsum. Etiam quis quam. Integer lacinia. Nulla est.</p>
</div>
<button type="button" class="btn btn-danger" data-toggle="collapse" data-target="#collapsible-3" data-parent="#myAccordion">Question 3?</button>
<div id="collapsible-3" class="collapse">
<p>Etiam posuere quam ac quam. Maecenas aliquet accumsan leo. Nullam dapibus fermentum ipsum. Etiam quis quam. Integer lacinia. Nulla est.</p>
</div>
</div>

Вот JSFiddle: http://jsfiddle.net/twinsen/AEew4/

Я буду очень рад, если кто-нибудь укажет мне, где я делаю ошибку:\


Решение проблемы

Обратите внимание, что существует зависимость не только от.panel, но и от структуры DOM.

Убедитесь, что ваши элементы структурированы следующим образом:

 <div id="parent-id">
<div class="panel">
<a data-toggle="collapse" data-target="#opt1" data-parent="#parent-id">Control</a>
<div id="opt1" class="collapse">
...

В основном это то, что сказал @Blazemonger, но я думаю, что иерархия целевого элемента также имеет значение. Я не закончил проверять все возможности, но в основном это должно работать, если вы следуете этой иерархии.

К вашему сведению, у меня было больше слоев между элементом управления и элементом содержимого, и это не сработало.

Next.js, обслуживающий статические файлы, не включенные в сборку или исходный код

У меня есть файлы, которые не хранятся в CDN, и я хотел бы обслуживать их с помощью Next.js. Эти файлы не предназначены для интеграции в Next.js и не должны помещаться в общую папку. Будут добавлены дополнительные файлы, и я хочу избежать использования собственного сервера Next.js для простого обслуживания файлов для изображений, которые недоступны во время сборки. Кроме того, это приложение будет развернуто только локально, и использование CDN в этой ситуации излишне.

В настоящее время я использую Express.js и собственный сервер Next.js express.staticдля обслуживания файлов, но в итоге это замедляет работу Next.js и добавляет много ненужной сложности в мой стек. Я бы предпочел просто использовать интерфейс командной строки Next.js для запуска своего приложения, а не изобретать велосипед.

Есть ли простой способ обслуживать статические файлы в Next.js и за пределами publicкаталога?

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


Решение проблемы

Отказ от ответственности: я не использую Vercel для публикации своих приложений и не знаю, применим ли этот ответ к Next.js в Vercel.

Next.js позволяет настраивать маршруты API для поддержки обработчиков HTTP Node.js, что означает, что экспресс также может использоваться в маршрутах API Next.js.

Вот некоторый код, который можно использовать express.staticна маршруте API Next.js.

// pages/api/images/[name].js
// Tell Next.js to pass in Node.js HTTP
export const config = {
api: { externalResolver: true }
}
import express from 'express';
const handler = express();
const serveFiles = express.static('./path/to/files');
handler.use(['/api/images', '/images'], serveFiles);
// ^ ^
// Multiple endpoints are passed. The first one is used when visiting /api/images.
// The second one is used when visiting /images using the middleware rewrite I mention below.
// express is just a function that takes (http.IncomingMessage, http.ServerResponse),
// which Next.js supports when externalResolver is enabled.
export default handler;

Однако, чтобы обойти посещение этой конечной точки через, вы можете использовать новое промежуточное ПО/api/images/filename Next.js для перезаписи запроса!

// pages/images/_middleware.js
import { NextResponse } from 'next/server';
export function middleware(req) {
// Rewrite /images/... to /api/images/...
return NextResponse.rewrite('/api' + req.nextUrl.pathname);
}

При их использовании посещение /images/photo.pngбудет внутренне переписано /api/images/photo.pngи, в свою очередь, обработано express.static, что позволит вам обслуживать файлы вне маршрута API и без использования специального сервера!

Этот код, безусловно, можно упростить и избавиться от необходимости инициализировать приложение express.js только для обработки запроса, но невероятно просто интегрировать express.js в next.js без использования специального сервера!

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

Сигнатура для функции базового класса, которая является оболочкой для функций производного класса

Я определяю _wrapметод базового класса, который изменяет методы производных классов.

class Base {
//this is the signature I'm working out
_wrap(key: unknown) {
const fn = this[key]
//I want typeof fn to be "Function"
//which is not callable
fn()
}
}
class Derived extends Base {
constructor() {
super()
//I want _wrap1 to require "isAFunction1 | isAFunction2"
super._wrap("isAFunction1")
}
isAFunction1() { }
isAFunction2() { }
notAFunction = "some value"
}

Я изо всех сил пытаюсь написать подпись типа этого метода, чтобы он:

  • Предотвращает вызовы _wrapиз производных классов с ключами, которые не соответствуют функциям в производном классе.

  • Позволяет мне использовать this[key]внутри _wrapкак соответствующий тип без приведения

  • Я могу использовать _wrap(key: keyof typeof this)для достижения № 1, но не № 2.

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

    type KeysMatching<T, V> = {[K in keyof T]-?: T[K] extends V? K: never}[keyof T];
    class Base {
    _wrap(key: KeysMatching<typeof this, Function>) {
    const fn = this[key]
    //I expect typeof fn to be "Function", but it's not, it's this[KeysMatching<this, Function>],
    //which is not callable
    fn()
    }
    }
    class Derived extends Base {
    constructor() {
    super()
    //I expect _wrap1 to expect "isAFunction1 | isAFunction2", but it's not, it's
    //this[KeysMatching<this, Function>], which doesn't match string
    this._wrap("isAFunction1")
    }
    isAFunction1() { }
    isAFunction2() { }
    notAFunction = "some value"
    }

    Есть ли способ написать эту подпись для достижения обеих этих целей?

    (Примечание: это, вероятно, не идеальный код. Я аннотирую существующую библиотеку и не вношу изменения в код.)


    Решение проблемы

    Проблема с использованием KeysMatching<T, V>заключается в том, что компилятор недостаточно умен, чтобы понять, что T[KeysMatching<T, V>]можно присвоить V. Это функция типа, включающая условные типы для параметров универсального типа, которые компилятор в основном просто откладывает и считает непрозрачными. Для получения дополнительной информации см. Microsoft/TypeScript#30728.

    С другой стороны, компилятор достаточно умен, чтобы понять, что Record<K, V>[K](эквивалентно {[P in K]: V}[K]) можно присвоить V... это общий индексированный доступ к сопоставленному типу, без каких-либо условных типов.

    Таким образом, это означает, что вы можете попытаться ограничить thisдля Record<K, () => void>общего ключа K, соответствующего типу key, вместо ограничения самого типа key.

    Обратите внимание, что я использую () => void выражение типа функции вместо типаFunction; первая - это функция, которую можно (относительно) безопасно вызывать с нулевыми аргументами, а вторая - нетипизированный вызов функции, который не защищает от неправильного использования типов параметров. Если fnесть (x: string) => x.toUpperCase(), то звонить совсем не хочется fn(). Если вы проверите против Record, вы не получите предупреждения компилятора, и проблема будет рассматриваться только как ошибка времени выполнения. Если вы проверите против () => void, компилятор будет жаловаться, что (x: string) => stringне может быть назначен () => void.

    В любом случае, эта сигнатура вызова может выглядеть так:

    class Base {
    _wrap1<K extends PropertyKey>(this: this & Record<K, () => void>, key: K) {
    const fn = this[key].bind(this) // <-- bound
    fn()
    }
    }

    Я использую thisпараметр, чтобы сообщить компилятору, что вы можете вызывать только foo._wrap1()объект, fooназначаемый this & Record<K, ()=>void>( пересечение: типаthis, соответствующего типу текущего производного подкласса; иRecord<K, ()=>void>.

    О, еще в сторону. Код вашего примера просто вызывает fn()без предварительной привязки к this. Это может быть большой проблемой для любой реализации метода, который разыменовывает файлы this. И, к сожалению, TypeScript не сможет легко отловить эти ошибки, см. microsoft/TypeScript#7968 для получения дополнительной информации. Поэтому я написал this[key].bind(this), чтобы избежать ошибок во время выполнения.

    Давайте проверим это:

    class Derived extends Base {
    constructor() {
    super()
    this._wrap1("isAFunction1") // okay
    this._wrap1("isAFunction2") // okay
    this._wrap1("notAFunction") // error!
    //~~ <-- types of property 'notAFunction' are incompatible.
    }
    isAFunction1() { console.log(this.notAFunction + " says hello") }
    isAFunction2() { console.log(this.notAFunction + " says goodbye") }
    notAFunction = "some value"
    }
    new Derived()
    // some value says hello
    // some value says goodbye
    //

    игнорировать выбранный размер для избранного изображения

    я установил размер, используя код ниже:

    add_image_size( '350x350', 350, 350, false );

    затем в виджете elementor я выбрал избранное изображение и размер изображения этого размера:

    введите описание изображения здесь

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

    в чем причина этой проблемы?


    Решение проблемы

    Убедитесь, что у вас нет ничего, что могло бы изменить размер в любом другом месте.

    SDK распознавания AWS приводит к тому, что gradle не создается в Android Studio

    Я попытался вручную добавить «aws-java-sdk-1.12.199.jar» в библиотеку и добавил строку «файлы реализации ('libs\aws-java-sdk-1.12.199.jar')» в градиент, но, похоже, градиент не строится. Консоль печатает «Срок действия демона истекает, потому что пространство кучи JVM исчерпано». Кто-нибудь знает, что может быть причиной этой проблемы и того, что Gradle не собирается? Любая помощь горячо приветствуется.

    dependencies {
    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.5.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
    implementation 'com.amazonaws:aws-android-sdk-rekognition:2.44.0'
    //implementation 'com.amplifyframework:aws-api:1.35.0'
    //implementation 'com.amplifyframework:aws-datastore:1.35.0'
    implementation files('libs\\aws-java-sdk-1.12.199.jar')
    implementation files('libs\\aws-java-sdk-1.12.199-sources.jar')
    // BEGIN AWS DEPENDENCIES
    def aws_version = '2.44.0'
    implementation "com.amazonaws:aws-android-sdk-s3:$aws_version"
    implementation ("com.amazonaws:aws-android-sdk-mobile-client:$aws_version") { transitive = true }
    // END AWS DEPENDENCIES
    //implementation 'com.amazonaws:aws-android-sdk-sns:2.44.0'
    //implementation 'com.amazonaws:aws-android-sdk-sqs:2.44.0'
    //implementation 'com.amazonaws:aws-android-sdk-pinpoint:2.44.0'
    //implementation 'com.amazonaws:aws-android-sdk-auth-ui:2.44.0@aar'
    //implementation 'com.amazonaws:aws-android-sdk-auth-userpools:2.44.0@aar'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

    }


    Решение проблемы

    Добавление этого в мой файл.gradle/gradle.properties разрешило это для меня:

    org.gradle.daemon=true
    org.gradle.configureondemand=true
    org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

    Может ли база данных H2 поддерживать запросы, использующие структурированные параметры (иногда называемые параметрами значений таблицы или пользовательскими типами таблиц)

    В MS SQL Server есть нечто, называемое пользовательскими типами таблиц, где вы можете в основном создать параметр, который является таблицей. Это позволяет людям в запросах передавать таблицу в качестве входных данных. Это обычно используется, чтобы обойти ограничения с максимальным количеством входных параметров (например, в JDBC, который ограничивает количество входных параметров примерно 2000).

    Если у меня есть запросы, которые принимают пользовательские типы таблиц данных, может ли база данных H2 поддерживать это?


    Решение проблемы

    JDBC не накладывает никаких ограничений на количество параметров JDBC. Драйверы JDBC могут иметь собственные ограничения, а драйвер JDBC H2 позволяет использовать до 100 000 параметров.

    H2 поддерживает стандартные типы данных массива и значения строки, и вы также можете передавать эти сложные значения в качестве параметров JDBC, но нецелесообразно использовать их для группировки несвязанных параметров вместе, чтобы уменьшить их количество.

    H2 не поддерживает никаких других сложных типов данных, и вы не можете использовать определяемые пользователем типы таблиц в стиле MS SQL в H2.

    получение изображения из ввода

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

     <label for="avatarinput">
    <img id="avatar" class="image" style="border-radius: 50%;" height="150" width="150" id="createForm" src= <%= image_url %> >
    </label>
    <input type="file" id="avatarinput" multiple accept=".jpg,.jfif,.jpeg,.png,.gif" name="filedata" /><br><br>

    <script>
    $("input[type=file]").on('change',function(){
    let file = $(this).val();
    $('#avatar').attr('src', file);
    });
    </script>

    Не разрешено загружать локальный ресурс: file:///C:/fakepath/scale_1200.jfif


    Решение проблемы

    Вы должны использовать FileReader для чтения файла с клиента и установить его на img.src Attr.

     $("input[type=file]").on('change',function(element){
    let file = element.target.files[0];

    // FileReader support
    if (FileReader && file) {
    var fr = new FileReader();
    fr.onload = function () {
    $('#avatar').attr('src', fr.result);
    }
    fr.readAsDataURL(file);
    }}
    );

    Ошибка диспетчера соединений запроса SSIS Power

    Я устанавливаю соединитель SQL Server для Power Query для SQL Server 2017. Создайте пакет SSDT SSIS с соединителем запроса питания. Он отлично работает в SSDT! Но когда я развертываю проект в каталоге SSIS, я получаю сообщение об ошибке:

    Для подключения веб-источника требуются учетные данные.

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

    Более того, когда я импортирую этот пакет из каталога SSIS в новый проект, диспетчер соединений с запросом питания уходит из проекта с ошибкой:

    Соединение "{EFC6889A-D312-4A9E-B251-877C7A67B8DF}" не найдено. Эта ошибка выдается коллекцией Connections, когда определенный элемент соединения не найден.


    Решение проблемы

    Решено!!! В SSDT я использовал свой логин. Но в каталоге SSIS используется учетная запись прокси-сервера SSIS, у которой нет доступа к сети. После предоставления доступа к веб-прокси-аккаунту SSIS он работает!

    Если вы столкнулись с той же ошибкой, просто попробуйте запустить SSDT под учетной записью прокси и проверьте веб-доступ в диспетчере источников данных:)

    TypeError: add() принимает ровно 2 позиционных аргумента (даны 3)

    Почему я получаю эту ошибку Может ли кто-нибудь сказать или объяснить мне, как ее использовать, используя простой пример

    ---------------------------------------------------------------------------
    TypeError Traceback (most recent call last)
    /tmp/ipykernel_33/3577035061.py in <module>
    6 # Matcher class object
    7 matcher = Matcher(nlp.vocab)
    ----> 8 matcher.add("matching_1", None, pattern)
    9
    10 matches = matcher(doc)
    /opt/conda/lib/python3.7/site-packages/spacy/matcher/matcher.pyx in spacy.matcher.matcher.Matcher.add()
    TypeError: add() takes exactly 2 positional arguments (3 given)

    введите описание изображения здесь

    В нижней ссылке
    https://spacy.io/api/matcher
    введите описание изображения здесь


    Решение проблемы

    Для чего ты проходишь None? Похоже, вам просто нужно:

    matcher.add("matching_1", pattern)

    Вы получаете сообщение об ошибке, потому что функция принимает 2 неименованных аргумента, но вы пытаетесь передать 3. Если вы также хотите передать функцию обратного вызова, вам нужно будет написать:

    matcher.add("matching_1", pattern, on_match = my_callback_function)

    java.lang.UnsupportedClassVersionError: неправильный номер версии в файле .class

    У меня эта ошибка в eclipes java.lang.UnsupportedClassVersionError: Bad version number in.class file.

    Когда я запускаю javac -version, он печатает

    javac 1.5.0_28

    Внутри eclipes, если я щелкну правой кнопкой мыши, свойства-> компилятор java, он скажет, что я использую 1.5, и если я затем перейду к java build path, у меня JRE System Library [JVM 1.5.0 (MacOS X Default)]там есть.

    Почему я получаю эту ошибку и как ее исправить?

    ПРАВКИ

    java -versionотпечатки

    java version "1.5.0_28"
    Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_28-b04-382-9M3326)
    Java HotSpot(TM) Client VM (build 1.5.0_28-157, mixed mode, sharing)

    Другие библиотеки в моем приложении — это библиотека libgdx.

    Полная ошибка

    Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in.class file
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:676)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:317)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:280)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:375)


    Решение проблемы

    Вы получаете эту ошибку, когда пытаетесь запустить класс, который был скомпилирован для более новой версии Java, чем ваша; например, если вы попытаетесь использовать класс, скомпилированный для Java 6 или новее, на Java 5 JVM.

    Это не обязательно должен быть ваш собственный класс; возможно, вы используете какую-то библиотеку, созданную для Java 6 или новее.

    Используете ли вы определенные библиотеки (файлы JAR)? Проверьте, совместимы ли они с Java 5 или нет. Или обновите версию Java до Java 6.

    Как добавить нумерацию страниц в таблицу материалов angular, которая привязывается к ответу API

    Я новичок в угловых. В моем проекте показан список продуктов и его работа корректно.

    Мой HTML-код ниже:

    <table mat-table [dataSource]="list_product" style="width: 20%;">
    <!-- id Column -->
    <ng-container matColumnDef="id" style="width: 20%;">
    <th mat-header-cell *matHeaderCellDef style="align-items: center;"> id </th>
    <td mat-cell *matCellDef="let list_product"> {{list_product.id}} </td>
    </ng-container>
    <!-- description Column -->
    <ng-container matColumnDef="description">
    <th mat-header-cell *matHeaderCellDef> Name </th>
    <td mat-cell *matCellDef="let list_product"> {{list_product.description}} </td>
    </ng-container>
    <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
    <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
    </table>
    <mat-paginator [pageSizeOptions]="[5, 10, 20]" showFirstLastButtons></mat-paginator>

    и мой код TypeScript -

    import { Component, OnInit,ViewChild } from '@angular/core';
    import { HttpClient } from '@angular/common/http';
    import { analyzeAndValidateNgModules } from '@angular/compiler';
    import { MatPaginator} from '@angular/material/paginator';
    import { MatTableDataSource} from '@angular/material/table';
    @Component({
    selector: 'app-basic',
    templateUrl: './basic.component.html',
    styleUrls: ['./basic.component.scss']
    })
    export class BasicComponent implements OnInit {
    public list_product:any=[];
    displayedColumns: string[] = ['id', 'description'];
    @ViewChild(MatPaginator) paginator: MatPaginator;
    constructor(private http:HttpClient) { }
    ngOnInit(): void {
    this.get_data();
    this.list_product.paginator = this.paginator;
    }
    get_data(){
    this.http.get<any>("http://localhost:3000/listp").subscribe(
    res => this.list_product = res
    )
    }
    }

    Пагинация не работает, показывается весь список. Кнопки пагинации не работают в html файле.


    Решение проблемы

    Для разбиения на страницы на стороне клиента в MatTableDataSourceнего встроены функции разбиения на страницы, сортировки и фильтрации.

    Следуйте инструкциям ниже -

  • Используйте MatTableDataSourceтип как dataSourceи инициализируйте его пустым массивом

  • Установите dataсвойство MatTableDataSourceпосле получения данных

  • Получить ссылку на таблицу paginatorс@ViewChild

  • Реализовать AfterViewInitустановку paginatorсвойства MatTableDataSourceпосле инициализации представления.

  • Ваш окончательный код компонента должен выглядеть примерно так:

    export class BasicComponent implements OnInit, AfterViewInit {

    public list_product = new MatTableDataSource<any>([]); // <-- STEP (1)
    displayedColumns: string[] = ['id', 'description'];
    @ViewChild(MatPaginator) private paginator: MatPaginator; // <-- STEP (3)
    constructor(private http:HttpClient) { }
    ngOnInit(): void {
    this.get_data();
    }
    get_data(){
    this.http.get<any>("http://localhost:3000/listp").subscribe(
    res => this.list_product.data = res // <-- STEP (2)
    );
    }

    ngAfterViewInit(): void {
    this.list_product.paginator = this.paginator; // <-- STEP (4)
    }
    }

    Вы должны изучить документацию для получения дополнительной информации.

    Столбцы CONCAT с красноречивым Laravel 5

    Считай меня новичком в laravel

    Цель такова: у меня есть два столбца, теперь мне нужно, idчтобы перед ними стоял префикс той component nameже строки в таблице.

    Например (работает)... У меня есть Mysql, например

    SELECT CONCAT(components.name," ", components.id) AS ID
    FROM `components`

    И выход

    Я БЫ

    |TestComp 40 |
    -------------
    |component 41 |
    -------------
    |test 42 |

    Мне нужно то же самое в красноречивом стиле laravel, так как здесь компонент - это имя модели. Итак, я попробовал что-то вроде

    $comp=Component::select("CONCAT('name','id') AS ID")->get()

    но это не работает.
    Я думаю, потому что синтаксис неверен.
    Пожалуйста, помогите мне с правильным синтаксисом. Использование laravel Models.

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

    User::select(DB::raw('CONCAT(last_name, first_name) AS full_name'))


    Решение проблемы

    Вам нужно обернуть ваш запрос в DB::raw:

    $comp = Component::select(DB::raw("CONCAT('name','id') AS ID"))->get()

    Кроме того, обратите внимание, что поскольку вы выполняете свой запрос таким образом, ваша модель может вести себя по-другому, поскольку этот выбор удаляет все другие поля из оператора выбора. Таким образом, вы не можете прочитать другие поля из своей модели без нового запроса. Так что используйте это ТОЛЬКО для ЧТЕНИЯ данных, а не для ИЗМЕНЕНИЯ данных.

    Кроме того, чтобы сделать его хорошим списком, я предлагаю вам изменить свой запрос на:

    $comp = Component::select(DB::raw("CONCAT('name','id') AS display_name"),'id')->get()->pluck('display_name','id');
    // dump output to see how it looks.
    dd($comp);// array key should be the arrray index, the value the concatted value.

    Откройте веб-сайт, нажав на кнопку без перезагрузки всей страницы (AJAX)

    Я хочу сделать кнопку (радио, кнопку или флажок) на своем веб-сайте, чтобы пользователь мог перенаправить на другую страницу без перезагрузки всей страницы, я не профессионал в этом, но у меня мало знаний об AJAX, и единственное, что я знаю заключается в том, что это можно сделать, заменив существующее содержимое «div». Позвольте мне объяснить, чего я хочу здесь добиться: «Допустим, у меня есть три переключателя на моем веб-сайте с ярлыками (Google, YouTube и Facebook). Все, что я хочу сделать, это когда пользователь нажимает кнопку Google, он должен отображать домашнюю страницу Google. оставаясь на той же странице без перезагрузки страницы, и веб-сайт Google должен открываться под переключателями, а остальные кнопки должны делать то же самое».

    <!DOCTYPE HTML>
    <html>
    <style>
    .test1 {
    width: 100%;
    height: 50%;
    }
    </style>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <script>
    $(document).ready(function(){
    $("input").click(function(){
    $("#test").load(location.href = "https://www.google.com");
    });
    });
    </script>
    <div>
    <center><p><strong>Websites:</strong>
    <input type="radio" id="google" name="web">
    <label for="google">Google</label>
    <input type="radio" id="youtube" name="web">
    <label for="youtube">YouTube</label>
    <input type="radio" id="fb" name="web">
    <label for="fb">Facebook</label></p></center>
    </div>
    <div id="test" class="test1">
    //Websites should be loaded here//
    </div>
    </html>

    Требуются мнения экспертов, примеры или демо-версии приветствуются:-)

    Обновление: я добавил свой код, над которым сейчас работаю. В настоящее время при нажатии на любой переключатель будет отображаться домашняя страница Google, но не динамически, потому что я не знаю, как заставить его работать в AJAX.


    Решение проблемы

    Это невозможно, я рассмотрел это для вас

    Единственный способ сделать это — использовать iframe, однако все вышеперечисленные веб-сайты имеют функцию, известную как CORS, которая проверяет, загружается ли веб-сайт из родительского домена или из другого родительского домена. Таким образом, для этого не кажется выполнимым!

    ОБНОВИТЬ

    Вот очень простой пример (очень простой JS) в соответствии с запросом в комментариях. Надеюсь мысль понятна!


     window.addEventListener('load', one);
    document.getElementById("one").addEventListener("click", one);
    document.getElementById("two").addEventListener("click", two);
    document.getElementById("three").addEventListener("click", three);
    function one() {
    ['example2', 'example3'].forEach(function(id) {
    document.getElementById(id).style.display = "none";
    document.getElementById("example1").style.display = "block";
    });
    }
    function two() {
    ['example1', 'example3'].forEach(function(id) {
    document.getElementById(id).style.display = "none";
    document.getElementById("example2").style.display = "block";
    });
    }
    function three() {
    ['example1', 'example2'].forEach(function(id) {
    document.getElementById(id).style.display = "none";
    document.getElementById("example3").style.display = "block";
    });
    }

    .iframe {
    width: 100vw;
    height: 85vh;
    }

     <title>Example</title>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <!-- Bootstrap CSS v5.0.2 -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    <nav class="mt-3 mx-3 text-center">
    <li class="row">
    <ul class="col-md"><button id="one">Example 1</button></ul>
    <ul class="col-md"><button id="two">Example 2</button></ul>
    <ul class="col-md"><button id="three">Example 3</button></ul>
    </li>
    </nav>
    <div id="example1">
    <p>Page 1</p>
    <iframe src="https://example.com" class="iframe" frameborder="0"></iframe>
    </div>
    <div id="example2">
    <p>Page 2</p>
    <iframe src="https://example.com" class="iframe" frameborder="0"></iframe>
    </div>
    <div id="example3">
    <p>Page 3</p>
    <iframe src="https://example.com" class="iframe" frameborder="0"></iframe>
    </div>
    <!-- Bootstrap JavaScript Libraries -->
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js" integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF" crossorigin="anonymous"></script>

    Разрешение URI веб-приложения, зарегистрированного в Azure AD, в хранилище HashiCorp

    В рамках нашей реализации единого входа OIDC в ​​Azure AD и HashiCorp Vault я зарегистрировал приложение в нашей корпоративной Azure AD и предоставил пару разрешенных URI перенаправления в моей конфигурации Terraform, которые соответствуют следующим строкам:

     allowed_redirect_uris="http://localhost:8250/oidc/callback"
    allowed_redirect_uris="https://{hostname.domain}:8200/ui/vault/auth/oidc/oidc/callback"

    Конфигурация terraform предоставляется через конвейер GitLab CI/CD и успешно развертывается. Однако, когда я затем пытаюсь войти в Vault через пользовательский интерфейс (как показано ниже), я получаю всплывающее сообщение об ошибке входа в Microsoft, которое включает следующее:

    AADSTS50011: URI перенаправления 'https://{hostname.domain}/ui/vault/auth/oidc/oidc/callback, указанный в запросе, не соответствует URI перенаправления, настроенным для приложения ' {Azure Tenant Id}'. Убедитесь, что перенаправление............

    введите описание изображения здесь

    Примечание. В URL-адресе, отображаемом в сообщении об ошибке, каким-то образом отсутствует номер порта 8200, который определенно включен в нашу конфигурацию URI перенаправления зарегистрированного приложения Azure AD.

    Я даже пытался удалить этот же номер порта из моего кода Terraform и повторно развернуть его, пытаясь сохранить его в соответствии с ожидаемым URI, указанным в сообщении об ошибке. Тем не менее, это не дало желаемого результата, и я продолжаю получать ту же ошибку.

    Любая идея, в чем может быть проблема?


    Решение проблемы

    Нашел одну из похожих проблем, пожалуйста, проверьте, может ли это помочь.

    Согласно обсуждению в аналогичных проблемах с хранилищем github hashicorp

    Поставщик OIDC хранилища должен проверять URI перенаправления IP-адресов обратной связи в соответствии с разделом 7.3 rfc8252: сервер авторизации ДОЛЖЕН разрешить указывать любой порт во время запроса URI перенаправления IP-замкнутой петли, чтобы приспособить клиентов, которые получают доступный эфемерный порт от операционной системы. системы на момент запроса.

    Это динамическое перенаправление обратной петли Feat/OIDC от paladin-devops hashicorp/vault · GitHub
    обсуждает добавление проверок поставщика OIDC, чтобы разрешить URI перенаправления иметь динамический порт в URI перенаправления, если адрес обратной связи включен в клиент OIDC

    Рекомендации:

  • Проблема с перенаправлением интерфейса петли обратной связи поставщика OIDC — хранилище hashicorp (github)


  • динамическое перенаправление петли hashicorp vault/OIDC by paladin-devops GitHub

  • Кнопка удержания отключена

    Начиная с версии 2021R2, когда я запускаю обработку обновления регистрации, я случайно получаю следующее сообщение

    введите описание изображения здесь

    пока кнопка активна,
    введите описание изображения здесь

    Я попытался ввести следующий код, но он не меняется

     Base.releaseFromHold.SetEnabled(true); 

    Я заметил, что когда я нажимаю на отмену, он снова работает, но когда я ставлю этот код в конце обработки, ничего не происходит

     Base.Actions.Cancel();


    Решение проблемы

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

    В 2022 R1 (и в большинстве, если не во всех 2021 R2, я полагаю) большинство этих условий в стандартном Acumatica находятся в рабочих процессах, которые закодированы на C#, как показано в репозитории кода, обычно с именами файлов, заканчивающимися на _workflow.cs.

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

    Если вы уверены, что это не ошибка в вашем коде, вы можете убедиться, что используете последнюю сборку 2021 R2 (по крайней мере, в тестовом экземпляре, где вы можете воспроизвести проблему), а затем обратиться в службу поддержки Acumatica, если проблема сохраняется.

    Возврат содержимого Stringbuilder

    Тривиально я знаю, но просто интересно

    У меня есть переменная stringbuilder, содержимое которой я хочу вернуть, но если она пуста, я хочу вернуть «|», поэтому лучше всего использовать stringbuilder.tostring в операторе сравнения, например

     If lReturnStringBuilder.ToString = String.Empty Then
    lReturnStringBuilder.Append("|")
    End If
    return lreturnStringBuilder.tostring

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

    Dim lString as string = lReturnStringBuilder.ToString
    if lString = string.empty then
    lstring = "|"
    end if
    return lString


    Решение проблемы

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

    Dim result = If(lReturnString.Length = 0, "|", lReturnString.ToString())

    Это избавляет от ненужного преобразования пустого StringBuilder в строку (или последующего вызова Append, что определенно не требуется). Обратите внимание на использование встроенного оператора If (VB 9.0), который не оценивает оба оператора ни в одном случае, так как это языковая конструкция, а не функция (полностью эквивалентная обычному оператору If с присваиванием переменных).

    Один и тот же компонент Vue.js на двух вкладках браузера заставляет <select> отражать выбранные значения

    У меня есть приложение Vue, использующее vue-router и несколько компонентов, отображаемых в x-templates. В одном из этих шаблонов разметки у меня есть объект <select>. Когда я открываю эту страницу на двух отдельных вкладках в одном и том же сеансе браузера, измененный выбор на одной вкладке отражается на другой вкладке. Сначала я подумал, что дело в данных и методах, но потом я добавил совершенно ванильный <select> с несколькими <option> в нем, без привязок, данных, обработчиков событий или чего-то еще — и он ведет себя так же! Когда я выбираю параметр на одной вкладке, он выбирает то же самое на другой. То же самое для других объектов <select> в том же приложении.

    Я не могу это объяснить. Что мне не хватает? Нужно ли поддерживать сеансы, чтобы избежать этого? Если да, то как?

    Изменить: теперь мне очевидно, что все объекты ведут себя одинаково и отражаются между сеансами. Это должно быть по дизайну, но как мне сделать, чтобы отделить его с помощью хорошего шаблона в Vue.js?

    App.js

    Vue.use(VueRouter)
    const router = new VueRouter({
    mode: 'history',
    base: "/",
    routes: [
    {
    path: '/',
    name: "start",
    component: Start,
    },
    {
    path: '/character/view/:guid',
    name: "character.view",
    component: ViewCharacter,
    }
    ]
    })
    new Vue({
    router,
    el: '#app',
    data: function() {
    return {
    baseUri: "/"
    }
    },
    computed: {
    }
    })

    HTML

    <html>
    ....
    <script type="text/x-template" id="template-character-sheet">
    <div>
    <select>
    <option>1</option>
    <option>2</option>
    </select>
    </script>
    ...
    <script src="/components/ViewCharacter.js"></script>
    <script src="/components/App.js"></script>
    ...
    </html>

    ViewCharacter.js (штуки)

    const ViewCharacter = {
    template: "#template-character-sheet",
    components: {
    "navigation": Navigation
    },
    data: function() {
    return {
    properties: values,
    .......
    }
    },
    computed: {
    current_stability: function() {
    return this.rules.stability_levels.filter(o => o.level == this.character.stability)[0];
    },
    .......
    },
    .......
    }


    Решение проблемы

    [Не проверено]

    Я думаю, что ваша проблема одинакова :keyв обоих ваших <select>, попробуйте добавить сгенерированный ключ, чтобы решить проблему.

    Документы: https://v3.vuejs.org/guide/migration/key-attribute.html.

    Проблема при обновлении фрагмента кода с firebase v8 до firebase v9

    Я хочу изменить это ниже кода Firebase V8 на Firebase V9. Я пытался изменить этот код на v9 несколькими способами, но, к сожалению, все они были неудачными:

    Пожалуйста, помогите мне изменить блок кода ниже на код на основе Firebase v9:

    useEffect(() => {
    const unsubscribe = db.collection("chats").onSnapshot((snapshot) => {
    setChats(
    snapshot.docs.map((doc)=>({
    id:doc.id,
    data: doc.data(),
    }))
    )
    );
    return unsubscribe;
    }, [])

    Заранее спасибо:)


    Решение проблемы

    И collection()onSnapshot()это функции верхнего уровня в Firebase v9 SDK, которые можно напрямую импортировать из Firestore SDK. Попробуйте выполнить рефакторинг кода, как показано ниже:

    import { collection, onSnapshot } from "firebase/firestore";
    useEffect(() => {
    const colRef = collection(db, "chats")
    onSnapshot(colRef, (snapshot) => {
    setChats(
    snapshot.docs.map((doc) => ({
    id: doc.id,
    data: doc.data(),
    }))
    )
    });
    return unsubscribe;
    }, [])

    Также проверьте:
    Firestore: Каков шаблон добавления новых данных в Web v9?

    В документации есть примеры кода, написанного как с синтаксисом V8, так и с синтаксисом V9, поэтому вы можете просто переключать вкладки Version 9 (Modular)и сравнивать его с предыдущим Version 8 (namespaced)синтаксисом.

    Двоичное дерево toString печатает хэш-код даже после переопределения

    Я сделал программу, которая вставляет символы (буквы) в двоичное дерево поиска. Я не сталкиваюсь с какими-либо ошибками, но когда я вызываю метод toString, он печатает только хэш-код BST@568db2f2. Возможно, я что-то упустил из виду, поэтому буду очень признателен, если вы мне поможете. Спасибо!

    Ожидаемый результат (не точный результат, но в этом формате)
    ht=2 [K=A L=[K=B R=[K=C]] R=[K=D L=[K=E]]]

    метод toString

    public String toString(BTNode<T> n)
    {
    String s = "";

    if (n == null)
    {
    return "";
    }

    if (n!= null)
    {
    s = "ht=" + height + "[K=" + n.info;

    if (n.left!= null)
    {
    s = s + "L=" + toString(n.left) + "]";
    }
    if (n.right!= null)
    {
    s = s + "R=" + toString(n.right) + "]";
    }
    }
    return s;
    }

    Основной класс

    public static void main(String args[]) 
    {
    BST<Character> bst = new BST<>(); // instantiate BST object

    // insert values to bst
    bst.insert('A');
    bst.insert('B');
    bst.insert('C');
    bst.insert('D');
    bst.insert('E');
    bst.insert('F');

    // print bst1
    System.out.println(bst.toString());
    }


    Решение проблемы

    Вы должны написать метод с точной подписью public String toString()в BTNode.

    Писать public String toString(BTNode<N>)ничего не дает.

    Как правильно вставить эти значения в базу данных?

    У меня есть имя файла log.txt

    Структура у него примерно такая:

    2022-04-28 22:33:02,290\\INFO\\Database connection established
    2022-04-28 22:33:07,470\\INFO\\Files concatenation
    2022-04-28 22:33:09,708\\INFO\\Table xxx_xxx created

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

    with open("test.log",'r') as data_file:
    values = [line.split("\\") for line in data_file]
    engine.execute('INSERT INTO control (log_date, debugType, messa) VALUES (%s, %s, %s)', values)

    Когда я печатаю значения, которые будут переданы в базу данных, это выглядит так:

    [['2022-04-28 22:33:02,290', '', 'INFO', '', 'Database connection established\n'], ['2022-04-28 22:33:07,470', '', 'DEBUG', '', 'Files concatenation\n'], ['2022-04-28 22:33:09,708', '', 'DEBUG', '', 'Table xxx_xxx created\n'],...]

    Прежде всего, я хочу исключить значение, которое следует за запятой после метки времени (например, в первой строке: '2022-04-28 22:33:02,290', я хочу удалить ,290.

    Я также хочу избавиться от пустых строк, где был \\.

    Можете вы помочь мне?


    Решение проблемы

    Кажется, что в вашем файле есть дополнительные символы, поэтому вы получаете эти пустые строки. Наивное и жадное решение:

    final_list = []
    with open("test.log",'r') as data_file:
    for line in data_file:
    line_list = line.rstrip('\n').split("\\")
    line_list[0] = line_list[0][:-4]
    final_list = list(filter(lambda l: l!= '', line_list))
    final_list.append(final_line)

    Если у вас есть список (вы завершили чтение и анализ списка), вы можете применить те же самые вещи:

  • Чтобы удалить '', просто выполните фильтрацию в каждом списке.

  • final_list = [ list(filter(lambda l: l!= '', inside_l)) for inside_l in whole_list]

  • чтобы удалить последние три элемента из строки, просто выполните string[:-4] итерацию по всему списку, получите первый элемент и примените нарезку

  • for inside_list in final_list:
    inside_list[0] = inside_list[0][:-4]

    Возникли трудности с сопряжением с устройством Bluetooth OBDII в Ubuntu

    Я пытаюсь соединиться с автомобильным Bluetooth-устройством OBDII от Beaglebone Black под управлением Ubuntu Linux, и мне не очень повезло.

    Сначала я смог настроить hci0 с помощью bluez-simple-agent, хотя он никогда не запрашивал у меня PIN-код. PIN-код для этого устройства должен быть «1234». Теперь, когда я запускаю bluez-simple-agent, я получаю следующее:

    ubuntu@ubuntu-armhf:/etc/bluetooth$ sudo bluez-simple-agent hci0 00:0D:18:A0:4E:35
    Creating device failed: org.bluez.Error.AlreadyExists: Already Exists

    Что было бы хорошо, если бы оно работало, но когда я пытаюсь выполнить привязку с помощью rfcomm, я неоднократно получаю сообщение «Не удается подключить сокет RFCOMM: неверный обмен» (первый раз после перезапуска устройства), а затем «Не удается подключить сокет RFCOMM».: Отказ в соединении" каждый раз после этого.

    Это мой файл /etc/bluetooth/rfcomm.conf:

    rfcomm0 {
    # Automatically bind the device at startup
    bind no;
    # Bluetooth address of the device
    device 00:0D:18:A0:4E:35;
    # RFCOMM channel for the connection
    channel 16;
    # Description of the connection
    comment "OBDII";
    }

    И запуск «rfcomm bind 0» успешно создает устройство в /dev/rfcomm0:

    rfcomm0: 00:0D:18:A0:4E:35 channel 16 clean 

    Однако, пытаясь прочитать из /dev/rfcomm0, я получаю следующее:

    ubuntu@ubuntu-armhf:/etc/bluetooth$ sudo cat /dev/rfcomm0
    cat: /dev/rfcomm0: Invalid exchange
    ubuntu@ubuntu-armhf:/etc/bluetooth$ sudo cat /dev/rfcomm0
    cat: /dev/rfcomm0: Connection refused
    ubuntu@ubuntu-armhf:/etc/bluetooth$

    И после этого rfcomm возвращает это:

    ubuntu@ubuntu-armhf:/etc/bluetooth$ rfcomm
    rfcomm0: 00:0D:18:A0:4E:35 channel 16 closed

    Я думаю, что использую правильный канал (16), основываясь на результате «записей sdptool».

    ubuntu@ubuntu-armhf:/etc/bluetooth$ sudo sdptool records 00:0D:18:A0:4E:35 
    ...
    Protocol Descriptor List:
    "L2CAP" (0x0100)
    "RFCOMM" (0x0003)
    Channel: 16
    Profile Descriptor List:
    "Serial Port" (0x1101)
    Version: 0x0100

    Любая помощь будет принята с благодарностью, потому что на данный момент у меня нет идей.

    Ссылки:


    • рфкомм

    • Вручную с помощью Bluetooth RFCOMM

    • Как настроить Bluetooth Последовательное соединение через Bluetooth

    • Устройство



    Решение проблемы

    Я знаю, что это немного поздно, но, поскольку я здесь, возможно, есть другие люди, которые борются с этим, поэтому я опубликую то, что сработало для меня, используя, как я полагаю, то же самое устройство (OBDII ELM327 Blue Connector).

    [ИСПОЛЬЗОВАНИЕ BBB С DEBIAN WHEEZY]

  • У меня есть следующий файл rfcomm.conf под/etc/bluetooth/

  • rfcomm0 {
    bind yes;
    device AA:BB:CC:DD:EE:FF; # Remote device's MAC
    channel 16;
    comment "OBDII";
    }

  • # rfcomm connect rfcomm0

  • Каждый раз, когда BBB подключается к устройству, кажется, что он сохраняет свою конфигурацию в /var/lib/bluetooth/XX:XX:XX:XX:XX:XX(MAC-адрес ключа Bluetooth, полученный с помощью hcitool dev)

  • Что я делаю, чтобы убедиться, что он будет подключен в следующий раз, я удаляю все содержимое /var/lib/bluetooth/XX:XX:XX:XX:XX:XXпапки с заданием cron при загрузке, добавляя следующую строку в cron, используя crontrab -eкоманду " " на консоли

  • $ @reboot rm /var/lib/bluetooth/*

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

    Я знаю, что это немного сложно, и я не знаю, насколько хорошо или плохо удаление папки Bluetooth, но это работает для меня, если у вас есть какие-либо другие комментарии или предложения, пожалуйста, дайте мне знать.

    Тип литерала TypeScript не вычисляется [закрыто]

    Закрыто. Этот вопрос нуждается в деталях или ясности. В настоящее время ответы не принимаются.


    Решение проблемы

    TypeScript недостаточно умен, чтобы понять, что Math.abs()будет возвращаться 1при задании -1или 0при задании 0. Все, что он знает, это то, что возвращаемый тип Math.abs()является numberи numberне расширяет возвращаемый тип Nфункции test_3.

    Поэтому, если вы сообщите TypeScript, что вы уверены, что Math.abs()он возвращает элемент Nas N), TypeScript не покажет ошибку.

    Почему scapy использует неправильный исходный mac-адрес с 'sendp()'

    Я использую функцию sendp()в scapy для отправки некоторых сообщений на уровне 2. Мой компьютер имеет 6 интерфейсов LAN, и я указываю один интерфейс (enp2s0f0) в файле sendp().

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

     packet = Ether(dst='ff:ff:ff:ff:ff:ff', type = 0x8011 )
    packet = packet / msg
    sendp(packet, iface='enp2s0f0')

    MAC-адрес от enp2s0f0: \**:\**:\**:4b:3c:00. Wireshark показывает исходный адрес из отправленного пакета \*\*:\**:\**:4b:3c:01. Это тоже действующий mac-адрес с интерфейса моего пк, но на этом порту ничего не подключено.

    Как я могу заставить scapy использовать правильный исходный адрес?


    Решение проблемы

    Из чтения документации: вы можете попробовать сConf(iface='enp2s0f0')

    Отключение большого количества столбцов в BigQuery и BigTable

    Решение проблемы

    В общем, вы настраиваете себя на мир боли, когда пытаетесь запросить базу данных NoSQL (например, BigTable) с помощью SQL. Разложение данных — очень затратная операция в SQL, потому что вы эффективно выполняете перекрестное соединение (которое означает «многие ко многим») каждый раз, когда вызывается UNNEST, поэтому попытка сделать это более 600 раз даст вам либо тайм-аут запроса, либо огромный счет.

    API BigTable будет намного эффективнее, чем SQL, поскольку он предназначен для запросов к структурам NoSQL. Распространенным шаблоном является наличие сценария, который выполняется ежедневно (например, сценарий Python в облачной функции) и использует API для получения данных за этот день, их анализа и последующего вывода в файл в облачном хранилище. Затем вы можете запрашивать эти файлы через BigQuery по мере необходимости. Ежедневный сценарий, который перебирает все столбцы ваших данных, не требуя обширных преобразований данных, обычно дешев и, безусловно, дешевле, чем попытка принудительно выполнить его через SQL.

    При этом, если вы действительно настроены на использование SQL, вы можете использовать JSON-функции BigQuery для извлечения необходимых вам вложенных данных. Трудно визуализировать вашу структуру данных без демонстрационных данных, но вы можете прочитать всю строку как один столбец JSON или строку. Затем, если у вас есть предсказуемый путь для значений, которые вы хотите извлечь, вы можете использовать функцию, например JSON_EXTRACT_STRING_ARRAY, для извлечения всех этих значений в массив. Точно так же можно использовать функцию Regex. Но если вам нужно выполнить такой анализ всей таблицы, чтобы запросить ее, пакетное задание для предварительного преобразования данных все же будет намного эффективнее.

    Получить строку с первыми 10 пустыми ячейками в таблице Excel

    Я создаю приложение vb.net для обновления таблицы Excel. Я получаю доступ к файлу Excel, используя Imports Microsoft.Office.Interop.

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

    sheet.Cells(3, 3) = mystring

    Мне нужно перебрать каждую строку, чтобы найти первую строку, в которой каждая из первых 10 ячеек (AJ) не содержит данных, поэтому я могу обновить эти ячейки. Мне нужно сделать это таким образом, поскольку столбцы K и далее могут содержать другие данные, поэтому я не могу проверить целые пустые строки.

    Моя попытка началась с простой проверки ячейки A в каждой строке для начала, пытаясь определить пустую/пустую ячейку. Если бы это сработало, я бы подумал об использовании цикла for внутри цикла do while, чтобы перемещаться по ячейкам в строке.

    Используя следующий код, я получаю окно сообщения с указанием «System.__ComObject».

    Dim rowcount As Integer = 0
    Dim emptyrowfound As Boolean = False
    Do While emptyrowfound = False
    rowcount += 1
    MessageBox.Show(sheet.Cells(rowcount, 1).ToString) ' attempt to view cell contents for testing purposes
    If sheet.Cells(rowcount, 1).ToString = "" Then ' attempt to test if cell is blank/empty
    emptyrowfound = True
    End If
    Loop

    После работы я намерен применить обновления ячеек, например:

    sheet.Cells(rowcount, 3) = mystring
    ...

    Может ли кто-нибудь предложить лучший способ проверки и получения номера строки?


    Решение проблемы

    Во-первых, я бы сделал свою проверку, начав с 10-го столбца и работая влево для каждой строки, используя Rangeобъект. Вы можете использовать Range.End(xlleft)для проверки всех ячеек слева от указанной ячейки - она ​​остановится на первой непустой ячейке, которая, как вы ожидаете, будет в первом столбце. Затем вы сможете использовать это Range.Rowсвойство для возврата номера строки нужной ячейки.

    как завершить цикл, когда команда заканчивается

    У меня есть этот bash-скрипт:

    #!/bin/bash
    if [ "$#" -eq 4 ]
    then
    rep_origine="$1"
    rep_dest="$2"
    temps_exec="$3"
    temps_refr="$4"
    else
    echo "Usage: $0 [files directory] [destination directory] [execution time$
    exit 2
    fi
    cp -R "$rep_origine" "$rep_dest" &
    cp_process="$!"
    while [ "$cp_process" -eq "$!" ]
    do
    cp_process="$!"
    sleep "$temps_exec"; kill -STOP "$cp_process"
    sleep "$temps_refr"; kill -CONT "$cp_process"
    done

    Я хотел бы, чтобы мой цикл заканчивался, когда заканчивается команда cp. Поэтому я поставил, что когда последний PID не совпадал с PID cp, цикл должен завершаться, но он не работает.

    Я не понимаю, как указать, что цикл должен заканчиваться, когда заканчивается команда cp.


    Решение проблемы

    Я бы использовал killсигнал без вреда, 0чтобы проверить, жив ли процесс:

    while kill -0 $cp_process 2>/dev/null
    do
    # work indicator:
    echo -n '.'
    sleep 1
    done

    Если цель состоит в том, чтобы временно остановить процесс в цикле:

    while kill -STOP $cp_process 2>/dev/null
    do
    # do work while the process is stopped here
    kill -CONT $cp_process
    # give the process execution time:
    sleep $temps_exec
    done

    Разделите овал/круг на 4 равные половины и отобразите в нем разные цвета с помощью апплета [JAVA]

    Я новичок в программировании апплетов, и у меня есть задание разделить овал/круг на 4 равные половины и отобразить в нем разные цвета с помощью апплета [JAVA].

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

    import java.applet.*;
    import java.awt.*;
    /*<applet code = "oval.class" width = 300 height = 300> </applet>*/
    public class oval extends Applet {
    public void init() {
    }
    public void paint(Graphics g) {
    g.drawOval(100, 100, 200, 200);
    g.setColor(Color.orange);
    g.drawLine(100, 200, 300, 200);
    g.fillColor(Color.blue);
    g.drawLine(200, 100, 200, 300);
    }}

    он окрашивает только линию


    Решение проблемы

    Итак, я наконец понял, что я делаю неправильно, я должен был использовать « дуги » вместо « овал ». Вот простой код на вопрос, который я задал.

    import java.applet.*;
    import java.awt.*;
    /*
    <applet code = "oval.class" width = 400 height = 400> </applet>
    */
    public class oval extends Applet {
    public void init() {
    }
    public void paint(Graphics g) {
    g.setColor(Color.orange);
    g.fillArc(100,100,200,200,0,90);
    g.setColor(Color.red);
    g.fillArc(100,100,200,200,90,90);
    g.setColor(Color.yellow);
    g.fillArc(100,100,200,200,180,90);
    g.setColor(Color.blue);
    g.fillArc(100,100,200,200,270,90);
    }
    }

    введите описание изображения здесь

    Элементы не могут быть получены, внутренняя ошибка сервера [Heroku - GitHub Integration] [дубликат]

    На этот вопрос уже есть ответы здесь:


    Решение проблемы

    Для тех, кто использует эту интеграцию для целей развертывания, я предлагаю вам использовать Heroku-cli для развертывания, пока они решают свою проблему.

    https://devcenter.heroku.com/articles/heroku-cli

    Вы успешно использовали GPGPU? [закрыто]

    Закрыто. Этот вопрос основан на мнении. В настоящее время ответы не принимаются.


    Решение проблемы

    Я занимаюсь разработкой gpgpu с потоковым SDK ATI вместо Cuda. Какой прирост производительности вы получите, зависит от множества факторов, но самым важным из них является числовая интенсивность. (То есть отношение вычислительных операций к обращениям к памяти.)

    Функция BLAS level-1 или BLAS level-2, такая как добавление двух векторов, выполняет только 1 математическую операцию для каждых 3 ссылок на память, поэтому NI равен (1/3). Это всегда работает медленнее с CAL или Cuda, чем просто на процессоре. Основная причина — время, необходимое для передачи данных от процессора к графическому процессору и обратно.

    Для такой функции, как БПФ, требуется O(N log N) вычислений и O(N) обращений к памяти, поэтому NI равен O(log N). Если N очень велико, скажем, 1 000 000, вероятно, будет быстрее сделать это на графическом процессоре; Если N мало, скажем, 1000, это почти наверняка будет медленнее.

    Для функции BLAS level-3 или LAPACK, такой как LU-разложение матрицы или поиск ее собственных значений, требуется O(N^3) вычислений и O(N^2) обращений к памяти, поэтому NI равен O(N). Для очень маленьких массивов, скажем, N составляет несколько баллов, это все равно будет быстрее делать на процессоре, но по мере увеличения N алгоритм очень быстро переходит от привязки к памяти к привязке к вычислениям, и прирост производительности на графическом процессоре очень возрастает. быстро.

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


    (источник: earthlink.net )

    Вот производительность CGEMM — сложное матричное умножение с одинарной точностью, выполненное на Radeon 4870.

    Как использовать Powershellscript в классическом конвейере выпуска Azure — файл сценария, хранящийся в защищенном файле Azure Devops

    Я использую пользовательское расширение сценария для виртуальной машины в шаблоне ARM:

     {
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "name": "[concat(parameters('vm-Name'),'-0',copyIndex(1),'/script')]",
    "apiVersion": "2015-05-01-preview",
    "location": "[resourceGroup().location]",
    "copy": {
    "name": "storagepoolloop",
    "count": "[parameters('virtualMachineCount')]"
    },
    "dependsOn": [
    "virtualMachineLoop",
    "nicLoop"
    ],
    "properties": {
    "publisher": "Microsoft.Compute",
    "type": "CustomScriptExtension",
    "typeHandlerVersion": "1.4",
    "settings": {
    "fileUris": [
    ],
    "commandToExecute": "[parameters('commandToExecute')]"
    }
    }
    }

    где параметры = "powershell.exe $(Agent.TempDirectory)/$(script.secureFilePath)"

    Я использую безопасные файлы azure devops для хранения своего скрипта. У меня есть задача «Загрузить безопасный файл» перед развертыванием vm. Я также пытался напрямую ссылаться на имя файла сценария «powershell.exe $(Agent.TempDirectory)/puscript.ps1»

    Я использую классический конвейер выпуска, если это не так, пожалуйста, объясните, как использовать скрипт powershell, хранящийся в защищенных файлах.

    Любая помощь приветствуется. Заранее спасибо.


    Решение проблемы

    Вы можете попробовать, как показано ниже:

  • Используйте задачу «Загрузить защищенный файл», чтобы загрузить файл сценария PowerShell. В задаче задайте имя ссылки для использования.

    введите описание изображения здесь


  • Используйте задачу PowerShell (или задачу Azure PowerShell ) для выполнения сценария PowerShell.

    введите описание изображения здесь


  • Если вы хотите выполнить сценарий PowerShell для запуска развертывания шаблона ARM, вы можете использовать задачу Azure PowerShell.

    Заполните дату в определенном столбце и строке на основе значения ячейки

    Я получил запрос на ввод даты на основе выбранного статуса (значение ячейки) в столбце, представляющем этот статус. Например, если я выбираю статус «Событие_1» в столбце А из раскрывающегося списка, макрос должен найти столбец с таким же именем (Событие_1) и указать дату в этом столбце для строки, в которой статус был изменен.

    введите описание изображения здесь

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

    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim ColNum As Integer

    With Target
    If.Count > 1 Then Exit Sub
    If Not Intersect(Range("A:A"),.Cells) Is Nothing Then
    Application.EnableEvents = False
    If IsEmpty(.Value) Then
    .Offset(0, 1).ClearContents
    Else
    With.Offset(0, 1)
    .NumberFormat = "dd mmm yyyy"
    .Value = Now
    End With
    End If
    Application.EnableEvents = True
    End If
    End With
    End Sub


    Решение проблемы

    Как насчет этого?

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ColNum As Integer
    With Target
    If.Count > 1 Then Exit Sub
    If Not Intersect(Range("A:A"),.Cells) Is Nothing Then
    Application.EnableEvents = False
    If IsEmpty(.Value) Then
    '.Offset(0, 1).ClearContents
    'Why???
    Else
    ColNum = Application.WorksheetFunction.Match(Target.Value, Range("1:1"), 0)
    With.Offset(0, ColNum - 1)
    .NumberFormat = "dd mmm yyyy"
    .Value = Now
    End With
    End If
    Application.EnableEvents = True
    End If
    End With
    End Sub

    Единственная часть, которую я не понимаю, это:

    If IsEmpty(.Value) Then
    .Offset(0, 1).ClearContents

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

    Terraform/atlantis создает блокировки без видимой причины

    Я установил Atlantis и настроил несколько файлов projects.

    Я не использую workspaces(поэтому для каждого проекта defaultдолжно быть применимо только рабочее пространство).

    Однако при создании запроса на вытягивание GitHub, который включает изменения в несколько проектов, я получаю следующие ошибки:

    каталог: terragrunt/path1/to/something рабочая область: по умолчанию

    The default workspace is currently locked by another command that is running for this pull request.
    Wait until the previous command is complete and try again.
    dir: terragrunt/path1/to/anotherthing workspace: default

    dir: terragrunt/path2/to/anotherthing рабочая область: по умолчанию

    The default workspace is currently locked by another command that is running for this pull request.
    Wait until the previous command is complete and try again.

    И это несмотря на то, что в документах указано:

    Заблокированы только каталог в репозитории и рабочая область Terraform, а не весь репозиторий.

    Любая идея, почему это происходит?


    Решение проблемы

    Я видел что-то подобное после установки

    parallel_plan: true
    parallel_apply: true

    в моем atlantis.yaml.

    Удаление их устранило проблему для меня, и я предполагаю, что их установка falseприведет к тому же результату.

    Я не на 100% понимаю, ПОЧЕМУ это происходит, но, похоже, это как-то связано с тем, как Atlantis блокирует и взаимодействует с рабочими пространствами терраформирования, поскольку рабочее пространство по умолчанию называется, defaultи кажется, что Atlantis блокирует, может быть связано с именем рабочего пространства..

    Похоже, вы уже сообщали о проблеме здесь, и что сопровождающие ответили, что есть объединенное, но в настоящее время (2002-04-29) невыпущенное исправление.

    Надеюсь, это поможет другим, кто случайно наткнулся на это...

    Как увидеть всех людей, которые нажали «Нравится»?

    Есть ли способ увидеть, кто нажал на КНОПКУ FACEBOOK Like?

    В окне настроек http://developers.facebook.com/docs/reference/plugins/like я могу проверить Show faces option, но тогда я могу видеть, кто из моих друзей нажал Likeкнопку, но я хочу видеть всех людей, которые нажали Like.

    Есть ли вариант?


    Решение проблемы

    show_faces показывает только лица ваших друзей, которым понравилась та же страница/объект. Он не будет показывать лица не друзей, которым понравился объект/страница.

    Странный вывод при преобразовании SVG в PDF пример javascript mermaid.js

    Я пытаюсь вывести этот SVG в pdf. SVG генерируетсяmermaid.js

    Я нашел существующий ответ в стеке для преобразования SVG в PDF. В этом ответе определена функция, downloadPDFкоторая преобразует SVG в PDF и запускает загрузку PDF.

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

    Вот минимальный пример:

    <!DOCTYPE html>
    <html lang="en" style="height: auto;">
    <head>
    </head>
    <body>
    <div class="mermaid">
    graph TD;
    A-->B;
    A-->C;
    B-->D;
    C-->D;
    </div>
    </body>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/mermaid/8.13.4/mermaid.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/pdfkit@0.10.0/js/pdfkit.standalone.js"></script>
    <script src="https://bundle.run/blob-stream@0.1.3"></script>
    <script src="https://cdn.jsdelivr.net/npm/svg-to-pdfkit@0.1.8/source.js"></script>
    <script>
    mermaid.init({
    flowchart: { useMaxWidth: false },
    "theme": "default",
    "themeVariables": {
    "fontFamily": "Helvetica"
    }
    }, document.querySelectorAll(".mermaid"));
    </script>
    <script>
    function downloadPDF(svg, outFileName) {
    let doc = new PDFDocument({compress: false});
    SVGtoPDF(doc, svg, 0, 0);
    let stream = doc.pipe(blobStream());
    stream.on('finish', () => {
    let blob = stream.toBlob('application/pdf');
    const link = document.createElement('a');
    link.href = URL.createObjectURL(blob);
    link.download = outFileName + ".pdf";
    link.click();
    });
    doc.end();
    }
    var svg = document.querySelector('svg');
    </script>

    Чтобы создать PDF, вставьте это в консоль разработки браузера:downloadPDF(svg, "test")

    Вот изображение svg, созданное на минимальном примере:
    Исходный SVG

    Вот вывод изображения из downloadPDFфункции (запускается downloadPDF(svg, "test")в консоли разработки браузера):

    pdf из SVG

    Примечание. Такой же результат я получаю в браузерах Firefox и Edge.

    Обновление: я отредактировал функцию загрузки PDF, и теперь я правильно получаю цвета, однако текст узла по-прежнему не отображается:

    function downloadPDF(svg, outFileName) {
    let doc = new PDFDocument({compress: false});
    SVGtoPDF(doc, svg, 0, 0, {useCSS:true});
    let stream = doc.pipe(blobStream());
    stream.on('finish', () => {
    let blob = stream.toBlob('application/pdf');
    const link = document.createElement('a');
    link.href = URL.createObjectURL(blob);
    link.download = outFileName + ".pdf";
    link.click();
    });
    doc.end();
    }

    Новый вывод в формате PDF без текста узла:

    введите описание изображения здесь

    Если бы кто-нибудь мог помочь разобраться с текстовой частью узла, я был бы очень признателен!

    Обновление 2: Итак, я заметил, что если я изменю ForeignObject в узлах svg на <text>элементы и удалю div, я получу текст, но теперь проблема в том, что текст смещен, и я понятия не имею, сохранит ли это шрифты.

    Ниже я беру каждый узел svg и использую replaceAll для изменения innerHTML узлов.

    for(i = 0; i< svg.getElementsByClassName("node").length; i++){
    svg.getElementsByClassName("node")[i].innerHTML = svg.getElementsByClassName("node")[i].innerHTML.replaceAll("<div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: inline-block; white-space: nowrap;\">", "").replaceAll("</div>", "").replaceAll("foreignObject", "text");
    }
    downloadPDF(svg, "test")


    Решение проблемы

    Я подозреваю, что в модуле рендеринга печати есть какая-то ошибка рендеринга, поскольку вызов SVG и ответ Mermaid кажутся идеальными, плюс встроенный SVG для чтения и печати также выглядит хорошо и правильно. Итак, ваш первоначальный код (с небольшой необходимой строкой @media) выглядит как PDF.

    введите описание изображения здесь

    Точно так же образец Evo отлично визуализируется с использованием того же метода, но в этом случае допускается использование по умолчанию системной бумаги, например, 8,5x11 (Letter).

    "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --headless --run-all-compositor-stages-before-draw --print-to-pdf-no-header --print-to-pdf="C:\Users\WDAGUtilityAccount\desktop\svg-example.pdf" https://www.evopdf.com/DemoAppFiles/HTML_Files/SVG_Examples.html & timeout 5 & svg-example.pdf

    введите описание изображения здесь

    Чтобы уменьшить размер носителя по умолчанию в Chrome, мне пришлось добавить в ваш<head>

    <head>
    <meta http-equiv="Content-Style-Type" content="text/css">
    <style>@media print { @page { margin: 0; size: 125px 238px; } body { margin: 0; } }</style>
    </head>

    и вы заметите, что из-за небольшой ошибки округления в математике медиа размер должен быть немного больше, чем SVG viewBox="0 0 124.63749694824219 231.20001220703125" как ни странно в этом случае просто округлить ширину, но 6 дополнительных единиц в высоту!

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

    Как преобразовать datetime.time из UTC в другой часовой пояс?

    У меня есть переменная, которая содержит время типа datetime.time в UTC, я хотел, чтобы она была преобразована в какой-то другой часовой пояс.

    мы можем преобразовать часовые пояса в экземпляре datetime.datetime, как показано в этой ссылке SO. Как преобразовать местное время в UTC в Python?. Я не могу понять, как конвертировать часовые пояса в экземпляры datetime.time. Я не могу использовать astimezone, потому что datetime.time не имеет этого метода.

    Например:

    >>> t = d.datetime.now().time()
    >>> t
    datetime.time(12, 56, 44, 398402)
    >>>

    Мне нужно 't' в формате UTC.


    Решение проблемы

    Есть четыре случая:

  • ввод datetime.timeустановлен tzinfo(например, OP упоминает UTC)
  • вывод как ненаивное время

  • вывод как простое время ( tzinfoне задано)


  • ввод datetime.timeне tzinfoустановлен
  • вывод как ненаивное время

  • вывод как простое время ( tzinfoне задано)


  • Правильный ответ должен использовать datetime.datetime.timetz()функцию, потому что datetime.timeне может быть построен как ненаивная метка времени путем вызова localize()или astimezone()напрямую.

    from datetime import datetime, time
    import pytz
    def timetz_to_tz(t, tz_out):
    return datetime.combine(datetime.today(), t).astimezone(tz_out).timetz()
    def timetz_to_tz_naive(t, tz_out):
    return datetime.combine(datetime.today(), t).astimezone(tz_out).time()
    def time_to_tz(t, tz_out):
    return tz_out.localize(datetime.combine(datetime.today(), t)).timetz()
    def time_to_tz_naive(t, tz_in, tz_out):
    return tz_in.localize(datetime.combine(datetime.today(), t)).astimezone(tz_out).time()

    Пример на основе требования OP:

    t = time(12, 56, 44, 398402)
    time_to_tz(t, pytz.utc) # assigning tzinfo= directly would not work correctly with other timezones
    datetime.time(12, 56, 44, 398402, tzinfo=<UTC>)

    В случае, если требуется наивная временная метка:

    time_to_tz_naive(t, pytz.utc, pytz.timezone('Europe/Berlin'))
    datetime.time(14, 56, 44, 398402)

    Случаи, когда экземпляр time() уже tzinfoустановлен, проще, потому что datetime.combineон выбирает tzinfoиз переданного параметра, поэтому нам просто нужно преобразовать его в tz_out.

    Объект pyodbc.Cursor не имеет атрибута fast_executemany.

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

    'pyodbc.Cursor'объект не имеет атрибута'fast_executemany'

    Я использую


    • Питон 2.7

    • База данных SQL-сервера AZURE

    • pyodbc==4.0.24


    Веб-приложение хранится в Azure.


    Решение проблемы

    Azure предоставляет нам учебник о том, как использовать Python для подключения к базе данных Azure SQL и использовать инструкции Transact-SQL для запроса данных.

    И если мы хотим использовать fast_executemanyатрибут, мы должны установитьcursor.fast_executemany = True

    Мы можем изменить образец следующим образом:

    import pyodbc
    server = '<server>.database.windows.net'
    database = '<database>'
    username = '<username>'
    password = '<password>'
    driver= '{ODBC Driver 17 for SQL Server}'
    cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password)
    cursor = cnxn.cursor()
    cursor.fast_executemany = True
    cursor.execute("SELECT TOP 20 pc.Name as CategoryName, p.name as ProductName FROM [SalesLT].[ProductCategory] pc JOIN [SalesLT].[Product] p ON pc.productcategoryid = p.productcategoryid")
    row = cursor.fetchone()
    while row:
    print (str(row[0]) + " " + str(row[1]))
    row = cursor.fetchone()

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

    Надеюсь, это поможет вам.

    Как реализовать это объявление функции или выражение функции с помощью функции стрелки? [закрыто]

    Закрыто. Этот вопрос нуждается в деталях или ясности. В настоящее время ответы не принимаются.


    Решение проблемы

    Вот как это сделать:

    for (let i = 0; i < qn.length; i++) {
    qn[i].addEventListener("click", () => qn[i].classList.toggle("active"));
    }

    Несовместимость типа интерфейса Delphi

    Что я пытаюсь сделать, так это добавить общие методы к этим двум классам, которые имеют одного и того же косвенного предка.

    IMyMethods = interface
    procedure SomeMethod;
    end;
    TMyADODataset =class(TADODataset, IMyMethods) // ADO
    public
    procedure SomeMethod;
    end;
    TMyUniDataset =class(TUniTable, IMyMethods) // UniDAC
    public
    procedure SomeMethod;
    end;

    SomeMethodбудут реализованы по-разному для ADO и для UniDAC. Поэтому я подумал, что интерфейс идеален.

    Тогда у нас есть

    TMyTable =class
    private
    FDataset: TDataset;
    end;

    Здесь я выбрал TDataset, поскольку он является общим предком TADODataset и TUniTable.

    FDataset может быть создан следующим образом:

    if FProvider = prADO then
    FDataset:= TMyADODataset.Create
    else
    FDataset:= TMyUniDataset.Create;

    Теперь проблема в том, как вызвать SomeMethod, FDatasetследующее не компилируется и выдает ошибку несовместимости типов:

    IMyMethods(FDataset).SomeMethod;

    Это потому TDataset, что не реализует IMyMethods, что правильно. Но есть ли способ заставить компилятор принять это? Или есть лучшее решение? Я думал о помощниках классов, но их реализация SomeMethodбудет отличаться для ADO и UniDAC.


    Решение проблемы

    Используйте SysUtils.Supports()функцию для получения IMyMethodsинтерфейса от FDatasetобъекта, например:

    uses
    ..., SysUtils;
    var
    Intf: IMyMethods;
    ...
    if Supports(FDataset, IMyMethods, Intf) then
    Intf.SomeMethod;

    Просто обратите внимание, что для того, чтобы это работало, IMyMethodsему должен быть назначен Guid, например:

    type
    IMyMethods = interface
    ['{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}']
    procedure SomeMethod;
    end;

    Вы можете сгенерировать новый Guid прямо в редакторе кода, нажав Ctrl+Shift+G.

    Как использовать только CSS для закругления углов области тега div?

    Я использую теги div для определения областей на своих веб-страницах. Я установил все очевидные вещи, такие как фон, размер, отступы и т. д. Но все это очень квадратно.

    Как я могу использовать только CSS для закругления углов?


    Решение проблемы

    Вот простой HTML-документ, демонстрирующий, как добиться этого с помощью только CSS.

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <style>
    .b1f,.b2f,.b3f,.b4f{font-size:1px; overflow:hidden; display:block;}
    .b1f {height:1px; background:#ddd; margin:0 5px;}
    .b2f {height:1px; background:#ddd; margin:0 3px;}
    .b3f {height:1px; background:#ddd; margin:0 2px;}
    .b4f {height:2px; background:#ddd; margin:0 1px;}
    .contentf {background: #ddd;}
    .contentf div {margin-left: 5px;}
    </style>
    </head>
    <body>
    <b class="b1f"></b><b class="b2f"></b><b class="b3f"></b><b class="b4f"></b>
    <div class="contentf">
    Content Area Content Area Content Area Content Area Content Area Content Area
    Content Area Content Area Content Area Content Area Content Area Content Area
    Content Area Content Area Content Area Content Area Content Area Content Area
    </div>
    <b class="b4f"></b><b class="b3f"></b><b class="b2f"></b><b class="b1f"></b>
    </body>
    </html>

    Ссылка на оригинал: http://blog.yosle.com/2007/09/20/css-round-corners/

    параметр объявлен, но его значение никогда не читается... почему бы и нет

    Чтобы отправить электронное письмо, у меня есть метод контроллера как таковой:

    const send = function (subject, template, to, options) {
    // VSC says about "subject": is declared but its value is never read.
    // VSC does not say this for the other three parameters.
    return new Promise(function (resolve, reject) {
    fs.readFile(template, "utf8", function (err, templateContent) {
    if (err) {
    return resolve(false);
    }
    var subject = subject;
    console.log(subject);
    // this is where I do read "subject" but it returns 'undefined'
    // (even though I am passing the function a value for the parameter)
    ... etc

    Что я делаю не так? На мой взгляд, я объявил параметр subjectи позже использую его в методе контроллера.


    Решение проблемы

    var subject = subject;

    var subjectсоздает новую переменную, названную subjectв области действия функции обратного вызова, переданной в readFile.

    Это затеняет переменную subject, созданную как имя параметра для функции, назначенной send.

    var subject = subject;поэтому копирует значение локального subject(которое undefinedв данный момент) в subject(которое ничего не делает).

    Дайте вашим переменным разные имена, даже если они делают похожие вещи.

    Я рекомендую использовать линтер, который может применять такое правило, как no-shadow (похоже, вы уже используете его — VS Code не будет генерировать сообщение об ошибке, а только сообщит об этом из инструмента, который это делает — поэтому убедитесь, что вы включили это правило для этого инструмента).

    Как вставить ноль в массив по тому индексу, который превышает размер этого массива?

    Я хочу вставить ноль в определенные места в массиве, но позиция индекса места превышает размер массива

    Я хотел, чтобы по мере вставки чисел одно за другим размер также увеличивался в этом процессе (массива X), поэтому, пока он не достигнет индекса 62, он не будет выдавать эту ошибку.

    import numpy as np
    X = np.arange(0,57,1)
    desired_location = [ 0, 1, 24, 25, 26, 27, 62, 63]
    for i in desired_location:
    X_new = np.insert(X,i,0)
    print(X_new)

    выход

    File "D:\python programming\random python files\untitled4.py", line 15, in <module>
    X_new = np.insert(X,i,0)
    File "<__array_function__ internals>", line 6, in insert
    File "D:\spyder\pkgs\numpy\lib\function_base.py", line 4560, in insert
    "size %i" % (obj, axis, N))
    IndexError: index 62 is out of bounds for axis 0 with size 57


    Решение проблемы

    Сделайте копию Xв X_new, чтобы массив становился длиннее в цикле, как вы хотите.

    X_new = X.copy()
    for i in desired_location:
    X_new = np.insert(X_new, i, 0)

    определенный формат для заголовка на веб-сайте Sharepoint?

    Мне нужно показать на каждой веб-странице следующую структуру заголовка:

    "название сайта/проекта" +","+ "название сайта 1º" +","+ "название сайта 2º" +","+ "название страницы"

    Например, у меня есть веб-страница с заголовком «Веб-страница последних новостей», и я нахожусь на сайте со следующим путем: /news/international/new1.aspx. Сайт «Новости» имеет заголовок: «Новости», сайт «Международный» имеет заголовок «Международные новости», а страница имеет заголовок «Открыта новая планета». Результат должен быть:

    Веб-страница последних новостей, новости, международные новости, обнаружена Новая планета

    Как я могу сделать это, используя тег ProjectProperty Sharepoint?

    Если это невозможно сделать, как я могу сделать это хотя бы с одним уровнем сайта? («Последняя новостная веб-страница, новости, открыта новая планета»)


    Решение проблемы

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

    Вот учебник по созданию пользовательского серверного элемента управления.

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

    protected override void RenderContents(HtmlTextWriter writer)
    {
    if (Context!= null)
    {
    SPWeb l_web = SPContext.Current.Web;
    StringBuilder l_titleBuilder = new StringBuilder();
    l_titleBuilder.AppendFormat("{0}, ", l_web.Title);
    char[] l_delim = new char { '/' };
    foreach ( string l_pathComponent in
    l_web.ServerRelativeUrl.Split(l_delim) )
    l_titleBuilder.AppendFormat("{0}, ", l_pathComponent);
    l_titleBuilder.Remove(l_titleBuilder.Length - 2, 2);
    writer.Write(l_titleBuilder.ToString());
    }
    }

    Воспроизведение прокрутки Terminal.app к предыдущему приглашению в iTerm2

    По умолчанию Terminal.app имеет привязку клавиш ⌘+ ↑, которая прокручивает экран обратно (и ненадолго выделяет) предыдущую командную строку. (Кажется, это не зависит от оболочки, хотя я пробовал только пару. Я использую bash.)

    Я пытаюсь получить аналогичное поведение в iTerm2, но я не нашел сопоставления, которое делает это. Ни один из поисковых запросов, которые я пробовал в списке сопоставлений клавиш iTerm2, не предлагает ничего похожего на эту функцию. Предустановка сопоставления iTerm2, называемая, Terminal.app Compatibilityзаставляет ⌘+ ↑прокручивать предыдущие команды точно так ↑же, а не прокручивать окно обратно к строкам, в которых были введены предыдущие команды.

    Основываясь на этом ответе на аналогичный вопрос, я просмотрел вывод bind -pи увидел записи "\e[A": previous-historyи "\e[B": next-history, но они, похоже, описывают прокрутку ранее введенных команд, а не прокрутку всего вывода окна терминала до приглашения, в котором была команда вход. Это единственные bind -pзаписи, которые относятся к стрелкам вверх или вниз (если мое предположение верно, это [Aотносится к стрелке вверх, которую я определил xxd -psd, как предложено в этом ответе.

    Является ли такое поведение в Terminal.app результатом привязки клавиш? Или как определить есть он или нет? И есть ли способ заставить iTerm2 дублировать это поведение?


    Решение проблемы

    Вы пробовали
    fn + CMD + UpArrow?

    Только суррогат для Terminal.app, который «выходит на одно приглашение за раз», но может быть полезен, поскольку он заставляет iTerm2 последовательно выполнять полное перелистывание страницы в моих пользовательских профилях и различных настройках ключевой карты.

    Laravel Datatable addColumn returns ID of one record only

    Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...