小编csn*_*ate的帖子

将上游项目推到master上后,如何修复git子树?

我一直在尝试使用git子树,并遇到了以下情况。

我使用git子树将一个外部项目添加到我的仓库中,我有意保留了上游项目的所有历史记录,因为我希望能够参考该项目的历史记录,并在以后为上游项目做出贡献。

事实证明,上游项目的另一个贡献者不小心将一个大文件推入了master分支。为了解决这个问题,上游项目改写了历史并将其推向了主人。在创建“ monorepo”时,我包括了该提交,并且我也想删除它。

如何更新存储库以反映子树的新历史记录?

我的第一个尝试是使用filter-branch完全删除子树和所有历史记录。

git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch upstream-project-dir' --prune-empty HEAD
Run Code Online (Sandbox Code Playgroud)

一旦删除了旧版本的子树,我就可以使用新的上游母版重新添加子树。但是,这不起作用,因为由于某种原因,提交历史记录仍显示在git日志输出中。

git subtree

12
推荐指数
1
解决办法
152
查看次数

证明f(n)+ g(n)是O(max(f(n),g(n)))

您好,我有一点困难证明以下内容.

f(n) + g(n) is O(max(f(n),g(n)))
Run Code Online (Sandbox Code Playgroud)

这具有逻辑意义,通过观察这一点,我可以告诉你它是正确的,但我无法提出证据.

这是我到目前为止:

c * (max(f(n),g(n))) > f(n) + g(n) for n > N
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何选择ac和N来适应定义,因为我不知道f(n)和g(n)是什么.

任何帮助表示赞赏.

algorithm big-o analysis notation

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

修改Dijkstra算法以获得两个节点之间的最短路径

所以我看到了类似的问题,但并不完全是我正在寻找的.我需要修改Dijkstra的算法以返回顶点S(源)和顶点X(目标)之间的最短路径.我想我已经想出了该怎么做,但我想要一些帮助.这是我修改过的伪代码.

 1  function Dijkstra(Graph, source, destination):
 2      for each vertex v in Graph:                                // Initializations
 3          dist[v] := infinity ;                                  // Unknown distance function from 
 4                                                                 // source to v
 5          previous[v] := undefined ;                             // Previous node in optimal path
 6      end for                                                    // from source
 7      
 8      dist[source] := 0 ;                                        // Distance from source to source
 9      Q := the set of all nodes in Graph ;                       // All nodes in the graph are
10                                                                 // unoptimized …
Run Code Online (Sandbox Code Playgroud)

graph-theory graph dijkstra data-structures

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

Ruby JSON.parse返回一个Array

我正在尝试通过RESTful API解析我从Twitter收到的JSON字符串作为响应.我想使用JSON gem,但我遇到了一个问题.根据文档,似乎JSON解析器返回Hash,这就是我想要的.但是,当我实际执行JSON.parse(twitter_result.body)时,它返回一个数组.如何让JSON解析器返回哈希?

这是我正在使用的解析器:http://www.ruby-doc.org/stdlib-1.9.3/libdoc/json/rdoc/JSON.html#method-i-parse

"漂亮"的JSON输出示例:

