小编Nic*_*ock的帖子

使用CSS3 calc进行较少积极的编译

我正在使用的Less编译器(OrangeBitsdotless 1.3.0.5)正在积极地进行翻译

body { width: calc(100% - 250px - 1.5em); }
Run Code Online (Sandbox Code Playgroud)

body { width: calc(-151.5%); }
Run Code Online (Sandbox Code Playgroud)

这显然是不希望的.我想知道是否有办法向Less编译器发出信号,在编译期间基本上忽略该属性.我搜索了Less文档和两个编译器的文档,但我找不到任何东西.

Less或less编译器是否支持此功能?

如果没有,是否有一个CSS扩展器呢?

css compilation css3 less css-calc

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

当流管道用于缓冲时,节点回送服务器降级10倍

在节点v8.1.4和v6.11.1上

我开始使用以下echo服务器实现,我将其称为pipe.jspipe.

const http = require('http');

const handler = (req, res) => req.pipe(res);
http.createServer(handler).listen(3001);
Run Code Online (Sandbox Code Playgroud)

我用wrk和下面的lua脚本(为简洁起见缩短了)对它进行了基准测试,它将发送一个小体作为有效载荷.

wrk.method = "POST"
wrk.body   = string.rep("a", 10)
Run Code Online (Sandbox Code Playgroud)

每秒2k请求和44ms的平均延迟,性能不是很好.

所以我编写了另一个使用中间缓冲区的实现,直到请求完成,然后将这些缓冲区写出来.我将其称为 buffer.jsbuffer.

const http = require('http');

const handler = (req, res) => {
  let buffs = [];
  req.on('data', (chunk) => {
    buffs.push(chunk);
  });
  req.on('end', () => {
    res.write(Buffer.concat(buffs));
    res.end();
  });
};
http.createServer(handler).listen(3001);
Run Code Online (Sandbox Code Playgroud)

性能发生了巨大变化,buffer.js每秒处理20k次请求,平均延迟为4ms.

在视觉上,下图描绘了超过5次运行和各种延迟百分位数的服务请求的平均数量(p50是中位数).

缓冲管对比

因此,缓冲区在所有类别中都要好一个数量级.我的问题是为什么?

接下来是我的调查笔记,希望它们至少具有教育意义.

反应行为

这两个实现都是精心设计的,因此它们会给出与返回的完全相同的响应curl -D - --raw.如果给出一个10 d's的主体,两者都将返回完全相同的响应(当然,修改时间): …

javascript http stream output-buffering node.js

38
推荐指数
1
解决办法
782
查看次数

为什么在调试和发布模式下存储和加载AVX2 256位向量会产生不同的结果?

当我尝试在AVX2 256位向量中存储加载 256位时,我在发布模式下没有收到预期的输出.

use std::arch::x86_64::*;

fn main() {
    let key = [1u64, 2, 3, 4];
    let avxreg = unsafe { _mm256_load_si256(key.as_ptr() as *const __m256i) };
    let mut back_key = [0u64; 4];
    unsafe { _mm256_storeu_si256(back_key.as_mut_ptr() as *mut __m256i, avxreg) };
    println!("back_key: {:?}", back_key);
}
Run Code Online (Sandbox Code Playgroud)

操场

在调试模式下:

