小编ste*_*esu的帖子

返回MySQL结果作为Perl中的哈希表

在Perl中,我正在进行类似于以下内容的SQL查询:

SELECT `id`, `title`, `price` FROM `gamelist`
Run Code Online (Sandbox Code Playgroud)

我想做的是获取此查询的结果并将其转储到哈希表中.我正在使用DBI,目前我只知道如何执行以下操作:

my %results;
my $count = 0;
while( @result = $statement->fetchrow() ){
    %results{'id'}[$count] = $result[0];
    %results{'title'}[$count] = $result[1];
    %results{'price'}[$count] = $result[2];
    $count++;
}
Run Code Online (Sandbox Code Playgroud)

但是,我不喜欢使用$result[0]和信任第一个字段将是ID.我宁愿有类似的东西:

my %results;
my $count = 0;
while( %result = $statement->fetchrow_as_hashtable() ){
    %results{'id'}[$count] = %result{'id'};
    %results{'title'}[$count] = %result{'title'};
    %results{'price'}[$count] = %result{'price'};
    $count++;
}
Run Code Online (Sandbox Code Playgroud)

我尝试在谷歌上四处寻找,但在DBI/Perl中找不到很多好的答案.我确实找到了一个提供此功能的开源类,但我觉得这应该可以在不使用别人的课程的情况下实现.

mysql perl hashtable

4
推荐指数
2
解决办法
8414
查看次数

在PHP中的子进程之间共享变量?

我确定我正在尝试的是非常简单的,但我以前从未完全使用多线程,所以我不知道从哪里开始.

我正在使用PCNTL创建一个多线程的PHP应用程序.我想要做的是同时运行3个函数,我希望它们的返回值合并为一个数组.所以逻辑上我需要在他们追加结果的所有子节点之间共享一些变量,或者只在一个子节点和父节点之间共享三个变量 - 然后父节点可以稍后合并结果.

问题是 - 我不知道该怎么做.首先想到的是使用共享内存,但我觉得应该有一个更简单的方法.

此外,如果它有任何影响,则分叉进程的函数是公共类方法.所以我的代码看起来如下所示:

