{"id":3430,"date":"2022-07-31T19:46:49","date_gmt":"2022-07-31T11:46:49","guid":{"rendered":"https:\/\/www.chenqing.work\/?p=3430"},"modified":"2022-08-12T17:27:49","modified_gmt":"2022-08-12T09:27:49","slug":"%f0%9f%92%a1%e8%af%91-%e4%b8%87%e7%89%a9%e7%9a%86-x","status":"publish","type":"post","link":"https:\/\/www.chenqing.work\/?p=3430","title":{"rendered":"\ud83d\udca1\u8bd1 | \u4e07\u7269\u7686 X"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1272\" src=\"https:\/\/www.chenqing.work\/wp-content\/uploads\/2022\/07\/rohit-tandon-9wg5jCEPBsw-unsplash.jpg\" alt=\"\" class=\"wp-image-3467\"\/><\/figure>\n\n\n\n<p>\u539f\u6587\uff1a<a href=\"https:\/\/lukeplant.me.uk\/blog\/posts\/everything-is-an-x-pattern\/\" data-type=\"URL\" data-id=\"https:\/\/lukeplant.me.uk\/blog\/posts\/everything-is-an-x-pattern\/\">Everything is an X<\/a><\/p>\n\n\n\n<p>\u201c\u4e07\u7269\u7686 X\u201d \u662f\u4e00\u79cd\u66f4\u4e0a\u5c42\u7684\u6a21\u5f0f\uff0c\u88ab\u5e94\u7528\u4e8e\u591a\u79cd\u7cfb\u7edf\u7684\u8bbe\u8ba1\u4e2d\uff0c\u5305\u62ec\u7f16\u7a0b\u8bed\u8a00\u548c\u7528\u6237\u63a5\u53e3\u3002\u5b83\u6709\u5f88\u591a\u4f18\u70b9\uff0c\u4e5f\u6709\u4e00\u4e9b\u7f3a\u70b9\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u8ba8\u8bba\u5176\u4e2d\u7684\u4e00\u4e9b\uff0c\u518d\u770b\u51e0\u4e2a\u4f8b\u5b50\uff0c\u4ee5\u5e2e\u52a9\u7406\u89e3\u3002<\/p>\n\n\n\n<p>\u5f53\u6211\u4eec\u8bf4\u201c\u4e07\u7269\u201d\u65f6\uff0c\u6307\u5411\u662f\u6bd4\u8f83\u677e\u6563\u7684\u2014\u2014\u7cfb\u7edf\u91cc\u7684\u5f88\u591a\u4e8b\u7269\u5e76\u4e0d\u662f\u201cX\u201d\u7684\u5b9e\u4f8b\uff0c\u800c\u662f\u66f4\u4f4e\u5c42\u6216\u8005\u5b8c\u5168\u4e0d\u540c\u7684\u4e8b\u7269\u3002\u201c\u4e07\u7269\u7686 X\u201d\u5c31\u662f\u6307\u201c\u7cfb\u7edf\u91cc\u6709\u60ca\u4eba\u6570\u91cf\u7684\u4e8b\u7269\u662f X \u7684\u5b9e\u4f8b\u201d<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u4f18\u70b9<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>\u5bf9\u5b9e\u73b0\u8005\u7b80\u5355<\/strong>\u3002\u4e0d\u9700\u8981\u4e3a\u7cfb\u7edf\u4e2d\u6bcf\u4e00\u4e2a\u65b0\u4e8b\u7269\u8bbe\u8ba1\u548c\u5b9e\u73b0\u4e00\u4e2a\u65b0\u7684\u63a5\u53e3\uff0c\u53d6\u800c\u4ee3\u4e4b\u7684\u662f\u8bbe\u8ba1\u4e00\u4e2a\u53ef\u4ee5\u56db\u5904\u91cd\u7528\u7684\u63a5\u53e3\uff0c\u53ea\u5728\u5fc5\u8981\u7684\u65f6\u5019\u91cd\u65b0\u5b9a\u4e49\u3002<\/li><li><strong>\u5bf9\u7528\u6237\u7b80\u5355<\/strong>\u3002\u7528\u6237\u53ea\u9700\u8981\u5b66\u4e60\u4e00\u4e2a\u4e8b\u7269\uff0c\u5728\u4e00\u4e2a\u9886\u57df\u589e\u52a0\u7684\u77e5\u8bc6\u53ef\u4ee5\u7acb\u5373\u8fc1\u79fb\u5230\u8bb8\u591a\u5176\u4ed6\u9886\u57df\u3002<\/li><li><strong>\u5143\u80fd\u529b<\/strong>\u3002\u4e0d\u53ea\u662f\u7528\u6237\u80fd\u5c06\u4ece\u4e00\u4e2a\u5b9e\u4f8b\u4e2d\u5b66\u4e60\u5230\u7684\u77e5\u8bc6\u3001\u6280\u80fd\u8fd0\u7528\u5230\u53e6\u4e00\u4e2a\u9886\u57df\uff0c\u201cX\u201d\u63a5\u53e3\u5e38\u5e38\u53ef\u4ee5\u88ab\u63d0\u5347\u5230\u66f4\u9ad8\u4e00\u4e2a\u5c42\u6b21\u8fdb\u884c\u8fd0\u7528\uff0c\u4ece\u800c\u8d4b\u4e88\u7528\u6237\u8d85\u80fd\u529b\u2014\u2014\u901a\u8fc7\u518d\u589e\u52a0\u4e00\u70b9\u5fc5\u8981\u7684\u77e5\u8bc6\uff0c\u7528\u6237\u5c31\u80fd\u4ece\u64cd\u7eb5 X \u8fc1\u79fb\u5230\u64cd\u7eb5 \u5143-X\u3002\u5f53\u5143\u4e5f\u5b58\u5728\u82e5\u5e72\u5c42\u65f6\uff0c\u8fd9\u79cd\u6a21\u5f0f\u7684\u53e6\u4e00\u79cd\u540d\u79f0\u4e3a\u201cX all the way down\u201d\u3002<\/li><li><strong>\u4f18\u96c5\u800c\u5bcc\u7f8e\u611f<\/strong>\u3002\u9664\u4e86\u5b9e\u7528\u6027\uff0c\u8fd9\u6837\u7684\u7cfb\u7edf\u8bbe\u8ba1\u4e5f\u5177\u6709\u7f8e\u5b66\u4ef7\u503c\u3002<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u7f3a\u70b9<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>\u5f3a\u884c\u8ba9\u7cfb\u7edf\u4e2d\u67d0\u4e9b\u4e8b\u7269\u7684\u884c\u4e3a\u7b26\u5408\u201cX\u201d\u7684\u5b9a\u4e49\uff0c\u4f1a\u4ea7\u751f\u7cdf\u7cd5\u3001\u53e4\u602a\u7684\u9002\u914d\uff0c\u53ef\u80fd\u9020\u6210\uff1a<ul><li>\u80fd\u529b\u4e0d\u8db3\u7684\u63a5\u53e3\uff0c\u9700\u8981\u4ee5\u67d0\u79cd\u65b9\u5f0f\u6765\u8865\u6551\u3002<\/li><li>\u80fd\u529b\u8fc7\u5f3a\u7684\u81c3\u80bf\u63a5\u53e3\u3002<\/li><li>\u4f7f\u5f97\u201cX\u201d\u8fc7\u4e8e\u5bbd\u6cdb\u800c\u5bfc\u81f4\u65e0\u7528\u3002<\/li><\/ul><\/li><li>\u7ed9\u7528\u6237\u66f4\u9ad8\u5c42\u6b21\u3001\u66f4\u5143\u7ea7\u522b\u7684\u63a5\u53e3\u53ef\u80fd\u662f\u5728\u7ed9\u81ea\u5df1\u5236\u9020\u9ebb\u70e6\uff0c\u675f\u7f1a\u4f60\u91cd\u6784\u6216\u8005\u4f18\u5316\u5185\u90e8\uff0c\u56e0\u4e3a\u5f00\u653e\u7ed9\u7528\u6237\u7684\u5185\u5bb9\u592a\u591a\u4e86\u3002<\/li><li>\u5f53\u4f60\u51fa\u4e8e\u52a1\u5b9e\u7684\u539f\u56e0\u6253\u7834\u4e86\u201c\u4e07\u7269\u7686 X\u201d\u6a21\u5f0f\u65f6\uff0c\u5c31\u5728\u8bbe\u8ba1\u4e2d\u7559\u4e0b\u4e86\u4e00\u4e9b\u4e11\u964b\u7684\u89d2\u843d\u3002<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u4f8b\u5b50<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">\u7f16\u7a0b<\/h2>\n\n\n\n<p><strong>Java\uff1a\u4e07\u7269\u7686\u7c7b<\/strong><\/p>\n\n\n\n<p>\u4e3a API \u5982\u4f55\u5de5\u4f5c\u63d0\u4f9b\u4e86\u4e00\u79cd\u786e\u5b9a\u7684\u4e00\u81f4\u6027\uff0c\u51cf\u5c11\u4e86\u5b66\u4e60\u4e00\u4e2a\u65b0\u5e93\u7684\u5de5\u4f5c\u91cf\u3002<\/p>\n\n\n\n<p>\u5728\u5143\u7ea7\u522b\uff0cJava \u63d0\u4f9b\u7684\u80fd\u529b\u6709\u9650\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e00\u4e9b\u53cd\u5c04\u80fd\u529b\u8ba9\u7c7b\u80fd\u591f\u8868\u73b0\u5f97\u5982\u540c\u8fd0\u884c\u6001\u7684\u5bf9\u8c61\uff0c\u5c3d\u7ba1\u5e76\u4e0d\u6df1\u5165\uff08\u76f8\u6bd4 Python\uff09\u3002<\/p>\n\n\n\n<p>Java \u7684\u57fa\u672c\u7c7b\u578b\u6253\u7834\u4e86\u81ea\u5df1\u4e07\u7269\u57fa\u4e8e\u7c7b\u7684\u6a21\u5f0f\uff0c\u610f\u5473\u7740\u5f00\u53d1\u8005\u5fc5\u987b\u5904\u7406\u88c5\u7bb1\u3001\u81ea\u52a8\u88c5\u7bb1\u8fd9\u4e9b\u4e8b\u60c5\u3002Javascript \u7684 Number \u7c7b\u578b\u4e5f\u6709\u7c7b\u4f3c\u95ee\u9898\u3002<\/p>\n\n\n\n<p><strong>Python\uff1a\u4e07\u7269\u7686\u5bf9\u8c61<\/strong><\/p>\n\n\n\n<p>\u6ce8\u610f\u8fd9\u548c Java \u7248\u672c\u7684\u4e07\u7269\u7686\u7c7b\/\u5bf9\u8c61\u975e\u5e38\u4e0d\u540c\uff0c\u6709\u66f4\u591a\u7684\u4e8b\u7269\u6210\u4e3a\u771f\u6b63\u7684\u8fd0\u884c\u65f6\u5bf9\u8c61\uff0c\u5305\u62ec\u51fd\u6570\u3001\u65b9\u6cd5\u3001\u7c7b\u578b\/\u7c7b\u548c\u6a21\u5757\uff0c\u4ee5\u53ca\u7c7b\u5b9e\u4f8b\u3002\u8fd9\u9020\u5c31\u4e86 Python \u91cc\u53c2\u6570\u5316\u8fd9\u79cd\u6781\u5176\u5f3a\u5927\u548c\u901a\u7528\u7684\u6a21\u5f0f\u3002<\/p>\n\n\n\n<p>\u4f60\u540c\u6837\u80fd\u4ece\u5143\u7c7b\u4e2d\u83b7\u5f97\u8d85\u80fd\u529b\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u5b9e\u4f8b\u7686\u5bf9\u8c61<\/li><li>\uff08\u4ea7\u751f\u5b9e\u4f8b\u7684\uff09\u7c7b\u7686\u5bf9\u8c61<\/li><li>\uff08\u4ea7\u751f\u7c7b\u7684\uff09\u5143\u7c7b\u7686\u5bf9\u8c61<\/li><\/ul>\n\n\n\n<p>\u6240\u4ee5\u5143\u7c7b\u7f16\u7a0b\u4ec5\u4ec5\u662f\u4e00\u79cd\u6b63\u5e38\u7684\u7f16\u7a0b\u65b9\u5f0f\u3002\u80fd\u901a\u8fc7 REPL \u5b9e\u73b0\uff0c\u4e5f\u80fd\u901a\u8fc7\u4f60\u5df2\u7ecf\u638c\u63e1\u7684\u4efb\u4f55\u5176\u4ed6\u6280\u672f\u5b9e\u73b0\u3002\u4f7f\u7528\u5143\u7c7b\u7f16\u7a0b\u65e0\u7591\u9700\u8981\u5b66\u4e60\u65b0\u4e1c\u897f\uff0c\u4f46\u5de5\u4f5c\u673a\u5236\u90fd\u662f\u7c7b\u4f3c\u7684\u3002\u611f\u89c9\u4e0a\uff0cPython \u5c31\u50cf\u662f\u7531 Python \u6784\u6210\u3002<\/p>\n\n\n\n<p>\u8fd9\u540c\u6837\u6709\u7f3a\u70b9\u3002\u4f8b\u5982\uff0cPython \u7684 integer \u7c7b\u578b\u662f\u5b8c\u5b8c\u5168\u5168\u7684 Python \u5bf9\u8c61\uff0c\u6bd4\u7d27\u51d1\u8868\u793a\u65b9\u5f0f\uff08\u5982 C\uff09\u6d6a\u8d39\u5185\u5b58\u3002\u800c\u4e14\u5b83\u4eec\u662f\u4e0d\u53ef\u53d8\u7684\uff0c\u505a\u4e00\u70b9\u7b80\u5355\u7684\u8c03\u6574\u5c31\u4f1a\u5f15\u53d1\u5185\u5b58\u91cd\u5206\u914d\u3002\u4ece\u6548\u7387\u7684\u89d2\u5ea6\u6765\u770b\uff0c\u975e\u5e38\u7cdf\u7cd5\u3002<\/p>\n\n\n\n<p>[Correction &#8211; in depends on implementation; CPython caches integers between -5 and 255 and has some <a href=\"https:\/\/www.laurentluce.com\/posts\/python-integer-objects-implementation\/\">other optimisations<\/a>, but still has a lot of overhead in terms of the size of the object]<\/p>\n\n\n\n<p><strong>ML\u8bed\u8a00\u5bb6\u65cf\uff08\u6bd4\u5982 Haskell\/Ocaml\uff09\uff1a\u4e07\u7269\u7686\u8868\u8fbe\u5f0f<\/strong><\/p>\n\n\n\n<p>\u4f8b\u5982\uff0c\u6ca1\u6709 if \u8bed\u53e5\uff0c\u53ea\u6709 if \u8868\u8fbe\u5f0f\u3002\u8d4b\u503c\u4e5f\u4e00\u6837\uff0c\u662f\u8868\u8fbe\u5f0f\u2014\u2014\u4f8b\u5982 let \u4e0d\u662f\u4e00\u4e2a\u8bed\u53e5\u800c\u662f\u4e00\u4e2a\u8868\u8fbe\u5f0f\uff0c\u5b9a\u4e49\u4e86\u672c\u5730\u503c\u5e76\u8fd4\u56de &#8216;body&#8217; \u7684\u503c\u3002<\/p>\n\n\n\n<p>Exceptions: Top level assignments, and type signatures. At least in Haskell, the type system feels quite separate. Due to this, AFAICS the meta level is kind of missing in Haskell. Haskell \u201csuper-powers\u201d come from a bunch of different features, such as <code>deriving<\/code> and TemplateHaskell, and programming at type level, especially with various language extensions. These are all cool features, but they have to be learned separately, and I think this is what gives Haskell the feeling of being a big and intimidating language. \u8fd9\u6bb5\u5728\u4e0b\u61d2\u5f97\u7ffb\u4e86\ud83d\ude34<\/p>\n\n\n\n<p><strong>Lisp\uff1a\u4e07\u7269\u7686 S\u8868\u8fbe\u5f0f<\/strong><\/p>\n\n\n\n<p>\u76f8\u6bd4 Haskell\uff0cLisp \u8d70\u5f97\u66f4\u8fdc\uff0c\u5b83\u5305\u542b\u4e86\u9876\u5c42\u8bed\u53e5\u3002\u8fd9\u79cd\u8bed\u6cd5\u4e0a\u7684\u4e00\u81f4\u6027\u4e3a\u7f16\u5199\u5b8f\u63d0\u4f9b\u4e86\u5de8\u5927\u7684\u5e2e\u52a9\uff0c\u4e5f\u8bb8\u662f Lisp \u53ef\u4ee5\u5439\u5618\u7684\u6700\u5927\u7684\u5143\u80fd\u529b\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u7528\u6237\u63a5\u53e3<\/h2>\n\n\n\n<p><strong>Emacs\uff1a\u4e07\u7269\u7686\u7f13\u51b2<\/strong><\/p>\n\n\n\n<p>\u8fd9\u662f Emacs \u5927\u60f3\u6cd5\u4e4b\u4e00\u2014\u2014\u5b83\u53ea\u6709\u5c11\u91cf\u4e0d\u540c\u7684 UI \u5143\u7d20\uff0c\u56e0\u4e3a\u51e0\u4e4e\u6240\u6709\u5185\u5bb9\u90fd\u5728\u7f13\u51b2\u91cc\u3002\u548c\u51c6\u5907\u7f16\u8f91\u7684\u6587\u4ef6\u7684\u6587\u672c\u5185\u5bb9\u4e00\u6837\uff0c\u4f60\u540c\u6837\u6709\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u5e2e\u52a9\u624b\u518c<\/li><li>\u9488\u5bf9\u4f60\u6b63\u5728\u4f7f\u7528\u7684\u7f13\u51b2\u81ea\u52a8\u751f\u6210\u7684\u5e2e\u52a9\uff08\u4f8b\u5982\u5217\u4e3e\u6240\u6709\u7684\u952e\u76d8\u5feb\u6377\u952e\uff09<\/li><li>\u641c\u7d22\u7ed3\u679c\uff08\u8fd9\u662f\u6211\u7684\u9012\u5f52\u641c\u7d22\u5de5\u4f5c\u6d41\u4e2d\u7684\u5173\u952e\u90e8\u5206\uff0c\u8bb0\u4f4f\u4e0a\u4e0b\u6587\uff09<\/li><li>\u5176\u4ed6\u66f4\u591a\u7684\u4e8b<\/li><\/ul>\n\n\n\n<p>\u4e00\u65e6\u5b66\u4f1a\u5982\u4f55\u5bfc\u822a\u548c\u4f7f\u7528\u7f13\u51b2\uff0c\u4f60\u80fd\u77e5\u9053\u66f4\u591a\u3002<\/p>\n\n\n\n<p>\u5f53\u7136\uff0c\u5b58\u5728\u5176\u4ed6\u7684 UI \u5143\u7d20\uff0c\u5982\u5de5\u5177\u680f\u3001\u83dc\u5355\u680f\uff0c\u4f7f Emacs \u5bf9\u65b0\u624b\u4e0d\u90a3\u4e48\u6050\u6016\u3002\u4f46\u8001\u624b\u901a\u5e38\u4f1a\u5173\u95ed\u5b83\u4eec\u2014\u2014\u56e0\u4e3a\u6ca1\u7528&#8230;\u5b83\u4eec\u4e0d\u662f\u7f13\u51b2\u3002<\/p>\n\n\n\n<p>\u4f60\u540c\u6837\u80fd\u83b7\u5f97\u5143\u80fd\u529b\uff1a\u6240\u6709\u7f13\u51b2\u7ec4\u6210\u7684\u5217\u8868\u540c\u6837\u662f\u4e00\u4e2a\u7f13\u51b2\uff0c\u4f60\u53ef\u4ee5\u6b63\u5e38\u64cd\u7eb5\u7f13\u51b2\u7684\u7f13\u51b2\uff08\u6bd4\u5982\u5220\u6389\u4e00\u884c\u7b49\u540c\u4e8e\u5e72\u6389\u4e00\u4e2a\u7f13\u51b2\uff09<\/p>\n\n\n\n<p><strong>RDMSs\uff1a\u4e07\u7269\u7686\u8868\u683c\/\u5173\u7cfb\uff0c\u53ef\u4ee5\u67e5\u8be2<\/strong><\/p>\n\n\n\n<p>\u901a\u8fc7\u4e00\u4e9b\u5177\u4f53\u5b9e\u73b0\u6765\u770b\u770b\uff0c\u5982 Pg\uff0c\u548c\u4f60\u521b\u5efa\u7684\u5173\u7cfb\u4e00\u6837\uff0c\u5185\u90e8\u7ed3\u679c\u4e5f\u5448\u73b0\u4e3a\u5173\u7cfb\uff0c\u5305\u62ec\u8868\/\u5173\u7cfb\/\u7d22\u5f15\u7684\u5217\u8868\u548c\u8fd0\u884c\u4fe1\u606f\u3002<\/p>\n\n\n\n<p>\u4f60\u80fd\u83b7\u5f97\u5173\u4e8e\u6240\u6709\u8868\u7684\u4e00\u5f20\u8868\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT table_name\nFROM information_schema.tables\nWHERE table_schema = 'public'\nORDER BY table_name;<\/code><\/pre>\n\n\n\n<p>\u67e5\u8be2\u5f53\u524d\u6b63\u5728\u6267\u884c\u7684\u67e5\u8be2<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT * FROM pg_stat_activity;<\/code><\/pre>\n\n\n\n<p>And <a href=\"https:\/\/pgstats.dev\/\">many other things<\/a>. These things benefit from all the usual powers of <code>SELECT<\/code>, such as joins, filtering, ordering etc.<\/p>\n\n\n\n<p>\u5982\u679c\u6269\u5c55\u4e86\u5143\u80fd\u529b\uff0c\u5c31\u53ef\u4ee5\u901a\u8fc7\u5bf9\u6240\u6709\u8868\u7684\u8868\u8fdb\u884c\u6dfb\u52a0\u3001\u79fb\u9664\u3001\u9009\u62e9\u6765\u521b\u5efa\u3001\u5220\u9664\u8868\uff0c\u540c\u7406\uff0c\u53ef\u4ee5\u901a\u8fc7\u5bf9\u6240\u6709\u884c\u7684\u8868\u8fdb\u884c\u6dfb\u52a0\u3001\u79fb\u9664\u3001\u9009\u62e9\u6765\u64cd\u7eb5\u884c\u3002\u4f60\u7684 schema \u53d8\u6210\u4e86\u6570\u636e\uff0c\u4f60\u7684\u80fd\u529b\u53d8\u6210\u4e86\u8d85\u80fd\u529b\u3002\u6211\u4e0d\u6e05\u695a\u662f\u5426\u6709\u6570\u636e\u5e93\u5b9e\u73b0\u4e86\u8fd9\u4e2a\uff0c\u6216\u8005\u8fd9\u6837\u505a\u7684\u4f18\u70b9\u80fd\u591f\u771f\u5b9e\u8d85\u8d8a\u901a\u5e38\u7684 DDL\u3002<\/p>\n\n\n\n<p><strong>Visidata\uff1a\u4e07\u7269\u7686\u8868\uff08sheet\uff09<\/strong>&#8211; \u8fd9\u6bb5\u5728\u4e0b\u4e5f\u61d2\u5f97\u7ffb\u4e86\ud83d\ude34<\/p>\n\n\n\n<p>At points this seems to go further than PostgreSQL in terms of giving you meta-powers and sticking to the pattern. In addition to the normal data sheets:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>rows are sheets (or can be viewed as such)<\/li><li>column meta-data is a sheet (and not just read-only &#8211; you can <a href=\"https:\/\/jsvine.github.io\/intro-to-visidata\/basics\/understanding-columns\/#manipulating-columns-from-the-columns-sheet\">manipulate it<\/a>)<\/li><li>the <a href=\"https:\/\/jsvine.github.io\/intro-to-visidata\/basics\/understanding-sheets\/#how-to-use-the-sheets-sheet\">list of sheets<\/a> is a sheet<\/li><li><a href=\"https:\/\/jsvine.github.io\/intro-to-visidata\/advanced\/configuring-visidata\/#the-global-options-sheet\">configuration<\/a> is a sheet<\/li><\/ul>\n\n\n\n<p>\u2026and more.<\/p>\n\n\n\n<p>I&#8217;m loving the power of Visidata, which is basically \u201cExcel as a text user interface\u201d, and I&#8217;ve realised that a lot of its power comes from its <a href=\"https:\/\/lukeplant.me.uk\/blog\/posts\/less-powerful-languages\/\">lack of power<\/a>.<\/p>\n\n\n\n<p>In Excel, you can have multiple tables in a sheet, and put them wherever you like. You can have headers, or not, you can have a different format or data type for every cell etc. In Visidata, you have exactly one table per sheet, you must have headers, each column has exactly one data type etc. The enforced uniformity of &#8220;Everything is a sheet (and a sheet has a tightly defined structure)\u201d is actually crucial to making Visidata so much nicer than Excel for many tasks \u2014 without it, most of the interface shortcuts and meta-powers would fail.<\/p>\n\n\n\n<p><strong>REST\uff1a\u4e07\u7269\u7686\u8d44\u6e90\uff08resource\uff09<\/strong><\/p>\n\n\n\n<p>\u628a\u7cfb\u7edf\u4e2d\u6240\u6709\u4e1c\u897f\u90fd\u5f53\u4f5c\u8d44\u6e90\uff0c\u5e76\u901a\u8fc7\u4e00\u4e9b\u5f88\u597d\u7406\u89e3\u7684\u52a8\u8bcd\uff08GET\u3001PUT\u3001DELETE \u7b49\uff09\u6765\u64cd\u4f5c\uff0c\u662f REST \u89c4\u8303\u4e2d\u4e00\u4e2a\u5f88\u6709\u5438\u5f15\u529b\u7684\u90e8\u5206\u3002<\/p>\n\n\n\n<p>REST \u4e5f\u6709\u4e00\u4e9b\u5143\u80fd\u529b \u2014\u2014 \u5728 OpenAPI \u91cc\uff0c\u8d44\u6e90\u7684\u5217\u8868\u4e5f\u8868\u73b0\u4e3a\u8d44\u6e90\u3002<\/p>\n\n\n\n<p>\u76f8\u5bf9\u9891\u7e41\u5730\u4f7f\u7528 REST\uff0c\u6211\u89c9\u5f97\u6211\u7ecf\u5e38\u906d\u9047\u5b83\u4e0d\u5408\u9002\u7684\u7f3a\u70b9\u3002\u6709\u65f6\u5019\u628a\u67d0\u4e9b\u64cd\u4f5c\u5efa\u6a21\u4e3a\u201c\u64cd\u7eb5\u4e00\u4e2a\u8d44\u6e90\u201d\u5f88\u6ed1\u7a3d\uff0c\u6211\u4eec\u5b9e\u9645\u9700\u8981\u7684\u4ec5\u4ec5\u662f\u4e00\u4e2a RPC\uff08\u4f8b\u5982\uff0c\u5728 clone\/copy\/move \u4e2d\u6709\u4f60\u60f3\u8981\u64cd\u4f5c\u7684\u9690\u85cf\u5c5e\u6027\uff09\u3002<\/p>\n\n\n\n<p><strong>Unix\uff1a\u4e07\u7269\u7686\u6587\u4ef6\uff08file\uff09<\/strong><\/p>\n\n\n\n<p>\u8fd9\u662f\u4e00\u4e2a\u76f8\u5f53\u6210\u529f\u7684\u62bd\u8c61\uff0c\u4f46\u662f\u540c\u6837\u4e5f\u6709\u4e00\u70b9\u4e0d\u5b8c\u7f8e\u7684\u5730\u65b9\u2014\u2014\u4f8b\u5982\uff0cstdout\u3001stdin \u662f\u201c\u6587\u4ef6\u201d\uff0c\u4f46\u5f53\u6211\u4eec\u901a\u8fc7\u7ec8\u7aef\u64cd\u4f5c\u5b83\u65f6\u8868\u73b0\u5f97\u5e76\u4e0d\u50cf\u6587\u4ef6\u3002\u5373\u4f7f\u5728\u4f60\u6253\u7b97\u628a\u975e\u6587\u4ef6\u5f53\u505a\u6587\u4ef6\u5bf9\u5f85\u4e4b\u524d\uff0c\u5355\u7eaf\u7684\u6587\u4ef6\u4e5f\u6bd4\u4f60\u60f3\u8c61\u7684\u96be\u641e\u3002\u67d0\u4e9b\u60c5\u51b5\u4e0b\uff0c\u4f60\u53ef\u80fd\u5e0c\u671b\u628a\u6587\u4ef6\u5f53\u4f5c\u5185\u5b58\u800c\u4e0d\u662f\u6587\u4ef6\u6765\u64cd\u4f5c\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u95ee\u9898<\/h2>\n\n\n\n<p>\u6211\u786e\u4fe1\u8be5\u6a21\u5f0f\u5b58\u5728\u6bd4\u6211\u5217\u4e3e\u7684\u591a\u5f97\u591a\u7684\u4f8b\u5b50\uff0c\u6211\u53ea\u662f\u5c55\u73b0\u4e86\u51b0\u5c71\u4e00\u89d2\u3002<a href=\"https:\/\/wiki.c2.com\/?EverythingIsa\">EverythingIsa on c2.com<\/a> has a longer list, for example, but without much analysis. What are your favourite examples? Are there examples where it works very well \u2014 or very badly? Are there other advantages\/disadvantages that I&#8217;ve missed? \u8fd9\u6bb5\u5728\u4e0b\u4e5f\u61d2\u5f97\u7ffb\u4e86\ud83d\ude34<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u8ba8\u8bba\u94fe\u63a5<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.reddit.com\/r\/programming\/comments\/jsnffk\/everything_is_an_x_lukeplantmeuk\/\" data-type=\"URL\" data-id=\"https:\/\/www.reddit.com\/r\/programming\/comments\/jsnffk\/everything_is_an_x_lukeplantmeuk\/\">Reddit<\/a><\/li><li><a href=\"https:\/\/twitter.com\/search?q=https%3A%2F%2Flukeplant.me.uk%2Fblog%2Fposts%2Feverything-is-an-x-pattern%2F&amp;src=typed_query\" data-type=\"URL\" data-id=\"https:\/\/twitter.com\/search?q=https%3A%2F%2Flukeplant.me.uk%2Fblog%2Fposts%2Feverything-is-an-x-pattern%2F&amp;src=typed_query\">Twitter<\/a><\/li><li><a href=\"https:\/\/lobste.rs\/s\/g7c661\" data-type=\"URL\" data-id=\"https:\/\/lobste.rs\/s\/g7c661\">Lobsters<\/a><\/li><\/ul>\n\n\n\n<p>ps\uff1a\u5143\u80fd\u529b\u548c\u6700\u8fd1\u9879\u76ee\u4e2d\u8bbe\u8ba1\u5143\u6807\u7b7e\u7684\u60f3\u6cd5\u4e00\u81f4\uff0c\u901a\u8fc7\u5143\u8fbe\u5230\u5f62\u5f0f\u4e0a\u7684\u7edf\u4e00\u3002<\/p>\n\n\n\n<p>2022.8.12  \u88ab\u539f\u6587\u4f5c\u8005\u7f6e\u9876\u4e86\uff0c\u660e\u5929\u6211\u597d\u597d\u8c03\u6574\u4e00\u4e0b\u7ffb\u8bd1<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u539f\u6587\uff1aEverything is an X \u201c\u4e07\u7269\u7686 X\u201d \u662f\u4e00\u79cd\u66f4\u4e0a\u5c42\u7684\u6a21\u5f0f\uff0c\u88ab\u5e94\u7528\u4e8e\u591a\u79cd\u7cfb\u7edf\u7684\u8bbe [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-3430","post","type-post","status-publish","format-standard","hentry","category-code"],"_links":{"self":[{"href":"https:\/\/www.chenqing.work\/index.php?rest_route=\/wp\/v2\/posts\/3430","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.chenqing.work\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.chenqing.work\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.chenqing.work\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.chenqing.work\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3430"}],"version-history":[{"count":76,"href":"https:\/\/www.chenqing.work\/index.php?rest_route=\/wp\/v2\/posts\/3430\/revisions"}],"predecessor-version":[{"id":3533,"href":"https:\/\/www.chenqing.work\/index.php?rest_route=\/wp\/v2\/posts\/3430\/revisions\/3533"}],"wp:attachment":[{"href":"https:\/\/www.chenqing.work\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3430"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.chenqing.work\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3430"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.chenqing.work\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3430"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}