back_key: [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

在发布模式下:

back_key: [1, 2, 0, 0]
Run Code Online (Sandbox Code Playgroud)

后半部分没有被加载或存储,我无法弄清楚哪一个.

什么是奇怪的是针对本机CPU工作.在发布模式+RUSTFLAGS="-C target-cpu=native"

back_key: [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

我甚至试图通过强制对齐无法获得Clippy错误(我不确定下面的代码是否被认为更正确).

use std::arch::x86_64::*;

#[repr(align(256))]
#[derive(Debug)]
struct Key([u64; 4]);

fn main() {
    let …
Run Code Online (Sandbox Code Playgroud)

simd compiler-optimization rust avx2

13
推荐指数
1
解决办法
273
查看次数

在List <T>上对Datagridview数据源进行排序,其中T是匿名的

一个相对简单的问题.我有一个datagridview,它只是显示统计信息.没有编辑/添加/删除行.datagridview绑定到List.我想要实现的是让用户能够对列进行排序.

class Market
{
    public int Location {get;set;}
    public float Value {get;set;}
    //...
}
class City
{
    public String Name {get;set;}
    //...
}

List<Market> _markets;
List<City> _cities;
//Lists are populated.

dataGridView1.DataSource = _markets.Select(market => 
    new { _cities[market.Location].Name, market.Value}).ToList();
Run Code Online (Sandbox Code Playgroud)

正如所料,列不可排序,但显示的信息是您想要的.我的问题是如何根据具有最少复杂和最少代码量的列类型进行DataGridView排序,因为代码将在整个过程中多次使用.

此应用程序用于使用具有视图的数据库.然后这些视图填充DataGridViews.观点仍然存在,因此可能的解决方案可能是:

DataBase.ViewMarketValue temp = new DataBase.ViewMarketValue()

_markets.ForEach(market => temp.AddViewMarketValueRow(_cities[market.Location].Name, market.Value);
dataGridView1.DataSource = temp;
Run Code Online (Sandbox Code Playgroud)

这导致了所需的:具有所有信息的数据网格视图,并且它是可排序的.唯一的问题是在这方面使用视图似乎是错误的.所以我该怎么做?

c# linq sorting datagridview anonymous-types

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

Win8 Metro为表格数据构建列

在为Windows 8创建应用程序时,我理解如何远离数据网格设计,如此stackoverflow问题所示.我仍然认为,在某些情况下,以表格格式显示数据仍然是有益的.实际上,默认的Window 8应用程序有很多表格数据的例子,如下面的截图所示.他们正是我想要的.

默认天气应用程序 天气应用

默认的财务应用程序 财务应用

但是,我的尝试并不富有成效(我甚至无法决定是使用listbox,listview还是gridview).我似乎无法在我的所有创作中创建列.在互联网上搜索几分钟后,我遇到了一个MSDN答案:

您需要通过重新模板化Listview/ListviewItem来创建非常自定义的外观

这真的是最好/最简单的方法吗?似乎我的要求很小.数据很小(20行左右),只读,非交互式(如所示的Window 8应用程序).我想要列,列标题和交替行样式.考虑到金融和天气应用程序中的表格数据有多常见,有人必须解决这个问题!

c# xaml microsoft-metro

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

替代IEnumerable <T> .Skip(1).Take(1).Single()

我有一个看似简单和令人尴尬的问题困难时期.我想要的只是IEnumberable中的下一个元素而不使用Skip(1).Take(1).Single().这个例子说明了基本问题.

private char _nextChar;
private IEnumerable<char> getAlphabet()
{
    yield return 'A';
    yield return 'B';
    yield return 'C';
}
public void sortAlphabet()
{
     foreach (char alpha in getAlphabet())
     {
         switch (alpha)
         {
             case 'A':  //When A pops up, I want to get the next element, ie 'B'
                 _nextChar = getAlphabet().Skip(1).Take(1).Single();
                 break;
             case 'B': //When B pops up, I want 'C' etc
                 _nextChar = getAlphabet().Skip(1).Take(1).Single();
                 break;
         }
     }
}
Run Code Online (Sandbox Code Playgroud)

除了丑陋之外,这个例子也有效.但是,让我们说IEnumerable包含200万个元素,然后LINQ语句使程序执行速度难以忍受.我想要的很简单.我只想要IEnumberable <>中的下一个元素.如果有这样的功能,我的所有问题都将得到解决:

_nextChar = getAlphabet().moveNext() //or getNext()
Run Code Online (Sandbox Code Playgroud)

如果解决方案保持与示例相同的结构/布局/功能,则是更优选的,但是我是灵活的.我的程序是一个文件解析器,在200万行文本中有一些键,如"money = 324",其中"money"和"324"是IEnumberable中的邻居元素,当解析器出现"money"时,我想" 324" .(谁没有?:D对不起的双关语.)

c# linq ienumerable foreach yield

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

詹金斯管道穿越多个Docker图像

在Jenkins中使用声明性管道,如何在多个版本的docker镜像中运行阶段.我想在python 2.7,3.5和3.6上执行以下jenkinsfile.下面是一个管道文件,用于在docker容器中构建和测试python项目

pipeline {
  agent {
    docker {
      image 'python:2.7.14'
    }
  }

  stages {
    stage('Build') {
      steps {
        sh 'pip install pipenv'
        sh 'pipenv install --dev'
      }
    }

    stage('Test') {
      steps {
        sh 'pipenv run pytest --junitxml=TestResults.xml'
      }
    }
  }

  post {
    always {
      junit 'TestResults.xml'
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

什么是最少量的代码,以确保相同的步骤跨python 3.5和3.6成功?希望是如果测试失败,很明显测试失败的版本.

或者是我要求的声明性管道不可能(例如,脚本化的管道可能是最优雅地解决这个问题的方法)

作为比较,这就是Travis CI允许您指定跨不同python版本运行的方式.

jenkins docker jenkins-pipeline

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

访问 Cloudflare Workers 站点的压缩数据

我的 cloudflare 工作人员站点包含 React 应用程序获取的二进制数据。该二进制数据以 gzip 压缩形式存储,因为它压缩得非常好(我们谈论的是 20-25 倍的压缩,未压缩时它太大,无法满足 10MB KV 限制)。我遇到的问题是工作人员返回的数据没有适当的标头:

Content-Encoding: gzip
Run Code Online (Sandbox Code Playgroud)

或者如果我让工作人员添加标头,cloudflare 将双重压缩响应。那么,如何在 cloudflare KV 中存储 gzip 压缩数据,以便我可以使用正确的内容编码返回它,而无需 cloudflare 双重压缩响应?

参考

为了最小化复制:这是我正在使用的两个工作脚本。

Content-Encoding: gzip
Run Code Online (Sandbox Code Playgroud)

上面的工作脚本返回没有内容编码标头的二进制数据,因此浏览器不会自动膨胀响应。

所以然后我尝试通过手动添加标题

import { getAssetFromKV, mapRequestToAsset } from '@cloudflare/kv-asset-handler'

addEventListener('fetch', event => {
  try {
    event.respondWith(handleEvent(event))
  } catch (e) {
    event.respondWith(new Response('Internal Error', { status: 500 }))
  }
})

async function handleEvent(event) {
  const cacheControl = { browserTTL: 60 * 60 * 6 };
  return await getAssetFromKV(event, { mapRequestToAsset, cacheControl });
}
Run Code Online (Sandbox Code Playgroud)

响应具有正确的内容编码,但 …

cloudflare cloudflare-workers

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

F#类型提供程序引用自定义类型

我正在构建一个简单的类型提供程序,但在引用我创建的类型时,我似乎遇到了问题.例如,给定

namespace Adder

type Summation = Summation of int

module QuickAdd = 
  let add x y = x + y |> Summation
Run Code Online (Sandbox Code Playgroud)

我想让以下测试用例通过:

module Adder.Tests

open Adder
open NUnit.Framework

type Simple = QuickAddProvider<1, 2>

[<Test>]
let ``Simple sample is 3`` () =
  let foo = Simple()
  Assert.AreEqual(foo.Sample, Summation 3)
Run Code Online (Sandbox Code Playgroud)

使用以下类型提供程序:

namespace Adder

open Microsoft.FSharp.Core.CompilerServices
open ProviderImplementation.ProvidedTypes
open System.Reflection

[<TypeProvider>]
type public QuickAddProvider (config : TypeProviderConfig) as this =
  inherit TypeProviderForNamespaces ()

  let ns = "Adder"
  let asm = Assembly.GetExecutingAssembly()
  let …
Run Code Online (Sandbox Code Playgroud)

reflection f# discriminated-union type-providers

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

可以检查核心C#功能的内部

今天我很震惊,有比较内心的倾向Buffer.BlockCopy,Array.CopyTo. 我很好奇,看看是否在幕后Array.CopyTo被召唤Buffer.BlockCopy.这背后没有实际用途,我只想进一步了解C#语言及其实现方式.不要跳枪并指责我微观优化,但你可以指责我好奇!

当我在mscorlib.dll上运行ILdasm时,我收到了这个 Array.CopyTo

.method public hidebysig newslot virtual final 
    instance void  CopyTo(class System.Array 'array',
                          int32 index) cil managed
{
  // Code size       0 (0x0)
} // end of method Array::CopyTo
Run Code Online (Sandbox Code Playgroud)

这个 Buffer.BlockCopy

.method public hidebysig static void  BlockCopy(class System.Array src,
                                            int32 srcOffset,
                                            class System.Array dst,
                                            int32 dstOffset,
                                            int32 count) cil managed internalcall
{
  .custom instance void System.Security.SecuritySafeCriticalAttribute::.ctor() = ( 01 00 00 00 ) 
} // end of method Buffer::BlockCopy
Run Code Online (Sandbox Code Playgroud)

坦率地说,这令我感到困惑.我从未在我没有创建的dll/exe上运行ILdasm.这是否意味着我将无法看到这些功能是如何实现的?搜索周围只显示了一个stackoverflow问题 …

c# implementation il mscorlib

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

netstandard 2.1 中的跨度使用(无依赖关系)

适用于 .NET Core 2.1+ 和 .NET Standard 2.1 的C# span 文档列表。宣布 .NET Standard 2.1中,Span<T>被列为该版本的第一大亮点。第 3 方文章还列出了Span<T>.NET Standard 2.1 中添加的内容。

我理解这些证据意味着人们可以在 netstandard2.1 目标库中以与在 netcoreapp2.1 目标库中相同的方式使用 span。我在我的一个具有零依赖性的库中尝试了这一点,如果一个目标是 netcoreapp2.1,那么该库的跨度 API 就可用了——例如:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;netcoreapp2.1;netstandard2.1</TargetFrameworks>
  </PropertyGroup>

  <!-- snip -->

  <PropertyGroup Condition="'$(TargetFramework)'=='netcoreapp2.1' Or '$(TargetFramework)'=='netstandard2.1'">
    <LangVersion>7.2</LangVersion>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

(代码片段中使用的 netstandard2.0 是目标示例,其中库不会公开Span兼容的 API,因为它需要System.Memory依赖项)

但情况似乎并非如此(针对 netstandard2.1 时出现“无法找到类型或命名空间 'Span<>' 的错误”)

这个库的目标是零依赖,所以我宁愿不依赖System.Memory.

是否可以在没有依赖项的 netstandard 2.1 库中使用与在没有依赖项的 netcoreapp2.1 中Span使用相同的方式?Span

编辑:答案是“是的,可以Span<T>在 netstandard …

c# .net-standard

0
推荐指数
1
解决办法
1184
查看次数