<?php
    class multithreaded_search {
        /* ... */
        /* Constructors and such */
        /* ... */
        public function search( $string = '' ) {
            $search_types = array( 'tag', 'substring', 'levenshtein' );
            $pids = array();
            foreach( $search_types as $type ) {
                $pid = pcntl_fork();
                $pids[$pid] = $type;
                if( $pid == 0 ) { // child process
                    /* confusion */
                    $results = call_user_func( 'multithreaded_search::'.$type.'_search', $string );
                    /* What do we do …
Run Code Online (Sandbox Code Playgroud)

php multithreading shared-memory

4
推荐指数
1
解决办法
8852
查看次数

相同文件的两个 git repos

在我的开发计算机上,我以前只是将 git 用作自动备份/恢复系统。我知道这并不是 git 的用途,但它对我来说非常有效。我有一个简单的脚本,它每 5 分钟运行一次(类似于 Windows 任务计划程序)并检查是否有任何文件已更改。如果是这样,它会创建一个新提交(带有消息“自动提交”)并将其推送到我在外部硬盘驱动器上的镜像。我也可以将其扩展到推送到其他位置的镜像。

我不想停止这样做,因为系统不止一次挽救了我的生命。在电源故障、意外文件删除或客户突然决定他们喜欢 2 个月前的项目外观并且他们想要恢复所有更改之间 - 将所有内容回滚到任何时间点的能力是非常宝贵的。

现在,当我想将这些存储库之一放在 github 上进行协作时,问题就来了。每次我推送到 github 时,它都会创建数十或数百或提交,通常代码不完整,因为我正在修改文件五分钟后。

我希望有一个位于同一目录中并监视相同文件的第二个存储库,但是我希望它只手动提交。这样,当我推送到 github 时,只有有意义的提交,而且我所有的自动备份都不会被窥探。

这甚至可能吗?

快速编辑 -

谷歌搜索,这个git rebase命令有什么用吗?似乎它可能会破坏所有自动提交,这并不是理想的行为。

长编辑 -

这个小项目一直是一个噩梦

按照@janos 的建议,我在每个文件夹中设置了第二个存储库。为了设置这些,我只是git clone在当前存储库上使用。我修改了我的autosave.bat文件以使用GIT_DIR并且GIT_WORK_TREE认为一切都会很花哨......事实并非如此

首先,为了好玩,在 Windows 7 PC 上尝试以下操作:

test.bat
--------

CD C:\SomeFolder
FOR /D %%i in (*) DO (
    CD %%i
    set GIT_WORK_TREE=%cd%
    echo %GIT_WORK_TREE%
    CD ..
)
Run Code Online (Sandbox Code Playgroud)

这样的结果应该很明显了吧?我们逐步遍历 中的每个子目录SomeFolder,将其设置为当前GIT_WORK_TREE,然后输出GIT_WORK_TREE。输出:

C:\SomeFolder
C:\SomeFolder …
Run Code Online (Sandbox Code Playgroud)

git backup project-management github

4
推荐指数
1
解决办法
2459
查看次数

在Laravel 5中创建一个新的ServiceProvider/Facade作为包

介绍

我以前从未使用过框架(Zend,CakePHP等),最后决定坐下来学习一个.我从Laravel开始,因为代码看起来很漂亮,不像我试图安装的其他框架,"Hello,World!" 第一次尝试的例子.

目标

目前,我希望我的应用程序做一些非常简单的事情:

  1. 用户以下列形式提交请求: GET /dist/lat,lng

  2. 该应用程序使用远程IP地址和MaxMind来确定$latitude1$longitude1

  3. $latitude2和解析此请求路径$longitude2

  4. 使用这两个位置,我们计算它们之间的距离.要做到这一点,我正在使用Rafael Fragoso的WorldDistance PHP类

由于我计划在以后的项目中重用此函数,因此将所有代码都放入/app目录似乎并不正确.该应用程序的两个可重用部分是:

  1. 连接到MaxMind并返回经度和纬度的服务提供商
  2. 服务提供商,在地球上占两个点并返回距离

如果我正确地构建外观,那么routes.php我可以简单地写一下:而不是我的文件在闭包内是一堆乱码.

Route::get('dist/{input}', function($input){
    $input = explode( "," , $input );

    return Distance::getDistance( GeoIP::getLocation(), $input );
});
Run Code Online (Sandbox Code Playgroud)

我试过的

初步尝试

对于第一家服务提供商,我找到了Daniel Stainback的Laravel 5 GeoIP服务提供商.它没有安装一样容易,因为它应该有(我不得不手动复制geoip.php/config目录中,更新/config/app.php的手,并运行composer updatephp artisan optimize),但是它的工作:要请求GET /test返回的所有的我的信息.

对于第二个服务提供商,我首先尝试模仿GeoIP服务提供商的目录结构和文件命名约定.我想如果我有相同的命名约定,自动加载器将能够找到我的类.所以我创建了/vendor/stevendesu/worlddistance/src/Stevendesu/WorldDistance\WorldDistanceServiceProvider.php:

<?php namespace Stevendesu\WorldDistance;

use Illuminate\Support\ServiceProvider;

class WorldDistanceServiceProvider extends ServiceProvider { …
Run Code Online (Sandbox Code Playgroud)

php package laravel composer-php laravel-5

4
推荐指数
1
解决办法
1万
查看次数

`tkinter._test()` 按钮在使用 pipenv 时不可见

我现在正在学习 Tkinter 并试图解决我的第一个问题,但找到 Google 并没有帮助。

我在 Mac OS X 10.15.1 (Catalina) 上运行此代码

我使用的是 Python 3.7,我的代码看起来像这样(每个 PEP8 标准有很多样板):

"""
Experiments in tkinter
"""


import tkinter as tk


def main():
    """
    Main entrypoint
    """

    tk._test()


if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

这会向控制台输出以下警告:

弃用警告:不推荐使用 Tk 的系统版本,可能会在未来版本中删除。请不要依赖它。设置 TK_SILENCE_DEPRECATION=1 以取消此警告。

它还显示一个带有完全空白按钮的窗口:

<code>tkinter._test()</code> 的输出

根据我的理解,这些按钮应该是“点击我”和“退出”。

此外,当我单击顶部按钮时,它会闪烁黑色一秒钟,如下所示:

点击第一个按钮的结果

之后按钮比以前更宽:

单击两次 点击十次

我认为 Tk 版本错误可能与输出行为有关。但是我似乎找不到更新 Tk 的方法。我应该在这里做什么?

更新

在看到@ShayneLoyd 的回答后(建议我需要更新版本的 Python 和更新版本的 Tk),我开始四处寻找更多内容,并在 Apple 讨论板上找到了这篇文章,其中建议您可以使用自制软件安装一个链接的 Python 版本homebrew 自己安装的 Tk 版本。我试过这个,但失败了,所以我用谷歌搜索了这个问题,发现这个 StackOverflow 帖子似乎暗示我可以安装 ActiveTcl并且它会工作。

我从 ActiveState 安装了 ActiveTcl …

python tkinter tkinter-macos

4
推荐指数
1
解决办法
4459
查看次数

使用Perl正则表达式确定URI是否有效

对于我正在开发的应用程序,我需要一个Perl脚本,它循环遍历一个大量的CSV文件,并确保每一行包含一个有效的URI.我之前已经问过一个关于解析CSV文件的问题,我已经开始使用它Text::CSV来让我的生活变得更轻松.现在我遇到了确保URI有效的问题.

由于我的应用程序的性质,URI不需要采取完整的形式

protocol://username:password@domain.extension/request?vars=values
Run Code Online (Sandbox Code Playgroud)

相反,我只对这个请求部分感兴趣.对于一般的网站,这将是以后的事情.com,.edu等等.

我目前有以下Perl脚本:

if($_ !~ /^(?:[a-z0-9-._~!$&'()*+,;=:/?@]|%[0-9A-F]{2})*$/i){
    print "Invalid URL format";
    exit;
} else {
    /* stuff */
}
Run Code Online (Sandbox Code Playgroud)

正则表达式应该是相当直接的.允许请求包含一小组符号([a-z0-9-._~!$&'()*+,;=:/?@])中的一个,或者它可以包含百分号(%),后跟两个十六进制数字.这些模式中的任何一个都可以无限重复.

当我运行此脚本时,我收到以下错误:

Number found where operator expected at ./301rules.pl line 58, near "%[0"
        (Missing operator before 0?)
Bareword found where operator expected at ./301rules.pl line 58, near "9A"
        (Missing operator before A?)
Bareword found where operator expected at ./301rules.pl line 58, near "$/i"
        (Missing operator before i?)
syntax error at …
Run Code Online (Sandbox Code Playgroud)

regex perl escaping

3
推荐指数
1
解决办法
1654
查看次数

使用 VueJS 动态编译和挂载元素

问题

我已经为 VueJS 创建了一个围绕 jQuery DataTables 的轻量级包装器,如下所示:

<template>
    <table ref="table" class="display table table-striped" cellspacing="0" width="100%">
        <thead>
            <tr>
                <th v-for="(column, index) in columns">
                    {{ column.name }}
                </th>
            </tr>
        </thead>
    </table>
</template>

<script>
    export default {
        props: ['columns', 'url'],
        mounted: function () {
            $(this.$refs.table).dataTable({
                ajax: this.url,
                columns: this.columns
            });
            // Add any elements created by DataTable
            this.$compile(this.$refs.table);
        }
    }
</script>
Run Code Online (Sandbox Code Playgroud)

我正在像这样使用数据表:

<data-table
    :columns="
        [
            {
                name: 'County',
                data: 'location.county',
            },
            {
                name: 'Acres',
                data: 'details.lot_size',
            },
            {
                name: 'Price',
                data: 'details.price',
                className: …
Run Code Online (Sandbox Code Playgroud)

javascript jquery datatables vue.js vuejs2

3
推荐指数
1
解决办法
2845
查看次数

简单的 VueJS 问题(在挂载中设置 $data)

编辑

提供的 Component.vue 是一个更大的网络应用程序的一部分,所以我删除了这个问题的相关代码。我没有注意到的是,我在删除具有非常大影响的代码时所做的非常微小的更改。

有以下区别:

mounted() {
    // ....
}
Run Code Online (Sandbox Code Playgroud)

和:

mounted: () => {
    // ....
}
Run Code Online (Sandbox Code Playgroud)

经过今天早上的仔细调查,我在我的代码中发现了这个错误,我已经更新了问题以反映失败的实际代码。

我可能只是累了,但在睡觉前我想在这里寻求帮助,看看是否有人能找到我的问题。我有一个非常简单的 Vue 组件无法正常工作:

组件.vue:

<template>
    <div>
        <p v-for="item in items">{{ item.text }}</p>
    </div>
</template>

<script>
    export default {
        data() {
            return {
                items: []
            };
        },
        mounted: () => {
            var _this = this;
            $.ajax("/items.json").done(result => {
                _this.items = result;
            });
        }
    };
</script>
Run Code Online (Sandbox Code Playgroud)

项目.json

[
    {"text": "ABC"},
    {"text": "XYZ"}
]
Run Code Online (Sandbox Code Playgroud)

这些段落永远不会呈现。经过检查_this.items,在 AJAX 处理程序中设置它之前它看起来不存在(我希望它是一个空数组)并且_this.$data也不存在

~this …

javascript vue.js vuejs2

3
推荐指数
1
解决办法
8466
查看次数

Pandas:选择列,如果不存在则默认

假设我有以下数据框:

>>> df
     val1 val2 val3
key
  1     1    1    1
  2     2    2    2
  3     3    3    3
Run Code Online (Sandbox Code Playgroud)

现在我想选择列val1val2和 (这是关键:)val4

>>> df[["val1", "val2", "val4"]]
KeyError: "['val4'] not in index"
Run Code Online (Sandbox Code Playgroud)

我想要什么:

>>> df.something(something)
     val1 val2 val4
key
  1     1    1  NaN
  2     2    2  NaN
  3     3    3  NaN
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

3
推荐指数
1
解决办法
2012
查看次数

HTML5视频:具有Blob URL的流视频

我有一个Blob数组(二进制数据,实际上-我可以表示它是最有效的。我现在正在使用Blobs,但也许a Uint8Array或某些方法会更好)。每个Blob包含1秒的音频/视频数据。每秒钟都会生成一个新的Blob,并将其附加到我的数组中。因此,代码大致如下所示:

var arrayOfBlobs = [];
setInterval(function() {
    arrayOfBlobs.append(nextChunk());
}, 1000);
Run Code Online (Sandbox Code Playgroud)

我的目标是将音频/视频数据流传输到HTML5元素。我知道可以像这样生成和播放Blob URL:

var src = URL.createObjectURL(arrayOfBlobs[0]);
var video = document.getElementsByTagName("video")[0];
video.src = src;
Run Code Online (Sandbox Code Playgroud)

当然,这只会播放视频的前1秒。我还假设我可以以某种方式将当前数组中的所有Blob小级连接起来,以播放一秒钟以上的时间:

// Something like this (untested)
var concatenatedBlob = new Blob(arrayOfBlobs);
var src = ...
Run Code Online (Sandbox Code Playgroud)

但是,这最终仍然会耗尽数据。由于Blob是不可变的,因此我不知道如何在接收到数据时继续追加数据。

我敢肯定,这是有可能的,因为YouTube和许多其他视频流服务都使用Blob URL进行视频播放。他们是如何做到的?

javascript video html5 blob html5-video

3
推荐指数
1
解决办法
1万
查看次数