小编Tim*_*ler的帖子

无法通过ssh推送到远程git仓库,卡在"写入对象:11%"

我有一个问题,在"写对象"时尝试执行git push挂起.这不是我在其他地方看到过的Windows和git-daemon的常见场景.这是Linux到Linux,使用ssh.在客户端和服务器上,git版本是1.7.8.6.

我尝试过以下方法:

  • 创建一个本地空仓库并推送到那 - 工作正常
  • 从当地回购拉到当地回购 - 工作正常
  • 将远程仓库克隆到本地计算机 - 工作正常
  • git fsck以及git gc服务器和客户端回购
  • 推送到预先存在的远程仓库 - 以11%挂起写入对象
  • 创建空的远程仓库并推送到那个 - 挂起写入对象2%

我可以设置一个env变量来使git生成调试消息.没有什么有用的.

我已经和IRC的人详细谈过这件事了,我试过谷歌搜索它.我们无处可去.这里的任何人都可以帮我弄清楚出了什么问题吗?

谢谢!

更新:基于某人的建议,我做了一个strace -F,并且它被卡在子进程中的select()上.我提供了整个跟踪,但stackexchange无法上传.无论如何,这是相关部分:

[pid 14414] getsockopt(3, SOL_SOCKET, SO_RCVBUF, [87872], [4]) = 0^M
[pid 14414] select(7, [3 4], [3], NULL, NULL) = 2 (in [4], out [3])^M
[pid 14414] read(4,  <unfinished ...>^M
[pid 14433] <... write resumed> )       = 8192^M
[pid 14433] write(1, "\262\36\237\265\234\n\332W\26\271.\250\271W\34\250N\34*\341\247R\21\177\\Dq\23\27\211\270\25"..., 8192) = 8192^M
[pid 14433] write(1, "Y\343}z\367\31y\321)\254\236na\274\347*\253\247\264d\25\213\364\243\331\242\236\3222U3\246"..., 8192 <unfinished …
Run Code Online (Sandbox Code Playgroud)

git push hang

11
推荐指数
1
解决办法
7116
查看次数

Java:神秘的Java未捕获异常处理程序[带代码]

发生了一件奇怪的事.我编写了一个Java程序,我没有采取任何措施以任何特殊方式处理未捕获的异常.但是当我在Windows 7中运行这个特定程序时,在从main调用的静态上下文中会出现这个未被捕获的异常,导致窗口弹出,显示异常.我试着写一个小程序来复制这个效果无济于事.一个程序(我完全手工编写)产生一个弹出窗口,而没有其他程序会做同样的事情.

我想特别跟踪这一点,以便我可以添加代码,使其他CAUGHT异常以类似的方式显示堆栈跟踪.

我在IRC问过这个问题,但人们告诉我这不会发生.好吧,它发生了.下面有一个截图.

我认为我唯一的希望就是如果其他人认识到这一点并且可以告诉我它来自哪里.

谢谢!

Java异常

更新:抱歉延迟获取一些代码.我不得不照顾一个绞痛的婴儿.请注意,这是一个桌面Java应用程序.它不是applet,也不使用webstart.

这是从获取对话框的程序中复制和粘贴的代码.我会做另一个编辑,让你知道我的同事(获得例外)是否得到了这个案例的对话框.我一直小心翼翼地包括导致异常的一切.只缺少IPAddress类实现,但是它没有参与异常,因为直到异常发生后才实际使用它.请注意发生异常的行之前的星号.该行代码对应于您在屏幕截图中可以看到的异常.

package staticexception;

import java.net.InterfaceAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
import javax.swing.UIManager;

public class StaticException {
    // Don't need this fully implemented.
    public static class IPAddress {

        public static IPAddress getBroadcast(IPAddress mask, IPAddress myip) {
            return new IPAddress();
        }

        public IPAddress() {}

        public IPAddress(int maskval) {}

        public IPAddress(byte[] addr) {}

        public IPAddress mask(IPAddress netmask) {
            return this;
        }

        public int prefixLength() {
            return 0;
        }

    } …
Run Code Online (Sandbox Code Playgroud)

java exception uncaughtexceptionhandler

8
推荐指数
1
解决办法
595
查看次数

无法在Firefox中设置IFrame的document.body.innerHTML

我已经找到了一种跨浏览器的方式来以编程方式设置IFrame的innerHTML.(如http://roneiv.wordpress.com/2008/01/18/get-the-content-of-an-iframe-in-javascript-crossbrowser-solution-for-both-ie-and-firefox/) .我已经编写了一些示例代码(如下所示),我可以在Safari和Chrome中使用它,但不能使用Firefox.任何人都可以帮我弄清楚我需要做什么(以便携方式)?

<html>
<body>

<div name=FRAME2div id=FRAME2div style="position:absolute; background-color:blue; color:black; border-color:black;border-width:0; left:100px; top:40px; width:200px; height:200px; overflow:scroll; display:block; " >
</div>

<script type="text/javascript">
document.getElementById("FRAME2div").innerHTML = '<iframe border=0 id=IFRAME2 name=IFRAME2 ></iframe>';
document.getElementById("IFRAME2").contentWindow.document.body.innerHTML = '<html><body><p>NETSCAPE</p></body></html>';
</script>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

html iframe firefox innerhtml

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

Zynq 7000上的嵌入式Linux,几乎丢弃了所有UDP数据包

我在Zynq 7000板上使用Xilinx Linux发行版.它有两个ARM处理器,一些L2缓存,一个DRAM接口和大量的FPGA架构.我们的设备收集F​​PGA处理的数据,然后通过千兆网络将其发送到其他系统.

我们需要在此设备上支持的服务之一是SNMP,它依赖于UDP数据报,虽然SNMP确实支持TCP,但我们无法强制客户端使用它.

我发现这个系统几乎失去了所有的SNMP请求.

重要的是要注意网络和CPU都不会过载.数据速率不是特别高,CPU通常约为30%负载.另外,我们使用SNMP ++和Agent ++库来管理SNMP,因此我们可以控制这些库,因此系统守护程序不会出现问题.但是,如果我们停止处理和网络活动,则SNMP请求不会丢失.SNMP正在自己的线程中处理,我们确保保持稀疏和扩散请求,以便在任何时候都应该只有一个请求缓冲.由于CPU负载较低,因此上下文切换到接收进程以处理请求时应该没有问题.

由于它不是CPU或以太网带宽问题,我最好的猜测是问题在于Linux内核.尽管网络负载很低,但我猜测网络堆栈缓冲区数量有限,这就是它丢弃UDP数据报的原因.

在谷歌搜索时,我找到了如何使用netstat报告丢失数据包的示例,但这似乎不适用于此系统,因为没有"-s"选项.如何监控这些丢包?我该如何诊断病因?如何调整内核参数以最大限度地减少这种损失?

谢谢!

linux udp zynq

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

Java和Windows 7:可靠地获得IPv4网络掩码?

我在Windows上遇到了Java 6的已知错误.我的理解是获取网络掩码的正常方法是查找网络前缀长度并进行一些位移.问题是在Windows上,前缀长度通常不正确地返回,因此当我们得到24或20时,我们得到128.

此解决方案中,建议-Djava.net.preferIPv4Stack=true使用Java命令行.不幸的是,在Windows 7上,将其添加为VM参数或在Java命令行上似乎没有任何效果.

(a)有没有人知道可能仍然适用于Windows 7的此问题的任何其他解决办法?

(b)或者,有一种完全不同的方法来获得可靠的网络掩码吗?

谢谢!

PS 这是与此相关的错误报告.

java netmask windows-7

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

Linux:将UDP侦听套接字绑定到特定接口(或找出数据报来自的接口)?

我有一个守护进程,我正在努力监听UDP广播数据包,并通过UDP进行响应.当一个包进来,我想知道哪个IP地址(或NIC)的包来到TO这样我就可以与该IP地址作为源地址进行响应.(由于涉及很多痛苦的原因,我们系统的一些用户想要将同一台机器上的两个NIC连接到同一个子网.我们告诉他们不要,但是他们坚持.我不需要提醒我有多难看.)

似乎无法检查数据报并直接找出其目标地址或其所在的接口.基于大量的谷歌搜索,我发现找出数据报目标的唯一方法是每个接口有一个监听套接字,并将套接字绑定到各自的接口.

首先,我的监听套接字以这种方式创建:

s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
Run Code Online (Sandbox Code Playgroud)

要绑定套接字,我尝试的第一件事就是这个,其中nicchar*接口名称:

// Bind to a single interface
rc=setsockopt(s, SOL_SOCKET, SO_BINDTODEVICE, nic, strlen(nic));
if (rc != 0) { ... }
Run Code Online (Sandbox Code Playgroud)

这根本没有效果,并且无声地失败.ASCII名称(例如eth0)是否传递给此调用的正确名称类型?为什么会无声地失败?根据man 7 socket,"请注意,这仅适用于某些套接字类型,尤其是AF_INET套接字.数据包套接字不支持(在那里使用普通绑定(8))." 我不确定"数据包套接字"是什么意思,但这是一个AF_INET套接字.

所以接下来我尝试的是这个(基于bind vs SO_BINDTODEVICE套接字):

struct sockaddr_ll sock_address;
memset(&sock_address, 0, sizeof(sock_address));
sock_address.sll_family = PF_PACKET;
sock_address.sll_protocol = htons(ETH_P_ALL);
sock_address.sll_ifindex = if_nametoindex(nic);
rc=bind(s, (struct sockaddr*) &sock_address, sizeof(sock_address));
if (rc < 0) { ... }
Run Code Online (Sandbox Code Playgroud)

这也失败了,但这次是错误的Cannot assign requested address.我也尝试将系列更改为AF_INET,但它失败并出现相同的错误.

仍有一个选项,即将套接字绑定到特定的IP地址.我可以查找接口地址并绑定到那些地址.不幸的是,这是一个糟糕的选择,因为由于DHCP和热插拔以太网电缆,地址可以随时更改. …

c sockets linux udp bind

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

Java Graphics.fillPolygon:如何同时渲染右边缘和下边缘?

绘制多边形时,Java2D 会保留右侧和底部边缘。我明白为什么要这样做。但是,我想画一些包含这些边缘的东西。这发生在我身上的一件事是遵循fillPolygondrawPolygon具有相同的坐标,但是这似乎留下一个缺口。(见底部的小三角形图像。)有两种可能性,但我不知道哪个。为了启用抗锯齿,我这样做:

renderHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING,
                  RenderingHints.VALUE_ANTIALIAS_ON);
renderHints.put(RenderingHints.KEY_RENDERING,
                RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHints(renderHints);
Run Code Online (Sandbox Code Playgroud)

一种可能性是在 alpha 通道上没有进行抗锯齿处理,因此间隙是由过度绘制引起的。在这种情况下,如果 alpha 通道是被抗锯齿的,边缘将正确邻接。另一种可能性是这里只是一个间隙。

我怎样才能解决这个问题?

另外,我不确定,但看起来多边形轮廓实际上可能太大了。也就是说,它可能比我想要包含的右侧和底部边缘更远。

谢谢。

在此处输入图片说明

- 更新 -

基于 Hovercraft Full of Eels 的一个非常好的建议,我做了一个可编译的例子:

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class polygon {
   private static final int WIDTH = 20;

   public static void main(String[] args) {
      BufferedImage img = new BufferedImage(WIDTH, WIDTH, BufferedImage.TYPE_INT_ARGB);
      Graphics2D g2 = img.createGraphics();
      int[] xPoints = {WIDTH / 3, (2*WIDTH) …
Run Code Online (Sandbox Code Playgroud)

java graphics polygon edges graphics2d

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

SSE内在函数:将32位浮点数转换为UNSIGNED 8位整数

使用SSE内在函数,我得到了一个四个32位浮点数的向量,它被钳位到0-255范围并四舍五入到最接近的整数.我现在想把这四个写成字节.

有一个内部函数_mm_cvtps_pi8会将32位转换为8位有符号整数,但问题是任何超过127的值都会被钳位到127.我找不到任何会压缩无符号8位值的指令.

我有一种直觉,我可能想要做的是移动指令的一些组合_mm_cvtps_pi16_mm_shuffle_pi8后面的操作,以获得我关心的四个字节到内存中.这是最好的方法吗?我将看看我是否可以弄清楚如何编码shuffle控制掩码.

更新:以下似乎完全符合我的要求.有没有更好的办法?

#include <tmmintrin.h>
#include <stdio.h>

unsigned char out[8];
unsigned char shuf[8] = { 0, 2, 4, 6, 128, 128, 128, 128 };
float ins[4] = {500, 0, 120, 240};

int main()
{
    __m128 x = _mm_load_ps(ins);    // Load the floats
    __m64 y = _mm_cvtps_pi16(x);    // Convert them to 16-bit ints
    __m64 sh = *(__m64*)shuf;       // Get the shuffle mask into a register
    y = _mm_shuffle_pi8(y, sh);     // Shuffle the …
Run Code Online (Sandbox Code Playgroud)

x86 sse mmx

5
推荐指数
2
解决办法
4621
查看次数

测试针对集合的最小汉明距离的算法?

我想做一件相对简单的事情:

  • 给定一个查询号码Q,查询距离d,以及一组数字S,确定是否不S包含任何与汉明距离数小于或等于d

最简单的解决方案是制作S一个列表并对其进行迭代,计算距离。如果计算出的距离小于或等于 d,则退出 return TRUE

但是考虑到我想要做的就是检查是否存在,比线性时间解决方案更快的东西应该是可能的。

我尝试过的一件事是M-tree. 参考有关 stackoverflow、维基百科文章 ( https://en.wikipedia.org/wiki/M-tree ) 和两个预先存在的实现的一些其他问题,我昨天花了几个小时来实现自定义解决方案。这个问题的一个好处是,通过两个数字的异或(使用 SSE 指令)计算 popcount 实际上比存储允许避免计算度量的数字更便宜,因此解决方案的几个方面可以简化和优化速度。

结果非常令人失望。事实证明,与最小汉明距离相比,我正在处理的公制半径很小。例如,在 12 位数字的空间中,最大汉明距离是 12。如果我要寻找的最小值是 4,那么就没有太多机会进行良好的非重叠分区。事实上,我只是尝试过,通过蛮力创建一组最小汉明距离为 4 的 12 位数字,然后(通过蛮力)找到最佳二叉树分区,以便搜索算法可以访问最少数量的节点。如果我想查询的 d 内的集合元素的数量,我不能将节点访问次数减少到总数的 30% 以下,并且当我发现第一个访问了大约 4% 时停止。这意味着我或多或少做了一个线性时间解决方案,其中精心设计的树搜索算法的开销与不必检查尽可能多的集合成员所节省的开销大致相同。

但是我想做的很有限。我什至不想用 query distance 计算 set 成员的数量<= d,更不用说枚举它们了。我只是想检查是否存在。这让我想到了布隆过滤器和哈希之类的东西。

我还考虑过尝试构建一个图结构,其中集合成员通过带权重的边连接。使用汉明距离尊重三角不等式这一事实,在我看来,必须有某种方法来搜索此图,使得边遍历导致与查询的距离可能更小,但我什至不知道从哪里开始这里。

有没有人对这里的解决方案有任何其他建议,可以轻松击败简单迭代数组的性能?

编辑和动机:

最终这来自一个编码理论问题。对于给定的偶数d和字长N,我可以将多少个具有最小汉明距离 d 的代码放入一个 N 位数字中?这允许创建可以检测d/2位错误的代码,纠正多达d/2-1位的错误。我们知道像 LDPC 这样的香农极限码,但这是针对具有模糊最小汉明距离的长码,它们需要很长时间才能解码。还有像 OLSC …

algorithm set hamming-distance

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

Linux,UDP数据报和内核时间戳:以后有很多示例和stackoversflow条目,但仍然根本无法获得时间戳

我一直在尝试并未能使Linux(内核4.1.4)为我提供发送和接收UDP数据报的时间戳。我已经阅读了原始的内核文档(https://www.kernel.org/doc/Documentation/networking/timestamping.txt),以及许多示例和许多stackoverflow条目。我可以在发送方和接收方之间毫无问题地发送数据报。但是我无法获得发送或接收数据报的时间戳,也无法弄清楚自己在做什么错。

一件奇怪的事情是,当我使用MSG_ERRQUEUE通道获取已发送数据报上的时间戳信息时,我确实获得了原始传出数据包,并且得到了第一条辅助消息(SOL_IP,IP_RECVERR),但是没有得到第二条消息(应为SOL_SOCKET级别,键入SCM_TIMESTAMPING)。

在另一个关于获取已发送数据包的时间戳记Timestamp传出数据包)的stackoverflow条目中,有人提到某些驱动程序可能未实现对的调用skb_tx_timestamp,但我检查了我的(Realtek),并且该调用肯定在其中。

这是我设置UDP接收器的方式(未显示错误处理代码):

inf->fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

timestampOn = SOF_TIMESTAMPING_RX_SOFTWARE | SOF_TIMESTAMPING_RX_HARDWARE;
r = setsockopt(inf->fd, SOL_SOCKET, SO_TIMESTAMPING, &timestampOn, sizeof(timestampOn));

r = setsockopt(inf->fd, SOL_SOCKET, SO_REUSEPORT, &on, sizeof(on));

memset(&(inf->local), 0, sizeof(struct sockaddr_in));
inf->local.sin_family = AF_INET;
inf->local.sin_port = htons(port);
inf->local.sin_addr.s_addr = htonl(INADDR_ANY);

r = bind(inf->fd, (struct sockaddr *)&(inf->local), sizeof(struct sockaddr_in));
Run Code Online (Sandbox Code Playgroud)

是否使用SO_REUSEPORT似乎无关紧要。

对于接收,我的理解是我们不使用MSG_ERRQUEUE。仅当我们需要已发送消息的时间戳时。此外,当我将MSG_ERRQUEUE与recvmsg一起使用时,会得到“资源暂时不可用”。这是我接收数据报的方式:

int recv_len;
struct msghdr   msg;
struct iovec    iov;

memset(&msg, 0, sizeof(msg));
memset(&iov, 0, sizeof(iov));

// Space for control message info plus …
Run Code Online (Sandbox Code Playgroud)

c sockets linux timestamp udp

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