在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中找不到很多好的答案.我确实找到了一个提供此功能的开源类,但我觉得这应该可以在不使用别人的课程的情况下实现.
我确定我正在尝试的是非常简单的,但我以前从未完全使用多线程,所以我不知道从哪里开始.
我正在使用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) 在我的开发计算机上,我以前只是将 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) 我以前从未使用过框架(Zend,CakePHP等),最后决定坐下来学习一个.我从Laravel开始,因为代码看起来很漂亮,不像我试图安装的其他框架,"Hello,World!" 第一次尝试的例子.
目前,我希望我的应用程序做一些非常简单的事情:
用户以下列形式提交请求: GET /dist/lat,lng
该应用程序使用远程IP地址和MaxMind来确定$latitude1和$longitude1
为$latitude2和解析此请求路径$longitude2
使用这两个位置,我们计算它们之间的距离.要做到这一点,我正在使用Rafael Fragoso的WorldDistance PHP类
由于我计划在以后的项目中重用此函数,因此将所有代码都放入/app目录似乎并不正确.该应用程序的两个可重用部分是:
如果我正确地构建外观,那么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 update和php 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) 我现在正在学习 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 以取消此警告。
它还显示一个带有完全空白按钮的窗口:
根据我的理解,这些按钮应该是“点击我”和“退出”。
此外,当我单击顶部按钮时,它会闪烁黑色一秒钟,如下所示:
之后按钮比以前更宽:
我认为 Tk 版本错误可能与输出行为有关。但是我似乎找不到更新 Tk 的方法。我应该在这里做什么?
在看到@ShayneLoyd 的回答后(建议我需要更新版本的 Python 和更新版本的 Tk),我开始四处寻找更多内容,并在 Apple 讨论板上找到了这篇文章,其中建议您可以使用自制软件安装一个链接的 Python 版本homebrew 自己安装的 Tk 版本。我试过这个,但失败了,所以我用谷歌搜索了这个问题,发现这个 StackOverflow 帖子似乎暗示我可以安装 ActiveTcl并且它会工作。
我从 ActiveState 安装了 ActiveTcl …
对于我正在开发的应用程序,我需要一个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) 我已经为 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) 提供的 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 …
假设我有以下数据框:
>>> df
val1 val2 val3
key
1 1 1 1
2 2 2 2
3 3 3 3
Run Code Online (Sandbox Code Playgroud)
现在我想选择列val1、val2和 (这是关键:)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) 我有一个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进行视频播放。他们是如何做到的?