{
  "alyssadaemon.io": {
    "/posts/welcome/": {
      "date": "2026-02-07T06:38:09Z",
      "httpProtocol": "h2, tls/1.3",
      "httpStatus": 200,
      "ipAddress": "45.79.205.212",
      "ipASN": "Akamai Connected Cloud",
      "ipCountry": "United States",
      "httpHeaderHash": "BCL6RJUD7BIAZAOZ2FCCKQBSHTMICUDH",
      "httpHeaderTechnologies": [
        "Apache HTTP Server",
        "HSTS"
      ],
      "httpHeaderUrls": [],
      "httpHeaderByteSize": 1742,
      "httpBodyHash": "NSIE4FTNIPL7XJDDWG5Y3WHNGPGTZCLK",
      "httpBodyTechnologies": [
        "Hugo:0.67.0"
      ],
      "httpBodyUrls": [
        "/android-chrome-256x256.png",
        "http://creativecommons.org/licenses/by/3.0/",
        "/tags/test",
        "/manifest.json",
        "https://www.youtube.com/channel/UCFL0zft8LTS5doQIT31TyKg",
        "/posts/",
        "https://www.flaticon.com/",
        "https://twitch.tv/alyssadaemon",
        "https://twitter.com/alyssadaemon",
        "/css/style.fd06492eee9fad4f05ee0c59fcb8f1edc0241feb77715734a0c14ebdc8649ee374538911252447829bb8cf02753ffd40d130f294fc7b0093fb89f3c17dc1c245.css",
        "/tags/welcome",
        "/images/me.jpg",
        "https://gohugo.io/",
        "/android-chrome-192x192.png",
        "https://keybase.io/alyssadaemon",
        "/js/main.min.7a7affe005d4458070fe2d18754f1f2aa58e393c0d5ec7d2eaf69824ead229353dc86e7ccfff424c219e4312673f2ce05ab6dfb0da84bec1865b8d59ba7283bb.js",
        "https://queer.af/@alyssadaemon",
        "mailto:alyssa@alyssadaemon.dev",
        "/humans.txt",
        "/posts/welcome/",
        "/images/memoji.png",
        "/apple-touch-icon.png",
        "/android-chrome-512x512.png",
        "https://gitlab.com/alyssadaemon",
        "https://github.com/bjacquemet/personal-web",
        "/posts/rms/",
        "/favicon-32x32.png",
        "/android-chrome-1024x1024.png",
        "https://www.flaticon.com/authors/yannick",
        "https://raw.githubusercontent.com/bjacquemet/personal-web/master/LICENSE",
        "/about",
        "/index.xml",
        "/safari-pinned-tab.svg",
        "https://twemoji.twitter.com",
        "https://github.com/alyssadaemon",
        "https://linkedin.com/in/alyssadaemon",
        "/js/twemoji.min.8e97b9c376fd638d705cf3a3f54bf20d42f81abc6409eb8916809c0f9fe6dc7fecd01b74e4926530ef556419bcc0cbc3a37442484d1e3ba3fd6288b77de320d7.js",
        "/",
        "/alyssa.asc",
        "/favicon-16x16.png",
        "https://t.me/AlyssaDaemon"
      ],
      "httpBodyMetaTags": {
        "description": "Queer Code from a queer gal",
        "og:description": "Welcome everyone to my little corner. I've decided to move over from Jekyll to Hugo, though since there wasn't much on my old site, I am starting new and clean.",
        "twitter:description": "Welcome everyone to my little corner. I've decided to move over from Jekyll to Hugo, though since there wasn't much on my old site, I am starting new and clean."
      },
      "httpBodyByteSize": 21885,
      "httpBodyPageTitle": "Welcome"
    }
  },
  "eddycjy.com": {
    "/": {
      "date": "2026-02-13T23:01:41Z",
      "httpProtocol": "http/1.1, tls/1.2",
      "httpStatus": 200,
      "ipAddress": "193.112.63.208",
      "ipASN": "Shenzhen Tencent Computer Systems Company Limited",
      "ipCountry": "China",
      "httpHeaderHash": "KWFKILMKYWMTYHUL3GGGIDYO37ADEAAP",
      "httpHeaderTechnologies": [
        "Nginx"
      ],
      "httpHeaderUrls": [],
      "httpHeaderByteSize": 333,
      "httpBodyHash": "RB7ANSY3JNTETUK4AWQK3KDHMOGRYOGC",
      "httpBodyTechnologies": [
        "Hugo:0.67.0",
        "Google Analytics"
      ],
      "httpBodyUrls": [
        "https://eddycjy.com/posts/",
        "/favicon.ico",
        "/posts/go/var/",
        "https://www.google-analytics.com/analytics.js",
        "https://eddycjy.com/js/main.min.784417f5847151f848c339cf0acb13a06cbb648b1483435a28ed4556c4ead69b.js",
        "/posts/go/import-generics/",
        "https://github.com/eddycjy",
        "/page/2/",
        "/page/19/",
        "/favicon-32x32.png",
        "/posts/go/nil-func/",
        "https://eddycjy.com/index.xml",
        "https://eddycjy.com/about/",
        "/",
        "/tags/go/",
        "https://github.com/Track3/hermit",
        "https://eddycjy.com/go-categories/",
        "/favicon-16x16.png",
        "/posts/go/118-module/",
        "/posts/go/again-mutex/",
        "https://eddycjy.com/css/style.min.d3141168199607bf3a517216ce3c263814eecdbc8fca72a9a88700799a838219.css",
        "/page/3/",
        "https://golang3.eddycjy.com/",
        "https://eddycjy.com/posts/index.xml",
        "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css",
        "/posts/go/throw/",
        "/site.webmanifest",
        "/posts/go/map-con/",
        "https://gohugo.io/",
        "/apple-touch-icon.png",
        "/posts/go/generics-design/",
        "https://eddycjy.com/css/styles.css",
        "https://eddycjy.com/k8s-categories/",
        "/posts/go/118-cut/",
        "https://eddycjy.com",
        "/safari-pinned-tab.svg",
        "/posts/go/118-build-info/",
        "https://golang1.eddycjy.com/",
        "https://golang2.eddycjy.com/",
        "http://www.beian.miit.gov.cn/",
        "https://readmore.openwrite.cn/js/readmore.js",
        "/tags/go1.18/",
        "https://eddycjy.com/tags/"
      ],
      "httpBodyMetaTags": {
        "og:description": "煎鱼,博客,go,golang,源码分析,系列教程",
        "twitter:description": "煎鱼,博客,go,golang,源码分析,系列教程"
      },
      "httpBodyByteSize": 23375,
      "httpBodyPageTitle": "煎鱼"
    },
    "/posts/generics-history/": {
      "date": "2026-02-13T21:28:10Z",
      "httpProtocol": "http/1.1, tls/1.2",
      "httpStatus": 200,
      "ipAddress": "193.112.63.208",
      "ipASN": "Shenzhen Tencent Computer Systems Company Limited",
      "ipCountry": "China",
      "httpHeaderHash": "JRORPFWGO2ZRFK5SP6CRTHIM2IMMWEW2",
      "httpHeaderTechnologies": [
        "Nginx"
      ],
      "httpHeaderUrls": [],
      "httpHeaderByteSize": 333,
      "httpBodyHash": "ZZBJHF6XPYQH2VHFE3VH5DR6NXVFBAHT",
      "httpBodyTechnologies": [],
      "httpBodyUrls": [
        "/posts/objects/",
        "/posts/nil-func/",
        "https://go2goplay.golang.org/",
        "https://image.eddycjy.com/4d630c956a58bd4b88a4a6e0cddbb845.gif",
        "/book.min.6df681b0bb21155cba49f6078e3559216772d8e03e780d240c73ea21817ed5e5.css",
        "/posts/less-is-more/",
        "https://image.eddycjy.com/29573ea87fc02ecc0215f01b16993580.png",
        "https://image.eddycjy.com/f3ccdd27d2000e3f9255a7e3e2c48800.jpg",
        "#总结",
        "#与其他语言交流",
        "https://image.eddycjy.com/0609310f0a775b57fe017f56c1e50195.jpg",
        "#go-泛型尝鲜",
        "/posts/go-golang/",
        "/posts/type-after/",
        "/posts/errors-with/",
        "/posts/generics-package/",
        "#为什么不用书名号",
        "https://github.com/eddycjy",
        "/posts/operator/",
        "/posts/left-func/",
        "https://github.com/golang/proposal/blob/master/design/go2draft-type-parameters.md",
        "/svg/toc.svg",
        "/posts/nil-nil/",
        "/posts/concurrent-mapslice/",
        "#为什么那么久都没有泛型",
        "https://image.eddycjy.com/c9c48e9479c7036f7d5a33b6ab49e855.jpg",
        "/",
        "/svg/menu.svg",
        "/posts/generics/",
        "#接口和泛型有什么区别",
        "https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh",
        "/posts/annotation/",
        "#为什么不用括号",
        "#泛型的发展历程",
        "/posts/started-go/",
        "/posts/cyclic-import/",
        "/posts/error-handler/",
        "#为什么不用尖括号",
        "https://blog.golang.org/11years",
        "https://image.eddycjy.com/8ce3c37629e8051e08e66a3143fce9c6.png",
        "/posts/repeat-mutex/",
        "/posts/generics-history/",
        "#为什么纠结那么久",
        "https://research.swtch.com/generic",
        "https://image.eddycjy.com/5fc715bb226563645dfc6bb4da210c84.jpg",
        "#为什么需要泛型",
        "/posts/go-env/",
        "https://eddycjy.com/",
        "http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#FAQ106%22",
        "#泛型的战争",
        "/posts/func-overloading-defalut/",
        "http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html",
        "#什么是泛型",
        "https://image.eddycjy.com/b3d6ea4704175a81e91762ec9953e163.png",
        "/en.search.min.6ce9efe74a0b1d8ba73f852cd6b5e8ea13003b52696beacaa5e3490414e65985.js",
        "#参考",
        "/favicon.png",
        "/posts/basis-type-new/",
        "/posts/context-cancel/",
        "https://github.com/eddycjy/go-design-book"
      ],
      "httpBodyMetaTags": {
        "description": "泛型历史 大家好，我是煎鱼。\n在 2020~2021 年，Go 语言的泛型讨论频频出现在各微信群，且冲上了国内外各大文章的 “头条”。\n如下图：\n好家伙，我最早了解到时是考虑 Go1.16 释出，后面又推到了 Go1.17，接着现在又延期到了 Go1.18 了（2021 年底）。按规划，Go1.18 将正式释出泛型，终于不鸽了。\n看到了信息的表象后，再想想为什么泛型 “这件事情” 突然醒目起来了，其原因之一是由官方 Go，11 岁 的博文所引爆的，做了一轮宣传。\n同时近日举办的 GopherCon2020 大会，Robert Griesemer 分享的 Typing [Generic] Go。更正式的让 Go 泛型更面向了大众，也侧面的说明官方认为其已经到达了一个新的阶段了，进入最终实现阶段。\n事不宜迟，既然官方都已经摩拳擦掌了，我们的学习之路也得跟上，本文将会介绍 Go 泛型是什么，并了解他的过去和历史，\n什么是泛型 泛型程序设计（generic programming）是程序设计语言的一种风格或范式。泛型允许程序员在强类型语言中编写代码时，使用一些以后才确定的类型，其在真正实例化时才会为这些参数指确定类型。另外各语言和其编译器、运行环境对泛型的支持均不一样，因此需要针对来辩证。\n简单来讲，泛型就是参数化多态。其可根据实参类型生成不同的版本，支持任意数量的调用：\nfunc F(a, b T) T{ return a+b } // T 为 int F(1, 2) // T 为 string F(\"1\", \"2\") 在编译时期编译器便确定其 T 的入参类型。这也是 Go 泛型实现的要求之一 “编译时类型安全”。\n为什么需要泛型 这时候可能会有人说，没有泛型也可以啊…感觉写业务代码没什么影响，与其搞泛型不如搞好 errors（具体可见：错误处理章节）。\n但泛型是有其所需的场景，最常见的是像基础库在处理获取配置中心数据时，就要处理类型，时常遇到下述场景：\n如果使用接口（interface）类型来做，也得 switch.",
        "og:description": "泛型历史 大家好，我是煎鱼。\n在 2020~2021 年，Go 语言的泛型讨论频频出现在各微信群，且冲上了国内外各大文章的 “头条”。\n如下图：\n好家伙，我最早了解到时是考虑 Go1.16 释出，后面又推到了 Go1.17，接着现在又延期到了 Go1.18 了（2021 年底）。按规划，Go1.18 将正式释出泛型，终于不鸽了。\n看到了信息的表象后，再想想为什么泛型 “这件事情” 突然醒目起来了，其原因之一是由官方 Go，11 岁 的博文所引爆的，做了一轮宣传。\n同时近日举办的 GopherCon2020 大会，Robert Griesemer 分享的 Typing [Generic] Go。更正式的让 Go 泛型更面向了大众，也侧面的说明官方认为其已经到达了一个新的阶段了，进入最终实现阶段。\n事不宜迟，既然官方都已经摩拳擦掌了，我们的学习之路也得跟上，本文将会介绍 Go 泛型是什么，并了解他的过去和历史，\n什么是泛型 泛型程序设计（generic programming）是程序设计语言的一种风格或范式。泛型允许程序员在强类型语言中编写代码时，使用一些以后才确定的类型，其在真正实例化时才会为这些参数指确定类型。另外各语言和其编译器、运行环境对泛型的支持均不一样，因此需要针对来辩证。\n简单来讲，泛型就是参数化多态。其可根据实参类型生成不同的版本，支持任意数量的调用：\nfunc F(a, b T) T{ return a+b } // T 为 int F(1, 2) // T 为 string F(\"1\", \"2\") 在编译时期编译器便确定其 T 的入参类型。这也是 Go 泛型实现的要求之一 “编译时类型安全”。\n为什么需要泛型 这时候可能会有人说，没有泛型也可以啊…感觉写业务代码没什么影响，与其搞泛型不如搞好 errors（具体可见：错误处理章节）。\n但泛型是有其所需的场景，最常见的是像基础库在处理获取配置中心数据时，就要处理类型，时常遇到下述场景：\n如果使用接口（interface）类型来做，也得 switch."
      },
      "httpBodyByteSize": 26037,
      "httpBodyPageTitle": "泛型历史 | Go 语言设计哲学"
    },
    "/posts/nil-func/": {
      "date": "2026-02-13T21:54:19Z",
      "httpProtocol": "http/1.1, tls/1.2",
      "httpStatus": 200,
      "ipAddress": "193.112.63.208",
      "ipASN": "Shenzhen Tencent Computer Systems Company Limited",
      "ipCountry": "China",
      "httpHeaderHash": "CK4NS54WSJ63U4M2KIZCGIMUMOVXJOH6",
      "httpHeaderTechnologies": [
        "Nginx"
      ],
      "httpHeaderUrls": [],
      "httpHeaderByteSize": 333,
      "httpBodyHash": "V6QFX4QW3XVEEND66XHYRV2M6VVVP7PV",
      "httpBodyTechnologies": [],
      "httpBodyUrls": [
        "/posts/cyclic-import/",
        "/en.search.min.6ce9efe74a0b1d8ba73f852cd6b5e8ea13003b52696beacaa5e3490414e65985.js",
        "https://eddycjy.com/",
        "/posts/basis-type-new/",
        "/",
        "#为什么",
        "/svg/toc.svg",
        "/posts/operator/",
        "/posts/left-func/",
        "/posts/generics-package/",
        "/favicon.png",
        "/posts/generics/",
        "/posts/annotation/",
        "/posts/error-handler/",
        "https://github.com/eddycjy",
        "/posts/concurrent-mapslice/",
        "https://github.com/eddycjy/go-design-book",
        "https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh",
        "/posts/context-cancel/",
        "https://image.eddycjy.com/f3ccdd27d2000e3f9255a7e3e2c48800.jpg",
        "/book.min.6df681b0bb21155cba49f6078e3559216772d8e03e780d240c73ea21817ed5e5.css",
        "#总结",
        "#示例",
        "/posts/less-is-more/",
        "/posts/repeat-mutex/",
        "/posts/generics-history/",
        "/svg/menu.svg",
        "/posts/nil-nil/",
        "/posts/errors-with/",
        "/posts/go-env/",
        "/posts/objects/",
        "/posts/nil-func/",
        "/posts/go-golang/",
        "/posts/started-go/",
        "/posts/type-after/",
        "/posts/func-overloading-defalut/",
        "https://image.eddycjy.com/ce617bbfc9e30c4f2afe3943c3de4ef1.png"
      ],
      "httpBodyMetaTags": {
        "description": "nil 调用函数 大家好，我是煎鱼。\n在我们 Go 的技术交流群里，有一个小伙伴提了一个程序方面的问题，还挺有意思的，分享给大家。\n示例 示例程序如下：\ntype T struct{} func (t *T) Hello() string { if t == nil { fmt.Println(\"脑子进煎鱼了\") return \"\" } return \"煎鱼进脑子了\" } func main() { var t *T t.Hello() 这段程序的运行结果是什么？\n从程序的分析来看，变量 t 并没有初始化，只是声明了类型。然后就直接调用了 Hello 方法，像是 nil 调用函数，理论上应该出现恐慌（panic）。\n运行结果是：\npanic: runtime error: invalid memory address or nil pointer dereference 对不对呢？\n显然，真正的运行结果是：\n脑子进煎鱼了 请你思考一下，想想这是为什么？\n为什么 问题的原因是：很多小伙伴认为变量 t 的值都是 nil 了，不应该还能调用到才对。\n更抽象化来讲，就是 ”程序是如何检查对象指针来寻找和调度所需函数“。\n实际上，在 Go 中，表达式 Expression.",
        "og:description": "nil 调用函数 大家好，我是煎鱼。\n在我们 Go 的技术交流群里，有一个小伙伴提了一个程序方面的问题，还挺有意思的，分享给大家。\n示例 示例程序如下：\ntype T struct{} func (t *T) Hello() string { if t == nil { fmt.Println(\"脑子进煎鱼了\") return \"\" } return \"煎鱼进脑子了\" } func main() { var t *T t.Hello() 这段程序的运行结果是什么？\n从程序的分析来看，变量 t 并没有初始化，只是声明了类型。然后就直接调用了 Hello 方法，像是 nil 调用函数，理论上应该出现恐慌（panic）。\n运行结果是：\npanic: runtime error: invalid memory address or nil pointer dereference 对不对呢？\n显然，真正的运行结果是：\n脑子进煎鱼了 请你思考一下，想想这是为什么？\n为什么 问题的原因是：很多小伙伴认为变量 t 的值都是 nil 了，不应该还能调用到才对。\n更抽象化来讲，就是 ”程序是如何检查对象指针来寻找和调度所需函数“。\n实际上，在 Go 中，表达式 Expression."
      },
      "httpBodyByteSize": 12282,
      "httpBodyPageTitle": "nil 调用函数 | Go 语言设计哲学"
    },
    "/posts/objects/": {
      "date": "2026-02-13T21:45:50Z",
      "httpProtocol": "http/1.1, tls/1.2",
      "httpStatus": 200,
      "ipAddress": "193.112.63.208",
      "ipASN": "Shenzhen Tencent Computer Systems Company Limited",
      "ipCountry": "China",
      "httpHeaderHash": "WPC3RQIC5FCLSC2337FMOTVTWXJP5FCV",
      "httpHeaderTechnologies": [
        "Nginx"
      ],
      "httpHeaderUrls": [],
      "httpHeaderByteSize": 333,
      "httpBodyHash": "BHF5TR2S7VUM6TKVEMBR3FGHSWOFYR5Q",
      "httpBodyTechnologies": [],
      "httpBodyUrls": [
        "/",
        "#结构体",
        "/posts/errors-with/",
        "https://eddycjy.com/",
        "/posts/error-handler/",
        "/posts/func-overloading-defalut/",
        "#参考",
        "/posts/operator/",
        "/posts/context-cancel/",
        "/posts/generics-history/",
        "../../../images/why-not-objects.png",
        "https://golangbot.com/structs-instead-of-classes/",
        "https://flaviocopes.com/golang-is-go-object-oriented/",
        "/posts/repeat-mutex/",
        "/favicon.png",
        "#继承是什么",
        "/posts/generics/",
        "/posts/concurrent-mapslice/",
        "https://github.com/eddycjy/go-design-book",
        "/en.search.min.6ce9efe74a0b1d8ba73f852cd6b5e8ea13003b52696beacaa5e3490414e65985.js",
        "#类是什么",
        "/posts/generics-package/",
        "https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh",
        "https://image.eddycjy.com/f3ccdd27d2000e3f9255a7e3e2c48800.jpg",
        "/book.min.6df681b0bb21155cba49f6078e3559216772d8e03e780d240c73ea21817ed5e5.css",
        "#组合",
        "../../../images/go-faq-objects.png",
        "https://en.wikipedia.org/wiki/Composition_over_inheritance",
        "https://www.reddit.com/r/golang/comments/a9rn6n/why_people_claim_that_go_is_not_object_oriented/",
        "/svg/menu.svg",
        "#类和继承-1",
        "/posts/nil-nil/",
        "/posts/objects/",
        "#结构和组合",
        "https://github.com/eddycjy",
        "/posts/started-go/",
        "/posts/type-after/",
        "/posts/cyclic-import/",
        "#总结",
        "/posts/nil-func/",
        "/posts/go-golang/",
        "/posts/left-func/",
        "/posts/annotation/",
        "/svg/toc.svg",
        "/posts/go-env/",
        "/posts/less-is-more/",
        "/posts/basis-type-new/",
        "#go-是面向对象的语言吗",
        "#为什么不支持类和继承",
        "https://www.reddit.com/r/golang/comments/a8zgvm/class_vs_new_type_receiver/"
      ],
      "httpBodyMetaTags": {
        "description": "类和继承 大家好，我是煎鱼。\n大家在早期学习 Go 时，一旦跨过语法的阶段后。马上就会进入到一个新的纠结点，Go 不支持面向对象吗？\n如下读者对我提问的疑问：\n这门编程语言里没有类（class）、继承（extends），没法一把搜了，面试问啥面向对象（OOP）？\n今天煎鱼就带大家一起来了解这之中的思考，Go 真的不支持吗？\n类和继承 类是什么 类（class）在面向对象编程中是一种面向对象计算机编程语言的构造，是创建对象的蓝图，描述了所创建的对象共同的特性和方法（via @维基百科）。\n例子如下：\nclass SimpleClass { // 声明属性 public $var = '脑子进煎鱼了'; // 声明方法 public function displayVar() { echo $this-\u003evar; } } 每个类的定义都以关键字 class 开头，后面跟着类名，后面跟着一对花括号，里面包含有类的属性与方法的定义。\n继承是什么 继承是面向对象软件技术当中的一个概念，如果一个类别 B “继承自”另一个类别 A，就把这个 B 称为 “A的子类”，而把 A 称为 “B的父类别” 也可以称 “A 是 B 的超类”（via @维基百科）。\n例子如下：\n// 父类 class Foo { public function printItem($string) { echo '煎鱼1: ' . $string . PHP_EOL; } public function printPHP() { echo 'PHP is great.",
        "og:description": "类和继承 大家好，我是煎鱼。\n大家在早期学习 Go 时，一旦跨过语法的阶段后。马上就会进入到一个新的纠结点，Go 不支持面向对象吗？\n如下读者对我提问的疑问：\n这门编程语言里没有类（class）、继承（extends），没法一把搜了，面试问啥面向对象（OOP）？\n今天煎鱼就带大家一起来了解这之中的思考，Go 真的不支持吗？\n类和继承 类是什么 类（class）在面向对象编程中是一种面向对象计算机编程语言的构造，是创建对象的蓝图，描述了所创建的对象共同的特性和方法（via @维基百科）。\n例子如下：\nclass SimpleClass { // 声明属性 public $var = '脑子进煎鱼了'; // 声明方法 public function displayVar() { echo $this-\u003evar; } } 每个类的定义都以关键字 class 开头，后面跟着类名，后面跟着一对花括号，里面包含有类的属性与方法的定义。\n继承是什么 继承是面向对象软件技术当中的一个概念，如果一个类别 B “继承自”另一个类别 A，就把这个 B 称为 “A的子类”，而把 A 称为 “B的父类别” 也可以称 “A 是 B 的超类”（via @维基百科）。\n例子如下：\n// 父类 class Foo { public function printItem($string) { echo '煎鱼1: ' . $string . PHP_EOL; } public function printPHP() { echo 'PHP is great."
      },
      "httpBodyByteSize": 19929,
      "httpBodyPageTitle": "类和继承 | Go 语言设计哲学"
    }
  },
  "fortitude-solutions.com": {
    "/contact/": {
      "date": "2026-02-08T11:51:35Z",
      "httpProtocol": "h2, tls/1.3",
      "httpStatus": 200,
      "ipAddress": "18.208.88.157",
      "ipASN": "Amazon.com, Inc.",
      "ipCountry": "United States",
      "httpHeaderHash": "FYE45PWUWIPXGZZXB4Q77E6VC4TMBIUP",
      "httpHeaderTechnologies": [
        "HSTS",
        "Netlify"
      ],
      "httpHeaderUrls": [],
      "httpHeaderByteSize": 518,
      "httpBodyHash": "HYMCSZGJSMNEGM6QXNQZB5X6NPLPEWJE",
      "httpBodyTechnologies": [
        "Hugo:0.67.0"
      ],
      "httpBodyUrls": [
        "https://twitter.com/fortitudesolns",
        "https://github.com/FortitudeSolutions",
        "https://www.fortitude-solutions.com/contact",
        "https://www.linkedin.com/company/fortitude-solutions",
        "https://www.fortitude-solutions.com/images/shape-big.png",
        "https://www.fortitude-solutions.com",
        "https://github.com/orgs/FortitudeSolutions",
        "https://www.fortitude-solutions.com/images/logo.png",
        "https://www.fortitude-solutions.com/images/favicon.png ",
        "https://www.fortitude-solutions.com/images/shape-small.png",
        "https://www.fortitude-solutions.com/scss/style.min.8f4df3daba60a455e40b2b1e46b5a262756aa33020cbcd9943eae2f2127eac25.css"
      ],
      "httpBodyMetaTags": {
        "description": "Fortitude Solutions"
      },
      "httpBodyByteSize": 7185,
      "httpBodyPageTitle": "Contact Us"
    }
  },
  "michalbojanowski.com": {
    "/": {
      "date": "2026-02-07T13:54:19Z",
      "httpProtocol": "h2, tls/1.3",
      "httpStatus": 200,
      "ipAddress": "18.208.88.157",
      "ipASN": "Amazon.com, Inc.",
      "ipCountry": "United States",
      "httpHeaderHash": "J4OZMNFZJVNDB5KVAIZJLI7D37TCHF3X",
      "httpHeaderTechnologies": [
        "HSTS",
        "Netlify"
      ],
      "httpHeaderUrls": [],
      "httpHeaderByteSize": 401,
      "httpBodyHash": "W7A3F3H7TQ6N4EBKGWHIZ3TAWCS3UDM3",
      "httpBodyTechnologies": [
        "Hugo:0.81.0"
      ],
      "httpBodyUrls": [
        "https://github.com/hugo-apero/",
        "https://www.linkedin.com/in/mbojanowski",
        "https://scholar.google.com/citations?user=2mwKH1MAAAAJ\u0026hl=pl",
        "/about",
        "/img/favicon.ico",
        "http://orcid.org/0000-0001-7503-852X",
        "https://impactstory.org/u/0000-0001-7503-852X",
        "https://cdn.jsdelivr.net/npm/katex@0.13.13/dist/katex.min.css",
        "/project/",
        "https://twitter.com/mbojan",
        "https://blog.michalbojanowski.com/index.xml",
        "https://github.com/formspree/blogophonic-hugo",
        "/style.main.min.a3c38dbe8ca64d35820e1fcc872ffc118fe6c482f912e00de22587b873aeac03.css",
        "/",
        "/about/",
        "/license/",
        "img/ja3.png",
        "https://formspree.io",
        "/img/blogophonic-mark-dark.png",
        "https://blog.michalbojanowski.com/",
        "https://sciences.social/web/@mbojan",
        "/talk/",
        "/contact/",
        "/index.xml",
        "https://github.com/mbojan"
      ],
      "httpBodyMetaTags": {
        "description": "Hi! I am a social scientist, seasoned R developer and trainer. I use data, statistics and computer simulations to advance knowledge about social networks, conflict and cooperation in a variety of contexts. My goal is to practice and promote rigorous theorizing and testing in the social sciences.",
        "og:description": "Hi! I am a social scientist, seasoned R developer and trainer. I use data, statistics and computer simulations to advance knowledge about social networks, conflict and cooperation in a variety of contexts. My goal is to practice and promote rigorous theorizing and testing in the social sciences."
      },
      "httpBodyByteSize": 8193,
      "httpBodyPageTitle": "Michał Bojanowski"
    },
    "/2023/06/06/knitting-networks/": {
      "date": "2026-02-07T04:27:26Z",
      "httpProtocol": "h2, tls/1.3",
      "httpStatus": 200,
      "ipAddress": "98.84.224.111",
      "ipASN": "Amazon.com, Inc.",
      "ipCountry": "United States",
      "httpHeaderHash": "Y6MQP22GAWBKDGNCR7RY2EY77EBUUZVP",
      "httpHeaderTechnologies": [
        "HSTS",
        "Netlify"
      ],
      "httpHeaderUrls": [],
      "httpHeaderByteSize": 401,
      "httpBodyHash": "3CRUEIFVBBFMDE4IHRPCKHMQ4TJQVHDW",
      "httpBodyTechnologies": [
        "Hugo:0.67.0"
      ],
      "httpBodyUrls": [
        "http://jollygoodthemes.com",
        "https://blog.michalbojanowski.com/",
        "https://github.com/roryg/ghostwriter",
        "https://linkedin.com/in/mbojanowski/",
        "https://plus.google.com/share?url=https%3a%2f%2fblog.michalbojanowski.com%2f2023%2f06%2f06%2fknitting-networks%2f",
        "https://blog.michalbojanowski.com/dist/site.css",
        "https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css",
        "https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,400,600,700,300\u0026subset=latin,cyrillic-ext,latin-ext,cyrillic",
        "https://michalbojanowski.com/",
        "/tags/interview/",
        "https://blog.michalbojanowski.com/dist/syntax.css",
        "https://anchor.fm/tejiendoredes",
        "https://open.spotify.com/episode/1ZcWCjwzEdkPU5VxbzSoii?si=87f3ceef9c3649b3",
        "https://gohugo.io/",
        "https://twitter.com/NetworksPodcast",
        "https://www.facebook.com/sharer/sharer.php?u=https%3a%2f%2fblog.michalbojanowski.com%2f2023%2f06%2f06%2fknitting-networks%2f",
        "https://twitter.com/mbojan",
        "https://blog.michalbojanowski.com/index.xml",
        "https://blog.michalbojanowski.com/dist/mystyle.css",
        "https://stackoverflow.com/users/199746/micha%c5%82",
        "https://podcastaddict.com/knitting-networks-tejiendo-redes/episode/158855295",
        "//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.0.0/styles/github.min.css",
        "#",
        "https://disqus.com",
        "https://r-bloggers.com",
        "https://github.com/mbojan",
        "/post/knitting-networks/knitting-networks.png",
        "/",
        "/categories/networks/",
        "https://github.com/jbub",
        "https://michalbojanowski.com",
        "https://github.com/jbub/ghostwriter",
        "https://twitter.com/share?text=Interview%20for%20%27Knitting%20Networks%27%20podcast\u0026url=https%3a%2f%2fblog.michalbojanowski.com%2f2023%2f06%2f06%2fknitting-networks%2f",
        "https://disqus.com/embed/comments/?base=default\u0026f=brokering-closure\u0026t_u=https%3A%2F%2Fblog.michalbojanowski.com%2F2023%2F06%2F06%2Fknitting-networks%2F\u0026t_d=Interview%20for%20'Knitting%20Networks'%20podcast\u0026t_t=Interview%20for%20'Knitting%20Networks'%20podcast\u0026s_o=default#version=2ad8ee8902760829d9e04b8b01f3a1b6",
        "/dist/mystyle.css"
      ],
      "httpBodyMetaTags": {
        "description": "Episode 60 of the Knitting Networks podcast features Francisca Ortiz Ruiz interviewing me and my whining road into social networks. You can listen to the episode on Spotify, or here.\nKnitting Networks is a podcast Francisca Ortiz Ruiz and Alejandro Espinosa-Rada created in 2020 – first episode is from April 2020. They interview with various people working on network analysis. Follow them on Xweeter as @NetworksPodcast."
      },
      "httpBodyByteSize": 7931,
      "httpBodyPageTitle": "Interview for 'Knitting Networks' podcast · Michał Bojanowski"
    },
    "/page/2/": {
      "date": "2026-02-07T04:28:12Z",
      "httpProtocol": "h2, tls/1.3",
      "httpStatus": 200,
      "ipAddress": "98.84.224.111",
      "ipASN": "Amazon.com, Inc.",
      "ipCountry": "United States",
      "httpHeaderHash": "PPICZBT5XUL4XEWGPXLDFO2MJWAYVAP3",
      "httpHeaderTechnologies": [
        "HSTS",
        "Netlify"
      ],
      "httpHeaderUrls": [],
      "httpHeaderByteSize": 519,
      "httpBodyHash": "LRXMSLKYYHODFTYT5AV5CF45MGZMIYNO",
      "httpBodyTechnologies": [
        "Hugo:0.67.0"
      ],
      "httpBodyUrls": [
        "/tags/ergm",
        "/tags/coleman",
        "/tags/networks",
        "/tags/documentation",
        "/tags/vim",
        "/tags/psychology",
        "/tags/structural-holes",
        "/tags/burt",
        "/tags/evolution",
        "/tags/portuguese",
        "https://blog.michalbojanowski.com/2015/11/prezentacja-na-data-science-warsaw/",
        "/tags/sunbelt",
        "/tags/cooperation",
        "/tags/publication",
        "/tags/coordination",
        "/categories/social-science",
        "/tags/job",
        "/tags/stata",
        "/tags/voting",
        "/tags/inference",
        "/tags/statistics",
        "https://michalbojanowski.com",
        "/tags/science",
        "/categories/web",
        "https://blog.michalbojanowski.com/2016/05/studying-collaboration-networks-qualitatively/",
        "/tags/ubuntu",
        "https://blog.michalbojanowski.com/dist/syntax.css",
        "/tags/igraph",
        "/tags/sweave",
        "/tags/workshop",
        "/tags/simulation",
        "/categories/uncategorized",
        "https://blog.michalbojanowski.com/2016/10/metodologiczne-inspiracje-2016/",
        "https://blog.michalbojanowski.com/2015/09/linear-models-with-weighted-observations/",
        "https://blog.michalbojanowski.com/2016/03/sunbelt-and-eusn-workshops-on-using-r-and-igraph-for-sna/",
        "/tags/synat",
        "/tags/analysis",
        "/tags/economics",
        "/categories/networks",
        "/tags/network-closure",
        "https://github.com/jbub/ghostwriter",
        "https://github.com/roryg/ghostwriter",
        "/tags/poll",
        "/tags/report",
        "/tags/weighting",
        "/tags/conference",
        "/tags/social-influence",
        "http://jollygoodthemes.com",
        "/tags/research",
        "/tags/tournament",
        "/tags/social-selection",
        "/tags/historical-networks",
        "https://blog.michalbojanowski.com/",
        "https://blog.michalbojanowski.com/dist/site.css",
        "/tags/editing",
        "/tags/video",
        "/tags/sunbelt-xxxi-workshop",
        "https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,400,600,700,300\u0026subset=latin,cyrillic-ext,latin-ext,cyrillic",
        "/tags/book",
        "/tags/qualitative",
        "https://linkedin.com/in/mbojanowski/",
        "https://blog.michalbojanowski.com/2010/11/verifiable-and-secure-e-voting/",
        "//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.0.0/styles/github.min.css",
        "/tags/programming",
        "/tags/visualization",
        "/tags/ted",
        "/tags/talk",
        "/tags/mobility",
        "/tags/theory",
        "/tags/education",
        "/tags/job-ad",
        "/tags/rmarkdown",
        "/tags/ego-networks",
        "https://blog.michalbojanowski.com/2015/03/p-values-deemed-no-longer-significant/",
        "/tags/blog",
        "/tags/pajek",
        "/tags/paper",
        "/tags/smoking",
        "/tags/experiments",
        "/tags/heterogeneity",
        "https://github.com/mbojan",
        "/page/3/",
        "/tags/ucinet",
        "/tags/computing",
        "/tags/regression",
        "/categories/po-polsku",
        "https://twitter.com/mbojan",
        "/tags/science-of-science",
        "#",
        "/tags/nlp",
        "/index.xml",
        "/categories/r",
        "/tags/dynamics",
        "/tags/decisions",
        "/dist/mystyle.css",
        "https://github.com/jbub",
        "https://stackoverflow.com/users/199746/micha%c5%82",
        "/tags/maps",
        "/tags/surveys",
        "/tags/behavior",
        "/tags/elections",
        "/tags/collaboration",
        "/tags/sas",
        "https://gohugo.io/",
        "/tags/code-from-drawer",
        "/categories/game-theory",
        "https://blog.michalbojanowski.com/2010/12/r-with-vim/",
        "/tags/music",
        "/tags/homophily",
        "/tags/data-collection",
        "/tags/lspline",
        "/tags/network",
        "/tags/interview",
        "https://r-bloggers.com",
        "https://blog.michalbojanowski.com/index.xml",
        "/tags/reviewing",
        "/tags/sociology",
        "/tags/social-learning",
        "/tags/rgraph6",
        "/tags/statnet",
        "/tags/intergraph",
        "/categories/statistics",
        "/tags/splines",
        "/tags/sna",
        "/tags/occupational-mobility",
        "https://blog.michalbojanowski.com/dist/mystyle.css",
        "https://blog.michalbojanowski.com/2015/09/some-new-presentations/",
        "/",
        "/tags/icm",
        "/tags/sql",
        "/tags/eusn",
        "/tags/s3",
        "/tags/s4",
        "/tags/data",
        "/tags/recon",
        "/categories/geek",
        "https://blog.michalbojanowski.com/2015/11/szkolenie-z-analizy-sieciowej/",
        "https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css",
        "/tags/web"
      ],
      "httpBodyMetaTags": {
        "description": "Michał's ramblings on social science, social networks, statistics, data analysis, computing, game theory and alike"
      },
      "httpBodyByteSize": 15684,
      "httpBodyPageTitle": "Brokering Closure · Michał Bojanowski"
    },
    "/tags/ted/": {
      "date": "2026-02-07T03:32:32Z",
      "httpProtocol": "h2, tls/1.3",
      "httpStatus": 200,
      "ipAddress": "18.208.88.157",
      "ipASN": "Amazon.com, Inc.",
      "ipCountry": "United States",
      "httpHeaderHash": "G6MIIECDQKX55VOBJQ27KEGNFJNEHR3P",
      "httpHeaderTechnologies": [
        "HSTS",
        "Netlify"
      ],
      "httpHeaderUrls": [],
      "httpHeaderByteSize": 519,
      "httpBodyHash": "FVUMTYL66DVFYZDVRU7KJWFWFSII2CFU",
      "httpBodyTechnologies": [
        "Hugo:0.67.0"
      ],
      "httpBodyUrls": [
        "/",
        "/dist/mystyle.css",
        "https://gohugo.io/",
        "/tags/ted/index.xml",
        "http://jollygoodthemes.com",
        "https://stackoverflow.com/users/199746/micha%c5%82",
        "https://blog.michalbojanowski.com/2009/10/explanations/",
        "https://r-bloggers.com",
        "https://github.com/jbub",
        "https://github.com/mbojan",
        "https://blog.michalbojanowski.com/",
        "https://github.com/roryg/ghostwriter",
        "https://blog.michalbojanowski.com/index.xml",
        "https://blog.michalbojanowski.com/dist/site.css",
        "https://blog.michalbojanowski.com/dist/mystyle.css",
        "https://michalbojanowski.com",
        "https://github.com/jbub/ghostwriter",
        "https://blog.michalbojanowski.com/dist/syntax.css",
        "//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.0.0/styles/github.min.css",
        "https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css",
        "https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,400,600,700,300\u0026subset=latin,cyrillic-ext,latin-ext,cyrillic",
        "#",
        "https://twitter.com/mbojan",
        "https://linkedin.com/in/mbojanowski/"
      ],
      "httpBodyMetaTags": {
        "description": "Michał's ramblings on social science, social networks, statistics, data analysis, computing, game theory and alike"
      },
      "httpBodyByteSize": 4276,
      "httpBodyPageTitle": "ted · Michał Bojanowski"
    }
  },
  "solidsoft.pl": {
    "/training/": {
      "date": "2026-02-07T09:36:02Z",
      "httpProtocol": "h2, tls/1.3",
      "httpStatus": 200,
      "ipAddress": "18.208.88.157",
      "ipASN": "Amazon.com, Inc.",
      "ipCountry": "United States",
      "httpHeaderHash": "VYWZK7OMANHWYAOLCSCQGISVAIODPAAS",
      "httpHeaderTechnologies": [
        "HSTS",
        "Netlify"
      ],
      "httpHeaderUrls": [],
      "httpHeaderByteSize": 402,
      "httpBodyHash": "7RNUVR3QIZFV3G73IVUINW3HEWP4BDUH",
      "httpBodyTechnologies": [
        "Hugo:0.67.0"
      ],
      "httpBodyUrls": [
        "https://bottega.com.pl/?utm_source=solidsoft\u0026utm_medium=referral",
        "mailto:marcin.zajaczkowski+training@solidsoft.pl?Subject=Training",
        "https://blog.solidsoft.pl/training/automatic-code-testing-java-spock-junit5/",
        "#",
        "/logo.png",
        "/subscribe",
        "https://github.com/szpak/mockito-java8",
        "https://stackoverflow.com/users/313516/marcin-zaj%c4%85czkowski",
        "/lib/swiper/swiper.min.4fd2b6bd4884a629931f5c7fbe9c710b9f47aa103580ab8fd66d98e694fbbe9a.css",
        "/favicon.ico",
        "/training#other-training-topics",
        "https://blog.solidsoft.pl/talks/",
        "https://github.com/szpak/spock-global-unroll/",
        "/showcase",
        "/manifest.json",
        "https://gohugo.io/",
        "/css/custom.min.css",
        "https://github.com/Codearte/gradle-nexus-staging-plugin/",
        "https://blog.solidsoft.pl/training/continuous-integration-and-delivery-jenkins/",
        "data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='250px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E",
        "/about",
        "/talks",
        "/archive",
        "/training",
        "/favicon.png",
        "https://github.com/zzossig/hugo-theme-zzo",
        "https://github.com/szpak",
        "/training/automatic-code-testing-java-spock-junit5",
        "https://webmention.io/blog.solidsoft.pl/webmention",
        "/training/continuous-integration-and-delivery-jenkins",
        "/posts",
        "/about/",
        "/css/main.min.css",
        "/css/fonts.min.css",
        "/apple-touch-icon.png",
        "https://twitter.com/SolidSoftBlog",
        "https://blog.solidsoft.pl/training/",
        "https://github.com/szpak/gradle-pitest-plugin",
        "/",
        "/tags",
        "/categories",
        "https://blog.solidsoft.pl/training/index.xml"
      ],
      "httpBodyMetaTags": {
        "description": "Automatic code testing for Java developers with Spock and JUnit 5 (with TDD) and also some other training topics",
        "og:description": "Automatic code testing for Java developers with Spock and JUnit 5 (with TDD) and also some other training topics"
      },
      "httpBodyByteSize": 30927,
      "httpBodyPageTitle": "Training \u0026 Consulting | Solid Soft"
    }
  },
  "wannemacher.us": {
    "/": {
      "date": "2026-02-14T07:12:36Z",
      "httpProtocol": "http/1.1, tls/1.3",
      "httpStatus": 200,
      "ipAddress": "18.165.83.70",
      "ipASN": "Amazon.com, Inc.",
      "ipCountry": "United States",
      "httpHeaderHash": "E4M7ZLSMQS7VOWZ5DGA5ZTEZCL3F3ZD4",
      "httpHeaderTechnologies": [
        "Amazon S3",
        "Amazon CloudFront",
        "Amazon Web Services"
      ],
      "httpHeaderUrls": [],
      "httpHeaderByteSize": 474,
      "httpBodyHash": "AC4SNKJFGVH3SGULLZM6FWRERDD3EANN",
      "httpBodyTechnologies": [
        "Hugo:0.67.0"
      ],
      "httpBodyUrls": [
        "/posts/p588/",
        "https://github.com/ewannema",
        "/dist/css/app.955516233bcafa4d2a1c13cea63c7b50.css",
        "/posts/",
        "/posts/p516/",
        "/posts/p540/",
        "/posts/p564/",
        "https://blog.wannemacher.us/",
        "/posts/p482/",
        "/posts/p558/",
        "https://twitter.com/ericwannemacher",
        "https://blog.wannemacher.us/index.xml",
        "/dist/js/app.3fc0f988d21662902933.js",
        "/about/",
        "/posts/p573/",
        "/scriptsprograms/"
      ],
      "httpBodyMetaTags": {
        "og:description": "Engineering, one way or another",
        "twitter:description": "Engineering, one way or another"
      },
      "httpBodyByteSize": 15805,
      "httpBodyPageTitle": "Forward or Reverse"
    }
  }
}