[
  {
    "created_at": "Sun Dec 08 13:00:52 +0000 2013",
    "id": 409668902189137920,
    "id_str": "409668902189137920",
    "text": "\"All the people departed, and David went home to bless his household.\" 1 Chron. 16:43. Big meeting. Blessed home. Both.",
    "source": "<a href=\"http://www.hootsuite.com\" rel=\"nofollow\">HootSuite</a>",
    "truncated": false,
    "in_reply_to_status_id": null,
    "in_reply_to_status_id_str": null,
    "in_reply_to_user_id": null,
    "in_reply_to_user_id_str": null,
    "in_reply_to_screen_name": null,
    "user": {
      "id": 27500565,
      "id_str": "27500565",
      "name": "John Piper",
      "screen_name": "JohnPiper",
      "location": "Minneapolis, MN",
      "description": "Founder-Teacher, Desiring God, Chancellor, BCS. Spreading a …
Run Code Online (Sandbox Code Playgroud)

ruby twitter parsing json

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

在Gitlab中设置最小发行号

我们正在从subversion迁移到git,我们决定使用Gitlab作为Web界面.我们在提交消息中引用了一个问题编号.由于我们使用Gitlab的问题跟踪器,数字将重置为1.对于给定项目,如何设置最小发行号?

git gitlab

7
推荐指数
1
解决办法
403
查看次数

OAuth 秘密和桌面应用程序

我正在考虑用一种可以访问 Google API 的解释性语言创建一个桌面应用程序。据我所知,有一个安全漏洞。客户端机密将在代码中公开,即使我使用 C++ 或 Java 创建应用程序,代码也可能被反编译\反汇编,并且理论上可以找到机密。除了混淆代码之外还有其他方法吗?我希望能够分发代码供其他人使用。

oauth

6
推荐指数
1
解决办法
1291
查看次数

Boost.Python 多返回参数

我有一个 C++ 函数,它从它的参数返回多个值。

void Do_Something( double input1, double input2, double input3,
    double& output1, double& output2 )
{
    ...
    output1 = something;
    output2 = something;
}
Run Code Online (Sandbox Code Playgroud)

我想使用 Boost.Python 包装这个函数。我想出了一个使用 lambdas 的解决方案,但它有点乏味,因为我有很多函数在它们的参数中有多个返回值。

BOOST_PYTHON_MODULE( mymodule )
{
    using boost::python;
    def( "Do_Something", +[]( double input1, double input2, double input3 )
    {
        double output1;
        double output2;
        Do_Something( input1, input2, input3, output1, output2 );
        return make_tuple( output1, output2 );
    });
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的\自动方法来使用 Boost.Python 来完成这个任务?

c++ python boost

6
推荐指数
1
解决办法
2036
查看次数

为什么简单的 ELF 二进制文件中存在重叠和未对齐的段?

我正在编写一个ELF加载程序并研究ELF格式。我有一个简单的 hello world 二进制文件,是在 Fedora 38 中使用 Clang 16 创建的,它可以工作,并且 I\xe2\x80\x99ve 未编译\\链接到任何特定选项 ( clang hello.c -o hello)。我检查了程序头readelf,发现一些与我对 LOAD 和 DYNAMIC 头的理解不相符的东西。

\n

例如:

\n
\nProgram Headers:\n  Type           Offset             VirtAddr           PhysAddr\n                 FileSiz            MemSiz              Flags  Align\n\xe2\x80\xa6\n  LOAD           0x0000000000000000 0x0000000000400000 0x0000000000400000\n                 0x00000000000004f0 0x00000000000004f0  R      0x1000\n  LOAD           0x0000000000001000 0x0000000000401000 0x0000000000401000\n                 0x000000000000016d 0x000000000000016d  R E    0x1000\n  LOAD           0x0000000000002000 0x0000000000402000 0x0000000000402000\n                 0x00000000000000dc 0x00000000000000dc  R      0x1000\n  LOAD           0x0000000000002df8 0x0000000000403df8 0x0000000000403df8\n                 0x0000000000000214 0x0000000000000218  RW     0x1000\n  DYNAMIC        0x0000000000002e08 0x0000000000403e08 0x0000000000403e08\n                 0x00000000000001d0 0x00000000000001d0  RW     0x8\n
Run Code Online (Sandbox Code Playgroud)\n

有两个问题我无法解决。请注意前三个 …

c linux linker elf clang

5
推荐指数
1
解决办法
142
查看次数

在Haskell中解释这个'Merge'函数

我正在学习Haskell,我无法理解这个功能.我正在实施mergesort.我实现了mergesort递归函数,但我不明白这个'merge'函数在做什么.我理解命令式语言中的合并排序,但我不明白这里的语法.

merge []         ys                   = ys
merge xs         []                   = xs
merge xs@(x:xt) ys@(y:yt) | x <= y    = x : merge xt ys
                          | otherwise = y : merge xs yt
Run Code Online (Sandbox Code Playgroud)

sorting mergesort haskell

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

CUDA扭曲和线程分歧

我试图了解CUDA扭曲和线程分歧.假设我有一个朴素矩阵乘法内核来乘以nxn矩阵.

__global__ void matrix_multiply(float* a, float* b, float* c, int n)
{
    int row = blockIdx.y + blockDim.y + threadIdx.y;
    int col = blockIdx.x + blockDim.x + threadIdx.x;

    if(row < n && col < n) {
        float tmp = 0.0f;
        for(int i = 0; i < n; ++i)
            tmp += a[row * n + i] * b[i * n + col];
        c[row * n + col] = tmp;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我启动一个网格大小为32乘32且块大小为16乘16并且矩阵为500乘500的内核,那么有多少warp会遇到会遇到线程分歧的线程?

由于矩阵右边缘的每个线程块都有线程发散,因此线程发散的经线数不应该是256吗?

cuda warp-scheduler

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

使用Ceil和Integer

因此,我只是从我做得很好的学校项目中获得了成绩,但由于我没有打电话给ceil(...),因此该年级学生获得了5分的折扣。它是使用CUDA的并行计算过程,但问题与CUDA的任何功能都没有直接关系。

这是“违规”行:

dim3 dimGrid(n / dimBlock.x, n / dimBlock.y);
Run Code Online (Sandbox Code Playgroud)

他的主张是我应该这样做:

dim3 dimGrid(ceil(n / dimBlock.x), ceil(n / dimBlock.y));
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,如果n和dimBlock。*是整数,为什么还要为此做标记呢?他们的结果将在ceil被调用和截断之前进行计算。因此,为此标记似乎很愚蠢。

下面的示例似乎表明,使用-O2时,无论如何GCC都会优化标注。

使用ceil:

#include <stdio.h>
#include <math.h>

int main()
{
        int m = 3, n = 5, o;

        o = ceil(n / m);
        printf("%d\n", o);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

没有:

#include <stdio.h>
#include <math.h>

int main()
{
        int m = 3, n = 5, o;

        o = n / m;
        printf("%d\n", o);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

尽管我仅了解五点,但我仍然想了解为什么我完全错了。

c optimization ceil

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