Анализ сайта panopticoncentral.net
Основное Готовность: 65%
Домен
panopticoncentral.net
Состояние доменного имени
?
Проверяем корректность доменного имени и наличие технических проблем на уровне домена.
Длина домена велика. Но если вы продвигаете запрос, входящий в название домена, то это хорошо.
Домен второго уровня идеален для продвижения.
Ответ сервера
200 Успешный ответ
HTTP-код ответа и цепочка редиректов
?
Код 200 — страница доступна. Коды 3xx — редиректы (цепочки замедляют загрузку и размывают ссылочный вес). Коды 4xx/5xx — ошибки, поисковик не сможет проиндексировать страницу.
Кол-во редиректов 3 слишком большое! Проверьте настройки сайта и веб-сервера!
Цепочка редиректов:
http://panopticoncentral.net
302 Found
http://www.panopticoncentral.net/
301 MovedPermanently
https://www.panopticoncentral.net/
200 OK
Безопасность
Сайт безопасен
Использование HTTPS и SSL-сертификат
?
HTTPS — обязательный стандарт. Google и Яндекс отдают предпочтение защищённым сайтам. Отсутствие SSL или просроченный сертификат ведут к предупреждениям в браузере и снижению позиций.
На сайте работает защищенный протокол ssl и сайт открывается по https.
Ssl-сертификат действителен до 09.01.2027 2:59:59.
Включён HSTS (Strict-Transport-Security) — защита от подмены на http.
HTTP автоматически перенаправляется на HTTPS.
Поздравляем! Сайт не содержится в реестре РКН.
Кодировка
UTF-8
Кодировка символов страницы
?
Стандарт — UTF-8. Неправильная кодировка вызывает нечитаемые символы и мешает поисковику корректно распознать текст страницы.
Указана кодировка на странице UTF-8.
Язык
en-US
Атрибут lang в HTML-теге
?
Атрибут lang (<html lang="ru">) сообщает поисковикам и браузерам, на каком языке написана страница. Помогает при ранжировании в региональном поиске.
Язык документа указан явно: en-US.
Скорость загрузки
~1,90сек
Время отклика сервера (TTFB)
?
Time To First Byte — время до получения первого байта от сервера. Норма до 200 мс. Медленный отклик ухудшает пользовательский опыт и ранжирование: Яндекс и Google учитывают скорость страниц.
Скорость загрузки сайта 1,90сек превышает 1 секунду. Желательно улучшить работу сайта!
Объем документа
93Кб
Размер HTML-кода страницы
?
Слишком большой HTML замедляет парсинг браузером и сканирование поисковым роботом. Рекомендуется не более 200 Кб.
Объем html-документа 93Кб оптимален.
Структура html-документа корректна.
Ресурсы
Ресурсы: 7
Внешние ресурсы страницы (CSS, JS, изображения)
?
Количество и тип подключённых ресурсов влияют на скорость загрузки. Большое число запросов увеличивает время рендеринга страницы.
Кол-во файлов ресурсов 7 достаточно.
Показать полный список ресурсов
| Тип | Название | Значение |
|---|---|---|
| stylesheet | text/css | /wp-content/themes/twentytwelve/fonts/font-open-sans.css?ver=20230328 |
| stylesheet | text/css | /wp-content/themes/twentytwelve/style.css?ver=20251202 |
| stylesheet | text/css | /wp-content/themes/twentytwelve/css/blocks.css?ver=20251031 |
| js | text/javascript | https://c0.wp.com/c/6.9/wp-includes/js/jquery/jquery.min.js |
| js | text/javascript | https://c0.wp.com/c/6.9/wp-includes/js/jquery/jquery-migrate.min.js |
| js | text/javascript | /wp-content/themes/twentytwelve/js/navigation.js?ver=20250303 |
| js | text/javascript | https://stats.wp.com/e-202634.js |
Серверные заголовки
Кол-во: 12
HTTP-заголовки ответа сервера
?
Заголовки сервера передают браузеру и поисковику служебную информацию: кеширование, безопасность (CSP, HSTS), сжатие (gzip). Правильная настройка ускоряет загрузку и повышает защищённость.
Найдены серверные заголовки 12шт. Подробнее про серверные заголовки.
Показать полный список серверных заголовков
| Ключ | Значение |
|---|---|
| Date | Sat, 22 Aug 2026 03:09:19 GMT |
| Server | nginx |
| Cache-Control | must-revalidate, max-age=3 |
| Transfer-Encoding | chunked |
| Vary | Accept-Encoding |
| Strict-Transport-Security | max-age=31536000; includeSubDomains; preload |
| X-Powered-By | PHP/8.4.16 |
| X-XSS-Protection | 1; mode=block |
| X-Frame-Options | SAMEORIGIN |
| X-Content-Type-Options | nosniff |
| Referrer-Policy | strict-origin |
| Permissions-Policy | geolocation=(),midi=(),sync-xhr=(),microphone=(),camera=(),magnetometer=(),gyroscope=(),fullscreen=(self) |
CMS
Система управления сайтом (движок)
?
CMS — это движок, на котором работает сайт (WordPress, 1C-Bitrix, Tilda и др.). Знание CMS помогает понять возможности SEO-оптимизации и подобрать подходящие инструменты. «Не определена» — вероятно, самописный сайт или нестандартная сборка.
Сайт работает на CMS WordPress.
Веб-сервер
Программное обеспечение сервера
?
Веб-сервер — это ПО, которое отдаёт страницы посетителям (nginx, Apache, IIS, LiteSpeed и др.). Определяется по серверным заголовкам ответа (Server, X-Powered-By и т.п.). «Не определён» — сервер намеренно скрывает эти заголовки, это нормальная практика безопасности.
Сайт работает на веб-сервере nginx.
Мета-теги Готовность: 33%
Title
Panopticon Central | a blog on programming languageson programming languages, the tech industry, and other stuff…
Заголовок страницы в браузере и поисковой выдаче
?
Title — главный SEO-заголовок страницы. Влияет на CTR в поиске и ранжирование. Оптимальная длина: 50–70 символов. Ключевые слова — ближе к началу.
Устраните дубли в title: programming(2)
Необходимо уменьшить число символов в title (текущее значение: 113, оптимально: от 40 до 45)
Description
Описание страницы в поисковой выдаче (сниппет)
?
Meta Description — текст под заголовком в выдаче. Напрямую на позиции не влияет, но влияет на CTR. Оптимальная длина: 120–160 символов.
Установите мета-тег description!
Keywords
Список ключевых слов страницы (устаревший тег)
?
Meta Keywords не учитывается Яндексом и Google для ранжирования с 2009–2012 годов. Заполнение не обязательно, но не вредит. Конкурент может использовать содержимое для анализа.
Установите мета-тег keywords!
Канонический Url
Указывает поисковику основную версию страницы
?
Canonical (rel=canonical) предотвращает проблему дублей страниц. Должен точно совпадать с URL проверяемой страницы. Неправильный canonical может передать ссылочный вес на другую страницу.
Рекомендуем прописать канонический Url.
Robots
Есть ошибки
Директивы для поисковых роботов на уровне страницы
?
Meta Robots управляет индексацией конкретной страницы: index/noindex — индексировать ли, follow/nofollow — следовать ли по ссылкам. Noindex полностью исключает страницу из поиска.
Meta-тег robots указан, но в нем содержится неизвестное значение...
Адаптивность
width=device-width, initial-scale=1.0
Настройка масштабирования на мобильных устройствах
?
Тег viewport (<meta name="viewport">) сообщает браузеру, как масштабировать страницу на мобильных. Стандарт: width=device-width, initial-scale=1. Отсутствие — признак отсутствия мобильной версии.
Meta-тег viewport со значением-константой width=device-width задаёт ширину страницы в соответствии с размером экрана.
Meta-тег viewport со значением initial-scale=1.0 определяет масштаб 1:1, т.е. «не масштабировать».
Разметка OpenGraph
Кол-во: 10
Мета-теги для красивых превью в соцсетях
?
OpenGraph (og:title, og:description, og:image) управляет тем, как страница выглядит при репосте в социальных сетях и мессенджерах. Отсутствие OG-тегов — невзрачный превью при шеринге.
Разметка OpenGraph задана. Страница оптимизирована под социальные сети.
Показать полный список og мета-тегов
| Тип | Значение |
|---|---|
| og:type | website |
| og:title | Panopticon Central |
| og:description | a blog on programming languageson programming languages, the tech industry, and other stuff… |
| og:url | https://www.panopticoncentral.net/ |
| og:site_name | Panopticon Central |
| og:image | /wp-content/uploads/2023/03/Asset-2.png |
| og:image:width | 438 |
| og:image:height | 435 |
| og:image:alt | |
| og:locale | en_US |
Все мета-теги
Кол-во: 14
Полный список мета-тегов страницы
?
Таблица всех meta-тегов, включая нестандартные. Позволяет найти опечатки, дубли и лишние теги.
Найдены мета-теги 14шт. Мета-теги не видимы для человека и предназначены для обмена информацией между веб-страницей и поисковыми системами, браузерами и другими веб-службами. С ними роботы 🤖 и устройства ведут себя более ожидаемо.
Показать полный список мета-тегов
| Тип | Название | Значение |
|---|---|---|
| name | viewport | width=device-width, initial-scale=1.0 |
| name | robots | max-image-preview:large |
| name | generator | WordPress 6.9 |
| name | msapplication-TileImage | /wp-content/uploads/2023/03/Asset-2.png |
| property | og:type | website |
| property | og:title | Panopticon Central |
| property | og:description | a blog on programming languageson programming languages, the tech industry, and other stuff… |
| property | og:url | https://www.panopticoncentral.net/ |
| property | og:site_name | Panopticon Central |
| property | og:image | /wp-content/uploads/2023/03/Asset-2.png |
| property | og:image:width | 438 |
| property | og:image:height | 435 |
| property | og:image:alt | |
| property | og:locale | en_US |
Оптимизация Готовность: 82%
Структура
Ошибок нет
Семантические HTML-элементы страницы
?
Проверяет наличие основных структурных элементов: nav, header, footer, main. Корректная семантическая структура помогает поисковику понять архитектуру страницы.
Структура документа корректна (теги <html> и <body> присутствуют в единственном экземпляре).
Контент
Ошибок нет
Объём и качество текстового содержимого
?
Анализирует объём полезного текста на странице. Слишком мало — страница может считаться малополезной. Слишком много — ухудшается читаемость и восприятие.
Слова из title 14 встречаются в тексте достаточно.
Абзацев с текстом 77 достаточно.
Среднее число слов в абзаце 56 достаточно.
Кол-во знаков контента 30367 на странице оптимально.
Кол-во слов 5311 на странице оптимально.
Заголовки
Ошибок нет
Иерархия заголовков H1–H6
?
H1 должен быть один и содержать ключевой запрос. H2–H6 описывают подразделы. Пропуск уровней (H1 → H3) и несколько H1 — типичные ошибки, снижающие понятность страницы для поисковика.
На странице присутствуют заголовки <h1> 11. Это прекрасно.
На странице присутствуют заголовки <h2> 4. Это хорошо.
На странице присутствуют заголовки <h3> 1.
Тошнота
9,38
Насколько одно слово доминирует в тексте
?
Классическая тошнота = √(частота самого повторяющегося слова). Норма до 7–8: текст воспринимается естественно. Выше — поисковик может счесть страницу переспамленной.
Тошнота превышает норму 5. Измените текст страницы!
Академич. тошнота
19,85%
Насколько текст перенасыщен ключевыми словами
?
Академическая тошнота = (частота слова / общее количество слов) × 100%. Показывает долю конкретного слова в тексте. Норма 5–15%.
Академическая тошнота превышает норму 5-15%. Измените текст страницы!
Семантическое ядро
20
Наиболее часто встречающиеся слова на странице
?
Топ слов по частоте использования. Показывает, какие слова доминируют в тексте с точки зрения поисковика.
Контент страницы содержит осмысленный текст и слова.
Показать список слов
| Слово | Кол-во | Частота |
|---|---|---|
| project | 88 | 1,66% |
| system | 45 | 0,85% |
| design-time | 41 | 0,77% |
| visual | 34 | 0,64% |
| studio | 30 | 0,56% |
| builds | 30 | 0,56% |
| msbuild | 22 | 0,41% |
| really | 21 | 0,40% |
| window | 19 | 0,36% |
| things | 15 | 0,28% |
| reference | 15 | 0,28% |
| targets | 13 | 0,24% |
| property | 13 | 0,24% |
| extension | 13 | 0,24% |
| company | 12 | 0,23% |
| august | 12 | 0,23% |
| solution | 11 | 0,21% |
| explorer | 11 | 0,21% |
| references | 11 | 0,21% |
| december | 11 | 0,21% |
Индексация Готовность: 0%
Индексирование
Есть ошибки
Разрешено ли индексирование страницы
?
Проверяет, не закрыта ли страница от индексации через robots.txt, meta robots или X-Robots-Tag. Страница, закрытая от индексации, не появится в поисковой выдаче.
Анкоров на странице 241 слишком много. Проведите ревизию и оптимизацию ссылок сайта.
Robots.txt
Найден корректный robots.txt
Файл управления сканированием сайта роботами
?
Robots.txt указывает поисковым роботам, какие страницы сканировать, а какие — нет. Ошибки в файле могут случайно закрыть важные разделы от индексации.
Кол-во редиректов для файла robots.txt 3 слишком большое! Это может вызывать затруднение при индексации поисковыми роботами!
Проверяемая страница не запрещена в robots.txt.
Robots.txt доступен по постоянному адресу
Цепочка редиректов для файла robots.txt:
http://panopticoncentral.net/robots.txt
302 Found
http://www.panopticoncentral.net/
301 MovedPermanently
https://www.panopticoncentral.net/
200 OK
Показать содержимое robots.txt
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Panopticon Central | a blog on programming languageson programming languages, the tech industry, and other stuff…</title>
<link rel="profile" href="https://gmpg.org/xfn/11" />
<link rel="pingback" href="https://www.panopticoncentral.net/xmlrpc.php">
<meta name='robots' content='max-image-preview:large' />
<link rel='preconnect' href='//i0.wp.com' />
<link rel='preconnect' href='//c0.wp.com' />
<link rel="alternate" type="application/rss+xml" title="Panopticon Central » Feed" href="https://www.panopticoncentral.net/feed/" />
<link rel="alternate" type="application/rss+xml" title="Panopticon Central » Comments Feed" href="https://www.panopticoncentral.net/comments/feed/" />
<style id='wp-img-auto-sizes-contain-inline-css' type='text/css'>
img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
</style>
<style id='wp-emoji-styles-inline-css' type='text/css'>
img.wp-smiley, img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 0.07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}
/*# sourceURL=wp-emoji-styles-inline-css */
</style>
<style id='wp-block-library-inline-css' type='text/css'>
:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}.has-text-align-center{text-align:center}.has-text-align-left{text-align:left}.has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-right-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-left-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-right-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
/*# sourceURL=wp-block-library-inline-css */
</style><style id='wp-block-archives-inline-css' type='text/css'>
.wp-block-archives{box-sizing:border-box}.wp-block-archives-dropdown label{display:block}
/*# sourceURL=https://c0.wp.com/c/6.9/wp-includes/blocks/archives/style.min.css */
</style>
<style id='wp-block-categories-inline-css' type='text/css'>
.wp-block-categories{box-sizing:border-box}.wp-block-categories.alignleft{margin-right:2em}.wp-block-categories.alignright{margin-left:2em}.wp-block-categories.wp-block-categories-dropdown.aligncenter{text-align:center}.wp-block-categories .wp-block-categories__label{display:block;width:100%}
/*# sourceURL=https://c0.wp.com/c/6.9/wp-includes/blocks/categories/style.min.css */
</style>
<style id='wp-block-heading-inline-css' type='text/css'>
h1:where(.wp-block-heading).has-background,h2:where(.wp-block-heading).has-background,h3:where(.wp-block-heading).has-background,h4:where(.wp-block-heading).has-background,h5:where(.wp-block-heading).has-background,h6:where(.wp-block-heading).has-background{padding:1.25em 2.375em}h1.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h1.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h2.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h2.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h3.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h3.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h4.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h4.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h5.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h5.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h6.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h6.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]){rotate:180deg}
/*# sourceURL=https://c0.wp.com/c/6.9/wp-includes/blocks/heading/style.min.css */
</style>
<style id='wp-block-latest-posts-inline-css' type='text/css'>
.wp-block-latest-posts{box-sizing:border-box}.wp-block-latest-posts.alignleft{margin-right:2em}.wp-block-latest-posts.alignright{margin-left:2em}.wp-block-latest-posts.wp-block-latest-posts__list{list-style:none}.wp-block-latest-posts.wp-block-latest-posts__list li{clear:both;overflow-wrap:break-word}.wp-block-latest-posts.is-grid{display:flex;flex-wrap:wrap}.wp-block-latest-posts.is-grid li{margin:0 1.25em 1.25em 0;width:100%}@media (min-width:600px){.wp-block-latest-posts.columns-2 li{width:calc(50% - .625em)}.wp-block-latest-posts.columns-2 li:nth-child(2n){margin-right:0}.wp-block-latest-posts.columns-3 li{width:calc(33.33333% - .83333em)}.wp-block-latest-posts.columns-3 li:nth-child(3n){margin-right:0}.wp-block-latest-posts.columns-4 li{width:calc(25% - .9375em)}.wp-block-latest-posts.columns-4 li:nth-child(4n){margin-right:0}.wp-block-latest-posts.columns-5 li{width:calc(20% - 1em)}.wp-block-latest-posts.columns-5 li:nth-child(5n){margin-right:0}.wp-block-latest-posts.columns-6 li{width:calc(16.66667% - 1.04167em)}.wp-block-latest-posts.columns-6 li:nth-child(6n){margin-right:0}}:root :where(.wp-block-latest-posts.is-grid){padding:0}:root :where(.wp-block-latest-posts.wp-block-latest-posts__list){padding-left:0}.wp-block-latest-posts__post-author,.wp-block-latest-posts__post-date{display:block;font-size:.8125em}.wp-block-latest-posts__post-excerpt,.wp-block-latest-posts__post-full-content{margin-bottom:1em;margin-top:.5em}.wp-block-latest-posts__featured-image a{display:inline-block}.wp-block-latest-posts__featured-image img{height:auto;max-width:100%;width:auto}.wp-block-latest-posts__featured-image.alignleft{float:left;margin-right:1em}.wp-block-latest-posts__featured-image.alignright{float:right;margin-left:1em}.wp-block-latest-posts__featured-image.aligncenter{margin-bottom:1em;text-align:center}
/*# sourceURL=https://c0.wp.com/c/6.9/wp-includes/blocks/latest-posts/style.min.css */
</style>
<style id='wp-block-list-inline-css' type='text/css'>
ol,ul{box-sizing:border-box}:root :where(.wp-block-list.has-background){padding:1.25em 2.375em}
/*# sourceURL=https://c0.wp.com/c/6.9/wp-includes/blocks/list/style.min.css */
</style>
<style id='wp-block-search-inline-css' type='text/css'>
.wp-block-search__button{margin-left:10px;word-break:normal}.wp-block-search__button.has-icon{line-height:0}.wp-block-search__button svg{height:1.25em;min-height:24px;min-width:24px;width:1.25em;fill:currentColor;vertical-align:text-bottom}:where(.wp-block-search__button){border:1px solid #ccc;padding:6px 10px}.wp-block-search__inside-wrapper{display:flex;flex:auto;flex-wrap:nowrap;max-width:100%}.wp-block-search__label{width:100%}.wp-block-search.wp-block-search__button-only .wp-block-search__button{box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;margin-left:0;max-width:100%}.wp-block-search.wp-block-search__button-only .wp-block-search__inside-wrapper{min-width:0!important;transition-property:width}.wp-block-search.wp-block-search__button-only .wp-block-search__input{flex-basis:100%;transition-duration:.3s}.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden,.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden .wp-block-search__inside-wrapper{overflow:hidden}.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden .wp-block-search__input{border-left-width:0!important;border-right-width:0!important;flex-basis:0;flex-grow:0;margin:0;min-width:0!important;padding-left:0!important;padding-right:0!important;width:0!important}:where(.wp-block-search__input){appearance:none;border:1px solid #949494;flex-grow:1;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin-left:0;margin-right:0;min-width:3rem;padding:8px;text-decoration:unset!important;text-transform:inherit}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper){background-color:#fff;border:1px solid #949494;box-sizing:border-box;padding:4px}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) .wp-block-search__input{border:none;border-radius:0;padding:0 4px}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) .wp-block-search__input:focus{outline:none}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) :where(.wp-block-search__button){padding:4px 8px}.wp-block-search.aligncenter .wp-block-search__inside-wrapper{margin:auto}.wp-block[data-align=right] .wp-block-search.wp-block-search__button-only .wp-block-search__inside-wrapper{float:right}
/*# sourceURL=https://c0.wp.com/c/6.9/wp-includes/blocks/search/style.min.css */
</style>
<style id='wp-block-search-theme-inline-css' type='text/css'>
.wp-block-search .wp-block-search__label{font-weight:700}.wp-block-search__button{border:1px solid #ccc;padding:.375em .625em}
/*# sourceURL=https://c0.wp.com/c/6.9/wp-includes/blocks/search/theme.min.css */
</style>
<style id='wp-block-group-inline-css' type='text/css'>
.wp-block-group{box-sizing:border-box}:where(.wp-block-group.wp-block-group-is-layout-constrained){position:relative}
/*# sourceURL=https://c0.wp.com/c/6.9/wp-includes/blocks/group/style.min.css */
</style>
<style id='wp-block-group-theme-inline-css' type='text/css'>
:where(.wp-block-group.has-background){padding:1.25em 2.375em}
/*# sourceURL=https://c0.wp.com/c/6.9/wp-includes/blocks/group/theme.min.css */
</style>
<style id='wp-block-paragraph-inline-css' type='text/css'>
.is-small-text{font-size:.875em}.is-regular-text{font-size:1em}.is-large-text{font-size:2.25em}.is-larger-text{font-size:3em}.has-drop-cap:not(:focus):first-letter{float:left;font-size:8.4em;font-style:normal;font-weight:100;line-height:.68;margin:.05em .1em 0 0;text-transform:uppercase}body.rtl .has-drop-cap:not(:focus):first-letter{float:none;margin-left:.1em}p.has-drop-cap.has-background{overflow:hidden}:root :where(p.has-background){padding:1.25em 2.375em}:where(p.has-text-color:not(.has-link-color)) a{color:inherit}p.has-text-align-left[style*="writing-mode:vertical-lr"],p.has-text-align-right[style*="writing-mode:vertical-rl"]{rotate:180deg}
/*# sourceURL=https://c0.wp.com/c/6.9/wp-includes/blocks/paragraph/style.min.css */
</style>
<style id='global-styles-inline-css' type='text/css'>
:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #fff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--blue: #21759b;--wp--preset--color--dark-gray: #444;--wp--preset--color--medium-gray: #9f9f9f;--wp--preset--color--light-gray: #e6e6e6;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
/*# sourceURL=global-styles-inline-css */
</style>
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
/*# sourceURL=/wp-includes/css/classic-themes.min.css */
</style>
<link rel='stylesheet' id='twentytwelve-fonts-css' href='/wp-content/themes/twentytwelve/fonts/font-open-sans.css?ver=20230328' type='text/css' media='all' />
<link rel='stylesheet' id='twentytwelve-style-css' href='/wp-content/themes/twentytwelve/style.css?ver=20251202' type='text/css' media='all' />
<link rel='stylesheet' id='twentytwelve-block-style-css' href='/wp-content/themes/twentytwelve/css/blocks.css?ver=20251031' type='text/css' media='all' />
<script type="text/javascript" src="https://c0.wp.com/c/6.9/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="https://c0.wp.com/c/6.9/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="/wp-content/themes/twentytwelve/js/navigation.js?ver=20250303" id="twentytwelve-navigation-js" defer="defer" data-wp-strategy="defer"></script>
<link rel="https://api.w.org/" href="https://www.panopticoncentral.net/wp-json/" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.panopticoncentral.net/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress 6.9" />
<style>img#wpstats{display:none}</style>
<!-- Jetpack Open Graph Tags -->
<meta property="og:type" content="website" />
<meta property="og:title" content="Panopticon Central" />
<meta property="og:description" content="a blog on programming languageson programming languages, the tech industry, and other stuff…" />
<meta property="og:url" content="https://www.panopticoncentral.net/" />
<meta property="og:site_name" content="Panopticon Central" />
<meta property="og:image" content="/wp-content/uploads/2023/03/Asset-2.png" />
<meta property="og:image:width" content="438" />
<meta property="og:image:height" content="435" />
<meta property="og:image:alt" content="" />
<meta property="og:locale" content="en_US" />
<!-- End Jetpack Open Graph Tags -->
<link rel="icon" href="/wp-content/uploads/2023/03/Asset-2-150x150.png" sizes="32x32" />
<link rel="icon" href="/wp-content/uploads/2023/03/Asset-2-300x298.png" sizes="192x192" />
<link rel="apple-touch-icon" href="/wp-content/uploads/2023/03/Asset-2-300x298.png" />
<meta name="msapplication-TileImage" content="/wp-content/uploads/2023/03/Asset-2.png" />
</head>
<body class="home blog wp-embed-responsive wp-theme-twentytwelve custom-font-enabled single-author">
<div id="page" class="hfeed site">
<a class="screen-reader-text skip-link" href="#content">Skip to content</a>
<header id="masthead" class="site-header">
<hgroup>
<h1 class="site-title"><a href="https://www.panopticoncentral.net/" rel="home" aria-current="page">Panopticon Central</a></h1>
<h2 class="site-description">a blog on programming languageson programming languages, the tech industry, and other stuff…</h2>
</hgroup>
<nav id="site-navigation" class="main-navigation">
<button class="menu-toggle">Menu</button>
<div class="nav-menu"><ul>
<li class="current_page_item"><a href="https://www.panopticoncentral.net/">Home</a></li><li class="page_item page-item-7301"><a href="https://www.panopticoncentral.net/contact-me/">Contact me</a></li>
</ul></div>
</nav><!-- #site-navigation -->
</header><!-- #masthead -->
<div id="main" class="wrapper">
<div id="primary" class="site-content">
<div id="content" role="main">
<article id="post-44937" class="post-44937 post type-post status-publish format-standard hentry category-meta">
<header class="entry-header">
<h1 class="entry-title">
<a href="https://www.panopticoncentral.net/2024/03/25/an-accidental-tourist-at-meta/" rel="bookmark">An Accidental Tourist at Meta</a>
</h1>
<div class="comments-link">
<a href="https://www.panopticoncentral.net/2024/03/25/an-accidental-tourist-at-meta/#respond"><span class="leave-reply">Leave a reply</span></a> </div><!-- .comments-link -->
</header><!-- .entry-header -->
<div class="entry-content">
<p>It’s been over a year since I was laid off from Meta, and it’s started to feel far enough away that I can reflect some on my experiences there without getting sucked too much into the overall unpleasantness of the sudden defenestration at the end.</p>
<p>At Meta, there’s a fairly well-known taxonomy of tenure that is regularly passed around. I don’t remember most of it, but I do remember the term it had for folks whose tenure at Meta was two years or less: <em>tourist</em>. Even though it was not my intention to be one, that’s nonetheless the bucket where I ended up.</p>
<p>As a tourist, I can’t really comment deeply on the culture of Meta, since I wasn’t really there long enough to internalize it. All I can do is give an outsider’s perspective of what it was like to spend a little time there. As I think about it, three things really stood out…</p>
<p><strong>The Money</strong></p>
<p>When I joined Microsoft, it was early enough to catch some of the go-go days of that company’s ascent (but not nearly enough to retire in my 30s, alas). But while there were definitely some ostentatious displays of wealth on the part of individuals, the company as a whole still functioned largely as a relatively normal (but successful) corporation. The corporate buildings were… well, corporate. When I gave tours to family members who wanted to see the great Microsoft, it was distinctly underwhelming, just office buildings and cafeterias and such. I don’t believe the experience was all <em>that</em> different than working at other corporations at the time.</p>
<p>At Meta, though, the money wasn’t just distributed to employees, it was <em>everywhere</em>. I think this really hit me when I travelled down to Menlo Park for a team meeting, and I took a morning to explore the Frank Gehry-designed building next to the one we were meeting in. It’s a building that’s, like, a mile long, but what was really crazy about it was the roof. On top of the building was basically a huge park with manicured lawns, hiking trails, forested areas, places to picnic, and art installations. There were even signs up warning folks not to bother the <a href="https://www.businessinsider.com/facebook-foxes-hang-out-office-roof-2018-8">family of foxes</a> that had taken up residence on the roof. It was amazing, but it was also overwhelming the way it just shoved Meta’s success in your face: <em>look how much f**king money we have, we can spend all this money on this, and not even care.</em> </p>
<p>I don’t think I’d ever encountered something quite like that before, and the truth is the opulence is threaded throughout the entire experience of working at Meta. The money isn’t just for showing off, it functions as a kind of cocoon, enveloping employees from the start of the workday through the end. It must be quite a shock for folks who started off there to move on to other companies!</p>
<p><strong>The Smallness</strong></p>
<p>When I joined Microsoft, it was a pretty modestly sized company, just 12,000 employees, but it was doing a <em>lot</em> of stuff, even then. It was building multiple operating systems, it had a bunch of productivity applications, it had a whole division building compilers and programming languages, it made games, it made hardware, etc. It was a very diversified company, even if most of its revenue at that time came from one product (MSDOS).</p>
<p>Having grown up on that, it actually took me a while to realize how… well, <em>small</em>, Meta really was. I know this is obvious but given the size of the company it took a while to really sink in that the company was basically just three social media websites + their corresponding apps. Yes, there was Reality Labs, too, but they kind of functioned as Mark Zuckerberg’s side project, living their own separate world, almost as their own company.</p>
<p>I’m not trying to downplay the scale of Facebook, Instagram, and WhatsApp, just comment on how much more focused, in some ways, Meta was. And how much they really had all their eggs in one basket. I think that fact warps the company in some ways, perhaps even driving some of the compensatory opulence I described in the previous section. When you have the metaphorical Sword of Damocles hanging over your head, perhaps you’re more inclined towards the YOLO frame of mind… </p>
<p><strong>The Madness</strong></p>
<p>This one is obviously not specific to Meta, but I think they embraced it more than everyone else, maybe due to the previous two things.</p>
<p>At Meta, when you view your internal employee profile, one interesting statistic it will show is the percentage of the company that has joined after you. I can imagine this started as a nice vanity number for early Facebookers, but during my time there it instead became a measure of the insanity that was going on at the company. I was there less than two years, and yet by the end, my memory is that my profile was showing me that nearly <em>half</em> the company had joined after me!</p>
<p>Yes, Facebook was still growing, and, yes, COVID lockdowns really supercharged social media use, and, yes, zero interest rates really dumped a whole ton of money into the markets, and, yes, Mark Zuckerberg was obsessed with building the “metaverse,” but even given all that, going from 40,000 employees to 80,000 employees in 24 months is certifiably crazy. Even if you assume, for a moment, that there really was enough work for all those people, there’s <em>no way</em> a company can absorb that many people that quickly. And, honestly, there was no way that Meta suddenly had 100% more work to do than it did 24 months prior. No way.</p>
<p>Honestly, if I had understood what was going on at Meta, I’m not sure I would have joined, because it was unsustainable and guaranteed to end in tears. And Meta’s actions in the last 12 months or so have only borne this out. They basically laid off in six months the same number of employees they had hired in the previous twelve. And, as far as I can tell from media reports, the bloodletting still continues there, albeit in a slower and less conspicuous way.</p>
<p>So, no, it wasn’t just “macroeconomic factors” or “misjudging the market.” While it would have been nice to have some self-reflection on the part of executives at the end there, I realize that’s just too much to ask… </p>
<p><strong>In Conclusion</strong></p>
<p>Except for the sudden stop at the end, I really quite enjoyed my time at Meta. As you can imagine, it was filled with a lot of smart, motivated, hard-working people, most of whom were really lovely people who I’d enjoy working with again. The work was interesting, and the environment was very enjoyable. But it was also a surreal experience, one that definitely opened my eyes and showed me a few things about the perils of success.</p>
<p>The company seems to be itself waking up from its fever dream. I hope, once it’s finished its painful exercise in undoing some of its excesses, that it will find a more stable, sustainable path. I guess we’ll see.</p>
</div><!-- .entry-content -->
<footer class="entry-meta">
This entry was posted in <a href="https://www.panopticoncentral.net/category/meta/" rel="category tag">Meta</a> on <a href="https://www.panopticoncentral.net/2024/03/25/an-accidental-tourist-at-meta/" title="9:36 am" rel="bookmark"><time class="entry-date" datetime="2024-03-25T09:36:53-07:00">March 25, 2024</time></a><span class="by-author"> by <span class="author vcard"><a class="url fn n" href="https://www.panopticoncentral.net/author/paulvick/" title="View all posts by paulvick" rel="author">paulvick</a></span></span>. </footer><!-- .entry-meta -->
</article><!-- #post -->
<article id="post-43974" class="post-43974 post type-post status-publish format-standard hentry category-project-system">
<header class="entry-header">
<h1 class="entry-title">
<a href="https://www.panopticoncentral.net/2019/07/12/msbuildallprojects-considered-harmful/" rel="bookmark">MSBuildAllProjects Considered Harmful</a>
</h1>
<div class="comments-link">
<a href="https://www.panopticoncentral.net/2019/07/12/msbuildallprojects-considered-harmful/#respond"><span class="leave-reply">Leave a reply</span></a> </div><!-- .comments-link -->
</header><!-- .entry-header -->
<div class="entry-content">
<p><a href="https://blogs.msdn.microsoft.com/msbuild/2005/09/26/how-to-ensure-changes-to-a-custom-target-file-prompt-a-rebuild/">For a long time now</a>, a standard piece of advice to authors of MSBuild .targets and .props files is to make sure you add your file path to the property <code>$(MSBuildAllProjects)</code>. This is because MSBuild checks the paths listed in that property when it wants to determine whether a project file has changed and needs to be rebuilt. So if you wanted projects that use your .targets or .props to be rebuilt when your file is updated or edited, you added your full path to that property.</p>
<p>However, there were three problems with this:</p>
<ol class="wp-block-list"><li>Paths tend to be long and, especially with NuGet in the picture, there are now a lot of .targets and .props files that get mixed into a build. So the <code>$(MSBuildAllProjects)</code> property keeps getting bigger and bigger.</li><li>MSBuild keeps around all versions of a property. So not only could the final value of the property be really long, if there were, say 30 files added in one at a time, there are also 30 copies of the property as it is being built up, multiplying the memory cost of the property.</li><li>There is one instance of this property for each project in a solution. So if you have a lot of projects in a solution, you’re going to multiply things even further.</li></ol>
<p>The end result was that on some larger solutions we’ve looked at, you end up with a non-trivial percentage of the managed heap devoted to just this one single property. And the thing is that 99% of the time we only really care about one file in that list — the file that was last modified, since that’s what MSBuild is going to check against.</p>
<p>So, <a href="https://github.com/microsoft/msbuild/pull/3605">starting in 16.0</a>, MSBuild now will automagically prepend the last modified project/.targets/.props file to <code>$(MSBuildAllProjects)</code>. So if the only reason you’re adding yourself to that property is to make sure that the project rebuilds when you’re touched <em>and you only need to support 16.0+</em>, you should stop adding yourself. We’re <a href="https://github.com/dotnet/sdk/pull/2853">already doing this</a> in our projects, and so should you, to help performance.</p>
</div><!-- .entry-content -->
<footer class="entry-meta">
This entry was posted in <a href="https://www.panopticoncentral.net/category/project-system/" rel="category tag">Project System</a> on <a href="https://www.panopticoncentral.net/2019/07/12/msbuildallprojects-considered-harmful/" title="9:44 am" rel="bookmark"><time class="entry-date" datetime="2019-07-12T09:44:10-07:00">July 12, 2019</time></a><span class="by-author"> by <span class="author vcard"><a class="url fn n" href="https://www.panopticoncentral.net/author/paulvick/" title="View all posts by paulvick" rel="author">paulvick</a></span></span>. </footer><!-- .entry-meta -->
</article><!-- #post -->
<article id="post-37174" class="post-37174 post type-post status-publish format-standard hentry category-project-system category-project-system-tools">
<header class="entry-header">
<h1 class="entry-title">
<a href="https://www.panopticoncentral.net/2019/01/28/small-project-system-tools-update/" rel="bookmark">Small Project System Tools Update</a>
</h1>
<div class="comments-link">
<a href="https://www.panopticoncentral.net/2019/01/28/small-project-system-tools-update/#respond"><span class="leave-reply">Leave a reply</span></a> </div><!-- .comments-link -->
</header><!-- .entry-header -->
<div class="entry-content">
<p>We pushed out a small update to <a href="https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.ProjectSystemTools">Project System Tools</a> today that shifts the way that binary logs are opened in Visual Studio. In previous versions, all binary logs opened into a single window. The original idea was to enable analysis across multiple logs at once, but it’s become apparent that it’s usually going to be more useful to open one log at a time. As a result, with this new update, binary logs will open into individual editors of their own.</p>
<p>This also allows us to add more views to the binary log window, and so we’ve added tabs to show summaries of the targets, tasks, and evaluations (if recorded) that can be useful to take a more performance-oriented look at the profile.</p>
<p>Log loading should also be a bit more robust in the situations where not all of the MSBuild information is recorded in the log. (In the past, the log would just fail to open.)</p>
<p><em>You can also follow me on Twitter </em><a href="http://twitter.com/panopticoncntrl"><em>here</em></a><em>.</em></p>
</div><!-- .entry-content -->
<footer class="entry-meta">
This entry was posted in <a href="https://www.panopticoncentral.net/category/project-system/" rel="category tag">Project System</a>, <a href="https://www.panopticoncentral.net/category/project-system/project-system-tools/" rel="category tag">Project System Tools</a> on <a href="https://www.panopticoncentral.net/2019/01/28/small-project-system-tools-update/" title="1:21 pm" rel="bookmark"><time class="entry-date" datetime="2019-01-28T13:21:54-08:00">January 28, 2019</time></a><span class="by-author"> by <span class="author vcard"><a class="url fn n" href="https://www.panopticoncentral.net/author/paulvick/" title="View all posts by paulvick" rel="author">paulvick</a></span></span>. </footer><!-- .entry-meta -->
</article><!-- #post -->
<article id="post-35384" class="post-35384 post type-post status-publish format-standard hentry category-project-system">
<header class="entry-header">
<h1 class="entry-title">
<a href="https://www.panopticoncentral.net/2018/08/15/another-way-to-talk-to-the-project-team/" rel="bookmark">Another Way to Talk to the Project Team</a>
</h1>
<div class="comments-link">
<a href="https://www.panopticoncentral.net/2018/08/15/another-way-to-talk-to-the-project-team/#respond"><span class="leave-reply">Leave a reply</span></a> </div><!-- .comments-link -->
</header><!-- .entry-header -->
<div class="entry-content">
<p>If you have issues with your project file or with the project system, you can always ping <a href="https://twitter.com/panopticoncntrl">me</a> or <a href="https://twitter.com/davkean">David Kean</a> or other team members on Twitter. However, Twitter is not always the most ideal way to carry on support-type conversations, particularly if there needs to be a lot of back and forth.</p>
<p>As a result, I created a <a href="https://gitter.im/dotnet/project-system">Gitter channel</a> for the <a href="https://github.com/dotnet/project-system">dotnet/project-system repo</a> which can be a place to have those more in-depth conversation. I’ll be monitoring the channel and will try and pull in other people as needed if there are questions beyond my expertise. We’ll see if it can develop into a place where people can come to get their C#/VB/F# project questions answered. Hope to see you there!</p>
</div><!-- .entry-content -->
<footer class="entry-meta">
This entry was posted in <a href="https://www.panopticoncentral.net/category/project-system/" rel="category tag">Project System</a> on <a href="https://www.panopticoncentral.net/2018/08/15/another-way-to-talk-to-the-project-team/" title="3:45 pm" rel="bookmark"><time class="entry-date" datetime="2018-08-15T15:45:10-07:00">August 15, 2018</time></a><span class="by-author"> by <span class="author vcard"><a class="url fn n" href="https://www.panopticoncentral.net/author/paulvick/" title="View all posts by paulvick" rel="author">paulvick</a></span></span>. </footer><!-- .entry-meta -->
</article><!-- #post -->
<article id="post-34744" class="post-34744 post type-post status-publish format-standard hentry category-project-system category-project-system-tools">
<header class="entry-header">
<h1 class="entry-title">
<a href="https://www.panopticoncentral.net/2018/05/14/view-evaluation-profiles-in-project-system-tools/" rel="bookmark">View Evaluation Profiles in Project System Tools</a>
</h1>
<div class="comments-link">
<a href="https://www.panopticoncentral.net/2018/05/14/view-evaluation-profiles-in-project-system-tools/#respond"><span class="leave-reply">Leave a reply</span></a> </div><!-- .comments-link -->
</header><!-- .entry-header -->
<div class="entry-content">
<p>We pushed out a small update to <a href="https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.ProjectSystemTools">Project System Tools</a> last week that adds the ability to view <a href="https://github.com/Microsoft/msbuild/blob/master/documentation/evaluation-profiling.md">evaluation profiles</a> that are stored in a binlog file. Unfortunately, at the moment we can’t collect evaluation profiles within Visual Studio due to the lack of an API to turn it on (working on that RSN), so you have to use the command-line MSBuild to gather that information using the /profileevaluation switch.</p>
<p>I’ll try to write up a little more later about how to use evaluation profiles to find problems in your project. We’ve already used it to find several cases where globbing (i.e. wildcards) in a project caused repeated wildcard expansion that bottlenecked project load. So it can be very useful.</p>
<p>(We also added to the properties of targets in the viewer a Reason property that will tell you whether a target was run because of a BeforeTargets, AfterTargets, or DependsOn.)</p>
<p><i>You can also follow me on Twitter </i><a href="http://twitter.com/panopticoncntrl"><em>here</em></a><em>.</em></p>
</div><!-- .entry-content -->
<footer class="entry-meta">
This entry was posted in <a href="https://www.panopticoncentral.net/category/project-system/" rel="category tag">Project System</a>, <a href="https://www.panopticoncentral.net/category/project-system/project-system-tools/" rel="category tag">Project System Tools</a> on <a href="https://www.panopticoncentral.net/2018/05/14/view-evaluation-profiles-in-project-system-tools/" title="9:00 am" rel="bookmark"><time class="entry-date" datetime="2018-05-14T09:00:33-07:00">May 14, 2018</time></a><span class="by-author"> by <span class="author vcard"><a class="url fn n" href="https://www.panopticoncentral.net/author/paulvick/" title="View all posts by paulvick" rel="author">paulvick</a></span></span>. </footer><!-- .entry-meta -->
</article><!-- #post -->
<article id="post-34604" class="post-34604 post type-post status-publish format-standard hentry category-project-system category-project-system-tools">
<header class="entry-header">
<h1 class="entry-title">
<a href="https://www.panopticoncentral.net/2018/04/04/project-system-tools-now-with-binary-log-viewing/" rel="bookmark">Project System Tools: Now With Binary Log Viewing!</a>
</h1>
<div class="comments-link">
<a href="https://www.panopticoncentral.net/2018/04/04/project-system-tools-now-with-binary-log-viewing/#respond"><span class="leave-reply">Leave a reply</span></a> </div><!-- .comments-link -->
</header><!-- .entry-header -->
<div class="entry-content">
<p>There has been a lot of positive response to the <a href="https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.ProjectSystemTools">Project System Tools</a> extension, and we’re starting to see people turn to it to help diagnose design-time build (and other build) issues. One of the limitations of the extension has been the fact that once a build log has been captured, there was no native way to look at the log in Visual Studio. Either you had to run it through MSBuild to get a text log, or you had to install Kirill’s excellent <a href="http://msbuildlog.com/">MSBuild Log Viewer</a>. To address this limitation, we’re releasing a new version of the project system tools that integrates a Build Log Explorer window:</p>
<p><a href="/wp-content/uploads/2018/04/Viewer.png"><img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-34614" src="/wp-content/uploads/2018/04/Viewer.png" alt="" width="863" height="743" srcset="/wp-content/uploads/2018/04/Viewer.png 863w, /wp-content/uploads/2018/04/Viewer-300x258.png 300w, /wp-content/uploads/2018/04/Viewer-768x661.png 768w, /wp-content/uploads/2018/04/Viewer-624x537.png 624w" sizes="(max-width: 625px) 100vw, 625px" /></a></p>
<p>Once you’ve updated the extension, you can find the viewer at View > Other Windows > Build Log Explorer. The window should be fairly self-explanatory—the Add toolbar button will let you add one or more .binlog files into the explorer, or you can double-click on a log in the Build Logging tool window to add it to the explorer window. (We opted for a multi-log window to allow for the future ability to analyze across multiple build logs.) You will likely also want to show the View > Other Windows > Build Message List window, as that will show any MSBuild messages associated with the selected node in the explorer window. You’ll also note that the Properties window will show properties of the selected node in the explorer window (for example, clicking on a project build node will show the environment used to build the project in the properties window).</p>
<p>The Build Log Explorer window used Kirill’s code as a starting point but has diverged significantly in several ways:</p>
<ul>
<li>The Build Log Explorer uses a standalone read-only build log object model as its underlying data model (Microsoft.VisualStudio.ProjectSystem.LogModel.dll), which will make it easier to build command-line log analysis tools (since it only depends on MSBuild and nothing else).</li>
<li>The Build Log Explorer window shows execution times and success/failure directly in the tree.</li>
<li>Targets are listed in execution order rather than arranged as a tree since targets aren’t executed in a strict hierarchical order (instead you have before/depends/after targets).</li>
<li>Targets that were the requested targets in a build are <strong>bolded</strong>.</li>
<li>Dependent builds are listed under the MSBuild task that invokes them, which makes it easier to follow the order of build.</li>
</ul>
<p>Give it a try and let us know what you think!</p>
<p><i>You can also follow me on Twitter </i><a href="http://twitter.com/panopticoncntrl"><em>here</em></a><em>.</em></p>
</div><!-- .entry-content -->
<footer class="entry-meta">
This entry was posted in <a href="https://www.panopticoncentral.net/category/project-system/" rel="category tag">Project System</a>, <a href="https://www.panopticoncentral.net/category/project-system/project-system-tools/" rel="category tag">Project System Tools</a> on <a href="https://www.panopticoncentral.net/2018/04/04/project-system-tools-now-with-binary-log-viewing/" title="2:30 pm" rel="bookmark"><time class="entry-date" datetime="2018-04-04T14:30:20-07:00">April 4, 2018</time></a><span class="by-author"> by <span class="author vcard"><a class="url fn n" href="https://www.panopticoncentral.net/author/paulvick/" title="View all posts by paulvick" rel="author">paulvick</a></span></span>. </footer><!-- .entry-meta -->
</article><!-- #post -->
<article id="post-34464" class="post-34464 post type-post status-publish format-standard hentry category-project-system">
<header class="entry-header">
<h1 class="entry-title">
<a href="https://www.panopticoncentral.net/2018/03/06/dear-extension-authors-please-mind-the-resolved-state-of-the-references/" rel="bookmark">Dear Extension Authors: Please Mind the Resolved State of the References!</a>
</h1>
<div class="comments-link">
<a href="https://www.panopticoncentral.net/2018/03/06/dear-extension-authors-please-mind-the-resolved-state-of-the-references/#respond"><span class="leave-reply">Leave a reply</span></a> </div><!-- .comments-link -->
</header><!-- .entry-header -->
<div class="entry-content">
<p>I’ve been spending a <em>lot</em> of time lately looking at the performance of the Visual Studio project system for C# and VB. And something that’s come up more than a few times now is consumers of the automation interfaces (a.k.a. DTE) accidentally tanking Visual Studio performance when working with project references.</p>
<p>To step back and review for a moment, one of the fundamental jobs the project system has is to run what are called <em>design-time builds</em> to determine the full contents of a project. I talked about it more <a href="http://www.panopticoncentral.net/2017/09/21/the-scourge-of-design-time-builds/">here</a>, but the short version of the story is that a design-time build is a build that the project system runs in the background that doesn’t actually call the compiler, just captures everything that makes up the build. This information is then (primarily) used to initialize the language service that provides things like Intellisense. The problem is that if your build happens to be pretty large or slow, these design-time builds can hang the Visual Studio UI with these really annoying pauses.</p>
<p>So, what does that have to do with references? Well, one of the uses of design-time builds is to help the project system figure out exactly what the references in a project point to. Most project references don’t specify the full path of the thing that they point at. As a result, the project system usually needs to run a design-time build so it can understand exactly where a reference is going to point once MSBuild is done with it.</p>
<p>Again, most of the time you never really notice this going on, it just happens quietly in the background. But there are circumstances where it can become visible, particularly when a project has unresolvable references. An unresolvable reference is, basically, a reference that the design-time build can’t find. Maybe the assembly it points at got deleted. Maybe the package it points at isn’t available on NuGet. Maybe there’s some typo in the reference itself. Whatever the reason, sometimes projects have references that cannot be resolved no matter how many design-time builds you run.</p>
<p>Unfortunately, this can really bite unwary Visual Studio extension developers. Because when an extension asks for the path to an unresolved reference, the project system does it’s best to try and answer that question. And how does it do it? By running a new design-time build. And if there are other unresolved references? You’ll get a design-time build for each of them. Again, if the project is small, nobody will likely notice. But if the project is large or complex? Pauses and delays.</p>
<p>Thankfully, there is a solution. Instead just asking for a reference’s path like this:</p>
<pre class="diff-contents-row" role="presentation"><span class="diff-contents-container" role="presentation"><span class="code-line deleted-content">foreach (<span class="content-original">Reference</span> reference in vsProject.References)</span></span>
<span class="diff-contents-container" role="presentation"><span class="code-line">{
</span></span> // Ack! This may cause a design-time build to happen and block the UI
<span class="diff-contents-container" role="presentation"><span class="code-line deleted-content"> if (File.Exists(reference.Path))</span></span>
<span class="diff-contents-container" role="presentation"><span class="code-line"> {</span></span>
<span class="diff-contents-container" role="presentation"><span class="code-line"> // Do something....</span></span>
<span class="diff-contents-container" role="presentation"><span class="code-line"> }
}</span></span></pre>
<p>You can do this:</p>
<pre class="diff-contents-row" role="presentation"><span class="diff-contents-container" role="presentation"><span class="code-line deleted-content">foreach (<span class="content-original">Reference3</span> reference in vsProject.References)</span></span>
<span class="diff-contents-container" role="presentation"><span class="code-line">{
</span></span> // Whew. If the reference isn't resolved, we don't try to get the path
<span class="diff-contents-container" role="presentation"><span class="code-line deleted-content"> if (reference.Resolved && File.Exists(reference.Path))</span></span>
<span class="diff-contents-container" role="presentation"><span class="code-line"> {</span></span>
<span class="diff-contents-container" role="presentation"><span class="code-line"> // Do something....</span></span>
<span class="diff-contents-container" role="presentation"><span class="code-line"> }
}</span></span></pre>
<p>(Note that you have to switch from using the <a href="https://docs.microsoft.com/en-us/dotnet/api/vslangproj.reference?view=visualstudiosdk-2017">Reference</a> type to the <a href="https://docs.microsoft.com/en-us/dotnet/api/vslangproj80.reference3?view=visualstudiosdk-2017">Reference3</a> type to get to the Resolved property.)</p>
<p>We’ve already fixed two instances of this pattern internal to Visual Studio that were causing pauses in the UI, and we’re actively looking for others. If you’re an extension author, check your code for this pattern — it may fix pauses that your users were encountering!</p>
<p>(We’re also adding code to the project system to recognize situations where unresolved references are <em>never</em> going to resolve, and skipping the design-time builds in those cases. That should help unwary extension authors, but won’t fix cases that could possible resolve but aren’t for some reason.)</p>
<p><i>You can also follow me on Twitter </i><a href="http://twitter.com/panopticoncntrl"><em>here</em></a><em>.</em></p>
</div><!-- .entry-content -->
<footer class="entry-meta">
This entry was posted in <a href="https://www.panopticoncentral.net/category/project-system/" rel="category tag">Project System</a> on <a href="https://www.panopticoncentral.net/2018/03/06/dear-extension-authors-please-mind-the-resolved-state-of-the-references/" title="1:04 pm" rel="bookmark"><time class="entry-date" datetime="2018-03-06T13:04:27-08:00">March 6, 2018</time></a><span class="by-author"> by <span class="author vcard"><a class="url fn n" href="https://www.panopticoncentral.net/author/paulvick/" title="View all posts by paulvick" rel="author">paulvick</a></span></span>. </footer><!-- .entry-meta -->
</article><!-- #post -->
<article id="post-34194" class="post-34194 post type-post status-publish format-standard hentry category-project-system category-project-system-tools">
<header class="entry-header">
<h1 class="entry-title">
<a href="https://www.panopticoncentral.net/2017/12/01/project-evaluations-count-too/" rel="bookmark">Project Evaluations Count Too!</a>
</h1>
<div class="comments-link">
<a href="https://www.panopticoncentral.net/2017/12/01/project-evaluations-count-too/#respond"><span class="leave-reply">Leave a reply</span></a> </div><!-- .comments-link -->
</header><!-- .entry-header -->
<div class="entry-content">
<p>In my last couple of blog posts, I talked about the role that <a href="http://www.panopticoncentral.net/2017/09/21/the-scourge-of-design-time-builds/">design-time builds</a> play in Visual Studio performance. However, they are not the only way in which your project file can affect the IDE.</p>
<p>Before Visual Studio can do <em>anything</em> with your project (much less run a design-time build on it), we first have to load the project from its XML format and interpret that XML to create the in-memory representation of the project. But the MSBuild format isn’t purely static–you can specify conditions inside of the project file that governs whether other target files are imported, whether properties are set or not set, or whether items are included or not included in the build. So as MSBuild interprets the XML, it has to evaluate all those conditions to figure out what is really in the project.</p>
<p>And Visual Studio doesn’t only interpret your project when you open a solution, it often has to do this other times as well. For example, since a lot of things in a project file are conditioned on what build configuration (Debug vs. Retail) or platform you are building for, when you switch build configurations or platform Visual Studio may need to reevaluate the project. Or, for another example, if a project references a NuGet package that adds target files of its own, the project may need to be re-evaluated when that package is updated, in case something changed in those included target files.</p>
<p>Unfortunately, these evaluations aren’t necessarily free. Depending on the complexity of your project file, or of the target files it includes, it may take a little while to evaluate your entire project file. While this time is less noticeable than design-time builds in general, if you open a solution with a large number of projects it can really add up. And, unlike design-time builds, there is no cache that Visual Studio maintains of project evaluation results, so you pay the cost every time you open a project (or do something that forces a re-evaluation).</p>
<p>We’re thinking about ways to make this better, but in the interim we’ve been enhancing the <a href="https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.ProjectSystemTools">Project System Tools extension</a> to help users better understand the impact of evaluations. So now the Build Logging window will include evaluations as well as design-time (and regular) builds:</p>
<p><a href="/wp-content/uploads/2017/11/eval.png"><img decoding="async" class="alignnone size-full wp-image-34214" src="/wp-content/uploads/2017/11/eval.png" alt="" width="926" height="158" srcset="/wp-content/uploads/2017/11/eval.png 926w, /wp-content/uploads/2017/11/eval-300x51.png 300w, /wp-content/uploads/2017/11/eval-768x131.png 768w, /wp-content/uploads/2017/11/eval-624x106.png 624w" sizes="(max-width: 625px) 100vw, 625px" /></a></p>
<p>Right now evaluation logging only works for non-SDK projects (i.e. non-.NET Standard and non-.NET core projects) due to API limitations, but we hope to have it working for all projects very soon.</p>
<p>(You can also try out an experimental MSBuild evaluation profiler that’s currently sitting in a <a href="https://github.com/Microsoft/msbuild/blob/exp/evaluationProfiler/documentation/evaluation-profiling.md">branch of MSBuild</a>. We’re looking at moving that into the product in the near future as well.)</p>
<p><i>You can also follow me on Twitter </i><a href="http://twitter.com/panopticoncntrl"><em>here</em></a><em>.</em></p>
</div><!-- .entry-content -->
<footer class="entry-meta">
This entry was posted in <a href="https://www.panopticoncentral.net/category/project-system/" rel="category tag">Project System</a>, <a href="https://www.panopticoncentral.net/category/project-system/project-system-tools/" rel="category tag">Project System Tools</a> on <a href="https://www.panopticoncentral.net/2017/12/01/project-evaluations-count-too/" title="9:30 am" rel="bookmark"><time class="entry-date" datetime="2017-12-01T09:30:01-08:00">December 1, 2017</time></a><span class="by-author"> by <span class="author vcard"><a class="url fn n" href="https://www.panopticoncentral.net/author/paulvick/" title="View all posts by paulvick" rel="author">paulvick</a></span></span>. </footer><!-- .entry-meta -->
</article><!-- #post -->
<article id="post-34044" class="post-34044 post type-post status-publish format-standard hentry category-project-system category-project-system-tools">
<header class="entry-header">
<h1 class="entry-title">
<a href="https://www.panopticoncentral.net/2017/10/19/getting-visibility-into-design-time-builds/" rel="bookmark">Getting Visibility into Design-Time Builds</a>
</h1>
<div class="comments-link">
<a href="https://www.panopticoncentral.net/2017/10/19/getting-visibility-into-design-time-builds/#comments">2 Replies</a> </div><!-- .comments-link -->
</header><!-- .entry-header -->
<div class="entry-content">
<p>In my <a href="http://www.panopticoncentral.net/2017/09/21/the-scourge-of-design-time-builds/">last blog post</a>, I talked about design-time builds and why you should care about them. But one of the biggest problems with design-time builds is that they are invisible. They run in the background and you don’t get any feedback that anything is going on (except, maybe, that Visual Studio seems to be a bit slower while they run). And if they fail, there’s no way to determine that that happened and no way to determine what went wrong.</p>
<p>To address some of these issues, the project system team has now published a new Visual Studio extension that can help: <a href="https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.ProjectSystemTools">Project System Tools</a>. This extension is a place where the project system team can add tools that make working with the project system better. The first tool that we’ve added to the extension is the Build Logging tool window. When you pull down the View menu item, under “Other Windows” there will now be a “Build Logging” choice. If you choose that you’ll see a tool window come up:</p>
<p><a href="/wp-content/uploads/2017/10/Build-Logging-Window.png"><img decoding="async" class="alignnone wp-image-34074 size-full" src="/wp-content/uploads/2017/10/Build-Logging-Window.png" alt="" width="742" height="198" srcset="/wp-content/uploads/2017/10/Build-Logging-Window.png 742w, /wp-content/uploads/2017/10/Build-Logging-Window-300x80.png 300w, /wp-content/uploads/2017/10/Build-Logging-Window-624x167.png 624w" sizes="(max-width: 625px) 100vw, 625px" /></a></p>
<p>When you hit the “play” button on the toolbar, the build logging window will start recording build logs for all builds that happen in Visual Studio, including design-time builds! In the window, you’ll be able to see:</p>
<ul>
<li>The project that was built</li>
<li>The type of project (csproj, vbproj, etc.)</li>
<li>The “dimensions” of the build (x86, AnyCPU, Debug, Release, etc.)</li>
<li>The top-level targets that were built</li>
<li>Whether the build was a design-time build</li>
<li>Start time and elapsed time</li>
<li>Whether build succeeded or failed (or is still running, for that matter)</li>
</ul>
<p>The build logs are saved in the new <a href="https://github.com/Microsoft/msbuild/wiki/Binary-Log">MSBuild binary log format</a>. If you double-click on a build log entry, we’ll try and open the binlog file using whatever viewer is registered. (I suggest installing Kirill Osenkov’s <a href="http://msbuildlog.com/">MSBuild Log Viewer</a>) You can also right-click on the log and save it to a location of your choice, which can be handy for passing around build logs.</p>
<p>One thing to note is that because the Build Logging window depends on new APIs that were added to Visual Studio in the 15.4 release, you will only be able to install the extension on the most up-to-date version of Visual Studio 15 (or one of the Preview builds).</p>
<p>Try it out and let us know what you think! The project system tools are open source, so you can contribute to them if you go to our repo: <a href="https://github.com/dotnet/project-system-tools">https://github.com/dotnet/project-system-tools</a>. We also have some more ideas of things to add, so stay tuned!</p>
<p><i>You can also follow me on Twitter </i><a href="http://twitter.com/panopticoncntrl"><em>here</em></a><em>.</em></p>
</div><!-- .entry-content -->
<footer class="entry-meta">
This entry was posted in <a href="https://www.panopticoncentral.net/category/project-system/" rel="category tag">Project System</a>, <a href="https://www.panopticoncentral.net/category/project-system/project-system-tools/" rel="category tag">Project System Tools</a> on <a href="https://www.panopticoncentral.net/2017/10/19/getting-visibility-into-design-time-builds/" title="10:24 am" rel="bookmark"><time class="entry-date" datetime="2017-10-19T10:24:41-07:00">October 19, 2017</time></a><span class="by-author"> by <span class="author vcard"><a class="url fn n" href="https://www.panopticoncentral.net/author/paulvick/" title="View all posts by paulvick" rel="author">paulvick</a></span></span>. </footer><!-- .entry-meta -->
</article><!-- #post -->
<article id="post-33934" class="post-33934 post type-post status-publish format-standard hentry category-project-system">
<header class="entry-header">
<h1 class="entry-title">
<a href="https://www.panopticoncentral.net/2017/09/21/the-scourge-of-design-time-builds/" rel="bookmark">The Scourge of Design-Time Builds</a>
</h1>
<div class="comments-link">
<a href="https://www.panopticoncentral.net/2017/09/21/the-scourge-of-design-time-builds/#comments">6 Replies</a> </div><!-- .comments-link -->
</header><!-- .entry-header -->
<div class="entry-content">
<p>Part of my job on the <a href="https://github.com/dotnet/project-system">Visual Studio project system</a> <span style="display: inline !important; float: none; background-color: transparent; color: #444444; cursor: text; font-family: 'Open Sans',Helvetica,Arial,sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; line-height: 14px; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">lately </span>has been looking at the speed at which Visual Studio opens solutions containing managed language projects (such as C# and VB). As with many things, over time this common operation has gotten slower, and we would like to put some spring back in it’s step since everyone (including us!) have to open solutions all day every day.</p>
<p>As we’ve started to look at the various things that go on when you open a solution, one of the most obvious things we had to look at is something called <em>design-time builds</em>. Design-time builds are probably one of the least known and least understood things that go on in Visual Studio, and yet they often can have a real impact on how fast the Visual Studio UI responds (and not just on solution load!). I thought I’d take a minute to explain what design-time builds are and why you should care about them.</p>
<p>The origins of design-time builds comes from the fact that the Visual Studio build system (aka MSBuild) is not a fully declarative system. That is, you can’t just look at a .csproj file or .vbproj file and immediately understand everything you might want to know about how that project is going to build. In particular, you might not know the following:</p>
<ul>
<li>Given an assembly reference in the project file, what assembly on disk is that reference going to actually refer to at compile time?</li>
<li>Given a XAML file, what is the code that is going to be generated by the XAML compiler at compile time going to look like?</li>
<li>Given a glob file pattern (*.cs), what files are actually going to be included at compile time?</li>
</ul>
<p>And these questions aren’t just academic — if you’d like to get a nice Intellisense experience (or all the other editor enhancements that you get from the compiler), then the compiler has to be able to answer those questions <em>before</em> you ever get to compiling your project. If it can’t get those answers, then it can’t see all the code and assemblies that make up your project, and therefore it can’t give you help in the editor.</p>
<p>So, what to do? Well, obviously, if you need to know what’s going to happen in a build, why not just run it? And so you get design-time builds. Unbeknownst to most users, Visual Studio builds your projects a <em>lot</em> more than you think. Potentially every time you make a change to a project that will affect how the project is built, Visual Studio will fire off a design-time build in the background. Now, there are a few differences in how design-time builds work from regular builds. In particular:</p>
<ul>
<li>The design-time build doesn’t <em>actually</em> run the C# or VB compiler because it doesn’t need to produce the actual output (i.e. dll or exe). It just needs to know <em>how</em> the build would be run. So instead of, say, calling csc.exe, it will just tell MSBuild to let it know what it <em>would</em><em> have</em> asked csc.exe to compile without actually compiling it.</li>
<li>The design-time build runs a slightly different set of MSBuild targets from a regular compile. This allows skipping things that aren’t needed in a design-time build, plus it allows the project system to run some additional targets (if needed) to provide extra information that the project system might need for, say, the Solution Explorer.</li>
</ul>
<p>Design-time builds have two obvious issues. First, if they’re slow, it’s going to slow down Visual Studio but you won’t be able to tell where the problem is coming from. For example, a common place where slow design-time builds show up is switching between configurations. If you switch a large solution, say, from Debug to Release in Visual Studio, you might notice quite a long pause in which you can’t do anything in the UI. This is usually due to the configuration change kicking off a whole bunch of design-time builds to react to the fact that things in the project now might look different under the new configuration.</p>
<p>The other issue is if a design-time build fails. Since the compiler and the project system rely on design-time builds to accurately understand the contents of your solution, if design-time builds fail, things might start going wrong in the Visual Studio UI. The Solution Explorer might not show all of your files, or it might show them in the wrong place. Intellisense might not show you everything available, or it might show you nothing at all. You might get weird errors in the Error List. Often these kinds of problems can be traced back to a failing design-time build. The problem, as with performance issues, is that there’s no visible indication that that’s what the problem is.</p>
<p>So… Design-time builds are a necessary evil that can really mess things up if they go wrong. What can we do about it? Stay tuned…</p>
<p><i>You can also follow me on Twitter </i><a href="http://twitter.com/panopticoncntrl"><em>here</em></a><em>.</em></p>
</div><!-- .entry-content -->
<footer class="entry-meta">
This entry was posted in <a href="https://www.panopticoncentral.net/category/project-system/" rel="category tag">Project System</a> on <a href="https://www.panopticoncentral.net/2017/09/21/the-scourge-of-design-time-builds/" title="11:04 am" rel="bookmark"><time class="entry-date" datetime="2017-09-21T11:04:46-07:00">September 21, 2017</time></a><span class="by-author"> by <span class="author vcard"><a class="url fn n" href="https://www.panopticoncentral.net/author/paulvick/" title="View all posts by paulvick" rel="author">paulvick</a></span></span>. </footer><!-- .entry-meta -->
</article><!-- #post -->
<nav id="nav-below" class="navigation">
<h3 class="assistive-text">Post navigation</h3>
<div class="nav-previous"><a href="https://www.panopticoncentral.net/page/2/" ><span class="meta-nav">←</span> Older posts</a></div>
</nav><!-- .navigation -->
</div><!-- #content -->
</div><!-- #primary -->
<div id="secondary" class="widget-area" role="complementary">
<aside id="block-8" class="widget widget_block widget_search"><form role="search" method="get" action="https://www.panopticoncentral.net/" class="wp-block-search__button-outside wp-block-search__text-button wp-block-search" ><label class="wp-block-search__label" for="wp-block-search__input-1" >Search</label><div class="wp-block-search__inside-wrapper" ><input class="wp-block-search__input" id="wp-block-search__input-1" placeholder="" value="" type="search" name="s" required /><button aria-label="Search" class="wp-block-search__button wp-element-button" type="submit" >Search</button></div></form></aside><aside id="block-9" class="widget widget_block">
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<h2 class="wp-block-heading">Recent Posts</h2>
<ul class="wp-block-latest-posts__list wp-block-latest-posts"><li><a class="wp-block-latest-posts__post-title" href="https://www.panopticoncentral.net/2024/03/25/an-accidental-tourist-at-meta/">An Accidental Tourist at Meta</a></li>
<li><a class="wp-block-latest-posts__post-title" href="https://www.panopticoncentral.net/2019/07/12/msbuildallprojects-considered-harmful/">MSBuildAllProjects Considered Harmful</a></li>
<li><a class="wp-block-latest-posts__post-title" href="https://www.panopticoncentral.net/2019/01/28/small-project-system-tools-update/">Small Project System Tools Update</a></li>
<li><a class="wp-block-latest-posts__post-title" href="https://www.panopticoncentral.net/2018/08/15/another-way-to-talk-to-the-project-team/">Another Way to Talk to the Project Team</a></li>
<li><a class="wp-block-latest-posts__post-title" href="https://www.panopticoncentral.net/2018/05/14/view-evaluation-profiles-in-project-system-tools/">View Evaluation Profiles in Project System Tools</a></li>
</ul></div></div>
</aside><aside id="block-10" class="widget widget_block">
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<h2 class="wp-block-heading">Categories</h2>
<ul class="wp-block-categories-list wp-block-categories"> <li class="cat-item cat-item-2"><a href="https://www.panopticoncentral.net/category/access/">Access</a>
</li>
<li class="cat-item cat-item-3"><a href="https://www.panopticoncentral.net/category/access/access97/">Access97</a>
</li>
<li class="cat-item cat-item-4"><a href="https://www.panopticoncentral.net/category/blogging/">Blogging</a>
</li>
<li class="cat-item cat-item-32"><a href="https://www.panopticoncentral.net/category/javascript/hosting/">Hosting</a>
</li>
<li class="cat-item cat-item-7"><a href="https://www.panopticoncentral.net/category/javascript/">Javascript</a>
</li>
<li class="cat-item cat-item-8"><a href="https://www.panopticoncentral.net/category/language-design/">Language Design</a>
</li>
<li class="cat-item cat-item-33"><a href="https://www.panopticoncentral.net/category/oslo/m/">M</a>
</li>
<li class="cat-item cat-item-36"><a href="https://www.panopticoncentral.net/category/meta/">Meta</a>
</li>
<li class="cat-item cat-item-34"><a href="https://www.panopticoncentral.net/category/oslo/mgrammar/">MGrammar</a>
</li>
<li class="cat-item cat-item-9"><a href="https://www.panopticoncentral.net/category/microsoft/">Microsoft</a>
</li>
<li class="cat-item cat-item-10"><a href="https://www.panopticoncentral.net/category/oslo/">Oslo</a>
</li>
<li class="cat-item cat-item-11"><a href="https://www.panopticoncentral.net/category/conferences/pdc03/">PDC03</a>
</li>
<li class="cat-item cat-item-12"><a href="https://www.panopticoncentral.net/category/conferences/pdc05/">PDC05</a>
</li>
<li class="cat-item cat-item-13"><a href="https://www.panopticoncentral.net/category/conferences/pdc08/">PDC08</a>
</li>
<li class="cat-item cat-item-14"><a href="https://www.panopticoncentral.net/category/personal/">Personal</a>
</li>
<li class="cat-item cat-item-15"><a href="https://www.panopticoncentral.net/category/project-system/">Project System</a>
</li>
<li class="cat-item cat-item-16"><a href="https://www.panopticoncentral.net/category/project-system/project-system-tools/">Project System Tools</a>
</li>
<li class="cat-item cat-item-17"><a href="https://www.panopticoncentral.net/category/samples/">Samples</a>
</li>
<li class="cat-item cat-item-18"><a href="https://www.panopticoncentral.net/category/sql-server/">SQL Server</a>
</li>
<li class="cat-item cat-item-19"><a href="https://www.panopticoncentral.net/category/sql-server/tsql/">T-SQL</a>
</li>
<li class="cat-item cat-item-20"><a href="https://www.panopticoncentral.net/category/conferences/teched2004/">TechEd2004</a>
</li>
<li class="cat-item cat-item-21"><a href="https://www.panopticoncentral.net/category/conferences/teched2005/">TechEd2005</a>
</li>
<li class="cat-item cat-item-22"><a href="https://www.panopticoncentral.net/category/technology/">Technology</a>
</li>
<li class="cat-item cat-item-23"><a href="https://www.panopticoncentral.net/category/javascript/typescript/">TypeScript</a>
</li>
<li class="cat-item cat-item-24"><a href="https://www.panopticoncentral.net/category/visual-basic/">Visual Basic</a>
</li>
<li class="cat-item cat-item-25"><a href="https://www.panopticoncentral.net/category/visual-basic/visual-basic-2005/">Visual Basic 2005</a>
</li>
<li class="cat-item cat-item-26"><a href="https://www.panopticoncentral.net/category/visual-basic/visual-basic-2008/">Visual Basic 2008</a>
</li>
<li class="cat-item cat-item-27"><a href="https://www.panopticoncentral.net/category/visual-basic/visual-basic-2010/">Visual Basic 2010</a>
</li>
<li class="cat-item cat-item-28"><a href="https://www.panopticoncentral.net/category/visual-studio/">Visual Studio</a>
</li>
<li class="cat-item cat-item-29"><a href="https://www.panopticoncentral.net/category/visual-studio/visual-studio-15/">Visual Studio 15</a>
</li>
<li class="cat-item cat-item-30"><a href="https://www.panopticoncentral.net/category/windows/">Windows</a>
</li>
<li class="cat-item cat-item-31"><a href="https://www.panopticoncentral.net/category/writing/">Writing</a>
</li>
</ul></div></div>
</aside><aside id="block-11" class="widget widget_block">
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<h2 class="wp-block-heading">Archives</h2>
<ul class="wp-block-archives-list wp-block-archives"> <li><a href='https://www.panopticoncentral.net/2024/03/'>March 2024</a></li>
<li><a href='https://www.panopticoncentral.net/2019/07/'>July 2019</a></li>
<li><a href='https://www.panopticoncentral.net/2019/01/'>January 2019</a></li>
<li><a href='https://www.panopticoncentral.net/2018/08/'>August 2018</a></li>
<li><a href='https://www.panopticoncentral.net/2018/05/'>May 2018</a></li>
<li><a href='https://www.panopticoncentral.net/2018/04/'>April 2018</a></li>
<li><a href='https://www.panopticoncentral.net/2018/03/'>March 2018</a></li>
<li><a href='https://www.panopticoncentral.net/2017/12/'>December 2017</a></li>
<li><a href='https://www.panopticoncentral.net/2017/10/'>October 2017</a></li>
<li><a href='https://www.panopticoncentral.net/2017/09/'>September 2017</a></li>
<li><a href='https://www.panopticoncentral.net/2016/04/'>April 2016</a></li>
<li><a href='https://www.panopticoncentral.net/2016/01/'>January 2016</a></li>
<li><a href='https://www.panopticoncentral.net/2015/11/'>November 2015</a></li>
<li><a href='https://www.panopticoncentral.net/2015/09/'>September 2015</a></li>
<li><a href='https://www.panopticoncentral.net/2015/08/'>August 2015</a></li>
<li><a href='https://www.panopticoncentral.net/2014/07/'>July 2014</a></li>
<li><a href='https://www.panopticoncentral.net/2014/05/'>May 2014</a></li>
<li><a href='https://www.panopticoncentral.net/2014/03/'>March 2014</a></li>
<li><a href='https://www.panopticoncentral.net/2014/02/'>February 2014</a></li>
<li><a href='https://www.panopticoncentral.net/2014/01/'>January 2014</a></li>
<li><a href='https://www.panopticoncentral.net/2013/12/'>December 2013</a></li>
<li><a href='https://www.panopticoncentral.net/2013/11/'>November 2013</a></li>
<li><a href='https://www.panopticoncentral.net/2013/10/'>October 2013</a></li>
<li><a href='https://www.panopticoncentral.net/2013/09/'>September 2013</a></li>
<li><a href='https://www.panopticoncentral.net/2013/08/'>August 2013</a></li>
<li><a href='https://www.panopticoncentral.net/2013/07/'>July 2013</a></li>
<li><a href='https://www.panopticoncentral.net/2012/12/'>December 2012</a></li>
<li><a href='https://www.panopticoncentral.net/2012/10/'>October 2012</a></li>
<li><a href='https://www.panopticoncentral.net/2012/03/'>March 2012</a></li>
<li><a href='https://www.panopticoncentral.net/2012/02/'>February 2012</a></li>
<li><a href='https://www.panopticoncentral.net/2011/08/'>August 2011</a></li>
<li><a href='https://www.panopticoncentral.net/2011/05/'>May 2011</a></li>
<li><a href='https://www.panopticoncentral.net/2011/04/'>April 2011</a></li>
<li><a href='https://www.panopticoncentral.net/2011/03/'>March 2011</a></li>
<li><a href='https://www.panopticoncentral.net/2010/08/'>August 2010</a></li>
<li><a href='https://www.panopticoncentral.net/2010/07/'>July 2010</a></li>
<li><a href='https://www.panopticoncentral.net/2010/06/'>June 2010</a></li>
<li><a href='https://www.panopticoncentral.net/2010/05/'>May 2010</a></li>
<li><a href='https://www.panopticoncentral.net/2009/12/'>December 2009</a></li>
<li><a href='https://www.panopticoncentral.net/2009/11/'>November 2009</a></li>
<li><a href='https://www.panopticoncentral.net/2009/05/'>May 2009</a></li>
<li><a href='https://www.panopticoncentral.net/2009/03/'>March 2009</a></li>
<li><a href='https://www.panopticoncentral.net/2009/02/'>February 2009</a></li>
<li><a href='https://www.panopticoncentral.net/2009/01/'>January 2009</a></li>
<li><a href='https://www.panopticoncentral.net/2008/12/'>December 2008</a></li>
<li><a href='https://www.panopticoncentral.net/2008/10/'>October 2008</a></li>
<li><a href='https://www.panopticoncentral.net/2008/09/'>September 2008</a></li>
<li><a href='https://www.panopticoncentral.net/2008/08/'>August 2008</a></li>
<li><a href='https://www.panopticoncentral.net/2008/07/'>July 2008</a></li>
<li><a href='https://www.panopticoncentral.net/2008/06/'>June 2008</a></li>
<li><a href='https://www.panopticoncentral.net/2008/05/'>May 2008</a></li>
<li><a href='https://www.panopticoncentral.net/2008/04/'>April 2008</a></li>
<li><a href='https://www.panopticoncentral.net/2008/03/'>March 2008</a></li>
<li><a href='https://www.panopticoncentral.net/2008/02/'>February 2008</a></li>
<li><a href='https://www.panopticoncentral.net/2007/12/'>December 2007</a></li>
<li><a href='https://www.panopticoncentral.net/2007/11/'>November 2007</a></li>
<li><a href='https://www.panopticoncentral.net/2007/10/'>October 2007</a></li>
<li><a href='https://www.panopticoncentral.net/2007/09/'>September 2007</a></li>
<li><a href='https://www.panopticoncentral.net/2007/08/'>August 2007</a></li>
<li><a href='https://www.panopticoncentral.net/2007/07/'>July 2007</a></li>
<li><a href='https://www.panopticoncentral.net/2007/06/'>June 2007</a></li>
<li><a href='https://www.panopticoncentral.net/2007/05/'>May 2007</a></li>
<li><a href='https://www.panopticoncentral.net/2007/04/'>April 2007</a></li>
<li><a href='https://www.panopticoncentral.net/2007/03/'>March 2007</a></li>
<li><a href='https://www.panopticoncentral.net/2007/02/'>February 2007</a></li>
<li><a href='https://www.panopticoncentral.net/2007/01/'>January 2007</a></li>
<li><a href='https://www.panopticoncentral.net/2006/12/'>December 2006</a></li>
<li><a href='https://www.panopticoncentral.net/2006/11/'>November 2006</a></li>
<li><a href='https://www.panopticoncentral.net/2006/10/'>October 2006</a></li>
<li><a href='https://www.panopticoncentral.net/2006/09/'>September 2006</a></li>
<li><a href='https://www.panopticoncentral.net/2006/08/'>August 2006</a></li>
<li><a href='https://www.panopticoncentral.net/2006/07/'>July 2006</a></li>
<li><a href='https://www.panopticoncentral.net/2006/06/'>June 2006</a></li>
<li><a href='https://www.panopticoncentral.net/2006/05/'>May 2006</a></li>
<li><a href='https://www.panopticoncentral.net/2006/04/'>April 2006</a></li>
<li><a href='https://www.panopticoncentral.net/2006/03/'>March 2006</a></li>
<li><a href='https://www.panopticoncentral.net/2006/02/'>February 2006</a></li>
<li><a href='https://www.panopticoncentral.net/2006/01/'>January 2006</a></li>
<li><a href='https://www.panopticoncentral.net/2005/12/'>December 2005</a></li>
<li><a href='https://www.panopticoncentral.net/2005/11/'>November 2005</a></li>
<li><a href='https://www.panopticoncentral.net/2005/10/'>October 2005</a></li>
<li><a href='https://www.panopticoncentral.net/2005/09/'>September 2005</a></li>
<li><a href='https://www.panopticoncentral.net/2005/08/'>August 2005</a></li>
<li><a href='https://www.panopticoncentral.net/2005/07/'>July 2005</a></li>
<li><a href='https://www.panopticoncentral.net/2005/06/'>June 2005</a></li>
<li><a href='https://www.panopticoncentral.net/2005/05/'>May 2005</a></li>
<li><a href='https://www.panopticoncentral.net/2005/04/'>April 2005</a></li>
<li><a href='https://www.panopticoncentral.net/2005/03/'>March 2005</a></li>
<li><a href='https://www.panopticoncentral.net/2005/02/'>February 2005</a></li>
<li><a href='https://www.panopticoncentral.net/2005/01/'>January 2005</a></li>
<li><a href='https://www.panopticoncentral.net/2004/12/'>December 2004</a></li>
<li><a href='https://www.panopticoncentral.net/2004/11/'>November 2004</a></li>
<li><a href='https://www.panopticoncentral.net/2004/10/'>October 2004</a></li>
<li><a href='https://www.panopticoncentral.net/2004/09/'>September 2004</a></li>
<li><a href='https://www.panopticoncentral.net/2004/08/'>August 2004</a></li>
<li><a href='https://www.panopticoncentral.net/2004/07/'>July 2004</a></li>
<li><a href='https://www.panopticoncentral.net/2004/06/'>June 2004</a></li>
<li><a href='https://www.panopticoncentral.net/2004/05/'>May 2004</a></li>
<li><a href='https://www.panopticoncentral.net/2004/04/'>April 2004</a></li>
<li><a href='https://www.panopticoncentral.net/2004/03/'>March 2004</a></li>
<li><a href='https://www.panopticoncentral.net/2004/02/'>February 2004</a></li>
<li><a href='https://www.panopticoncentral.net/2004/01/'>January 2004</a></li>
<li><a href='https://www.panopticoncentral.net/2003/12/'>December 2003</a></li>
<li><a href='https://www.panopticoncentral.net/2003/11/'>November 2003</a></li>
<li><a href='https://www.panopticoncentral.net/2003/10/'>October 2003</a></li>
<li><a href='https://www.panopticoncentral.net/2003/09/'>September 2003</a></li>
<li><a href='https://www.panopticoncentral.net/2003/08/'>August 2003</a></li>
<li><a href='https://www.panopticoncentral.net/2003/07/'>July 2003</a></li>
</ul></div></div>
</aside> </div><!-- #secondary -->
</div><!-- #main .wrapper -->
<footer id="colophon" role="contentinfo">
<div class="site-info">
<a href="https://wordpress.org/" class="imprint" title="Semantic Personal Publishing Platform">
Proudly powered by WordPress </a>
</div><!-- .site-info -->
</footer><!-- #colophon -->
</div><!-- #page -->
<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/twentytwelve/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<script type="text/javascript" id="jetpack-stats-js-before">
/* <![CDATA[ */
_stq = window._stq || [];
_stq.push([ "view", {"v":"ext","blog":"216219031","post":"0","tz":"-7","srv":"www.panopticoncentral.net","arch_home":"1","j":"1:16.1.2"} ]);
_stq.push([ "clickTrackerInit", "216219031", "0" ]);
//# sourceURL=jetpack-stats-js-before
/* ]]> */
</script>
<script type="text/javascript" src="https://stats.wp.com/e-202634.js" id="jetpack-stats-js" defer="defer" data-wp-strategy="defer" fetchpriority="low"></script>
<script id="wp-emoji-settings" type="application/json">
{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://www.panopticoncentral.net/wp-includes/js/wp-emoji-release.min.js?ver=6.9"}}
</script>
<script type="module">
/* <![CDATA[ */
/*! This file is auto-generated */
const a=JSON.parse(document.getElementById("wp-emoji-settings").textContent),o=(window._wpemojiSettings=a,"wpEmojiSettingsSupports"),s=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const a=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===a[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,a){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!a(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,a){let r;const o=(r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),s=(o.textBaseline="top",o.font="600 32px Arial",{});return e.forEach(e=>{s[e]=t(o,e,n,a)}),s}function r(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}a.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),c.toString(),p.toString()].join(",")+"));",a=new Blob([e],{type:"text/javascript"});const r=new Worker(URL.createObjectURL(a),{name:"wpTestEmojiSupports"});return void(r.onmessage=e=>{i(n=e.data),r.terminate(),t(n)})}catch(e){}i(n=f(s,u,c,p))}t(n)}).then(e=>{for(const n in e)a.supports[n]=e[n],a.supports.everything=a.supports.everything&&a.supports[n],"flag"!==n&&(a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&a.supports[n]);var t;a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&!a.supports.flag,a.supports.everything||((t=a.source||{}).concatemoji?r(t.concatemoji):t.wpemoji&&t.twemoji&&(r(t.twemoji),r(t.wpemoji)))});
//# sourceURL=https://www.panopticoncentral.net/wp-includes/js/wp-emoji-loader.min.js
/* ]]> */
</script>
</body>
</html>
<!-- Dynamic page generated in 0.450 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2026-08-21 19:52:37 -->
<!-- super cache -->
Sitemap
Кол-во: 0
XML-карта сайта для поисковиков
?
Sitemap.xml помогает поисковику быстрее находить и индексировать страницы. Особенно важен для крупных сайтов и новых страниц, на которые ещё нет входящих ссылок.
Robots.txt не содержит ссылку на карту сайта. Рекомендуется добавить карту сайта и указать ссылку на нее в robots.txt.
Внутренние ссылки
Кол-во: 197
Ссылки на другие страницы своего сайта
?
Внутренние ссылки распределяют ссылочный вес между страницами и помогают поисковику обходить сайт. Пустые анкоры и ссылки на запрещённые robots.txt страницы — типичные ошибки.
Внутренних ссылок на странице 197 слишком много. Проведите оптимизацию сайта!
Внутренние ссылки не запрещены к индексации в robots.txt.
На странице присутствуют изображения 3.
Показать первые 100 внутренних ссылок
| Url | Анкор | Состояние | Анализировать |
|---|---|---|---|
| / |
Panopticon Central
|
|
Анализировать url |
| / |
Home
|
|
Анализировать url |
| /contact-me/ |
Contact me
|
|
Анализировать url |
| /2024/03/25/an-accidental-tourist-at-meta/ |
An Accidental Tourist at Meta
|
|
Анализировать url |
| /category/meta/ |
Meta
|
|
Анализировать url |
| /2024/03/25/an-accidental-tourist-at-meta/ |
<time class="entry-date" datetime="2024-03-25T09:36:53-07:00">March 25, 2024</time>
|
|
Анализировать url |
| /author/paulvick/ |
paulvick
|
|
Анализировать url |
| /2019/07/12/msbuildallprojects-considered-harmful/ |
MSBuildAllProjects Considered Harmful
|
|
Анализировать url |
| /category/project-system/ |
Project System
|
|
Анализировать url |
| /2019/07/12/msbuildallprojects-considered-harmful/ |
<time class="entry-date" datetime="2019-07-12T09:44:10-07:00">July 12, 2019</time>
|
|
Анализировать url |
| /author/paulvick/ |
paulvick
|
|
Анализировать url |
| /2019/01/28/small-project-system-tools-update/ |
Small Project System Tools Update
|
|
Анализировать url |
| /category/project-system/ |
Project System
|
|
Анализировать url |
| /category/project-system/project-system-tools/ |
Project System Tools
|
|
Анализировать url |
| /2019/01/28/small-project-system-tools-update/ |
<time class="entry-date" datetime="2019-01-28T13:21:54-08:00">January 28, 2019</time>
|
|
Анализировать url |
| /author/paulvick/ |
paulvick
|
|
Анализировать url |
| /2018/08/15/another-way-to-talk-to-the-project-team/ |
Another Way to Talk to the Project Team
|
|
Анализировать url |
| /category/project-system/ |
Project System
|
|
Анализировать url |
| /2018/08/15/another-way-to-talk-to-the-project-team/ |
<time class="entry-date" datetime="2018-08-15T15:45:10-07:00">August 15, 2018</time>
|
|
Анализировать url |
| /author/paulvick/ |
paulvick
|
|
Анализировать url |
| /2018/05/14/view-evaluation-profiles-in-project-system-tools/ |
View Evaluation Profiles in Project System Tools
|
|
Анализировать url |
| /category/project-system/ |
Project System
|
|
Анализировать url |
| /category/project-system/project-system-tools/ |
Project System Tools
|
|
Анализировать url |
| /2018/05/14/view-evaluation-profiles-in-project-system-tools/ |
<time class="entry-date" datetime="2018-05-14T09:00:33-07:00">May 14, 2018</time>
|
|
Анализировать url |
| /author/paulvick/ |
paulvick
|
|
Анализировать url |
| /2018/04/04/project-system-tools-now-with-binary-log-viewing/ |
Project System Tools: Now With Binary Log Viewing!
|
|
Анализировать url |
| /category/project-system/ |
Project System
|
|
Анализировать url |
| /category/project-system/project-system-tools/ |
Project System Tools
|
|
Анализировать url |
| /2018/04/04/project-system-tools-now-with-binary-log-viewing/ |
<time class="entry-date" datetime="2018-04-04T14:30:20-07:00">April 4, 2018</time>
|
|
Анализировать url |
| /author/paulvick/ |
paulvick
|
|
Анализировать url |
| /2018/03/06/dear-extension-authors-please-mind-the-resolved-state-of-the-references/ |
Dear Extension Authors: Please Mind the Resolved State of the References!
|
|
Анализировать url |
| /2017/09/21/the-scourge-of-design-time-builds/ |
here
|
|
Анализировать url |
| /category/project-system/ |
Project System
|
|
Анализировать url |
| /2018/03/06/dear-extension-authors-please-mind-the-resolved-state-of-the-references/ |
<time class="entry-date" datetime="2018-03-06T13:04:27-08:00">March 6, 2018</time>
|
|
Анализировать url |
| /author/paulvick/ |
paulvick
|
|
Анализировать url |
| /2017/12/01/project-evaluations-count-too/ |
Project Evaluations Count Too!
|
|
Анализировать url |
| /2017/09/21/the-scourge-of-design-time-builds/ |
design-time builds
|
|
Анализировать url |
| /category/project-system/ |
Project System
|
|
Анализировать url |
| /category/project-system/project-system-tools/ |
Project System Tools
|
|
Анализировать url |
| /2017/12/01/project-evaluations-count-too/ |
<time class="entry-date" datetime="2017-12-01T09:30:01-08:00">December 1, 2017</time>
|
|
Анализировать url |
| /author/paulvick/ |
paulvick
|
|
Анализировать url |
| /2017/10/19/getting-visibility-into-design-time-builds/ |
Getting Visibility into Design-Time Builds
|
|
Анализировать url |
| /2017/09/21/the-scourge-of-design-time-builds/ |
last blog post
|
|
Анализировать url |
| /category/project-system/ |
Project System
|
|
Анализировать url |
| /category/project-system/project-system-tools/ |
Project System Tools
|
|
Анализировать url |
| /2017/10/19/getting-visibility-into-design-time-builds/ |
<time class="entry-date" datetime="2017-10-19T10:24:41-07:00">October 19, 2017</time>
|
|
Анализировать url |
| /author/paulvick/ |
paulvick
|
|
Анализировать url |
| /2017/09/21/the-scourge-of-design-time-builds/ |
The Scourge of Design-Time Builds
|
|
Анализировать url |
| /category/project-system/ |
Project System
|
|
Анализировать url |
| /2017/09/21/the-scourge-of-design-time-builds/ |
<time class="entry-date" datetime="2017-09-21T11:04:46-07:00">September 21, 2017</time>
|
|
Анализировать url |
| /author/paulvick/ |
paulvick
|
|
Анализировать url |
| /page/2/ |
<span class="meta-nav">←</span> Older posts
|
|
Анализировать url |
| /2024/03/25/an-accidental-tourist-at-meta/ |
An Accidental Tourist at Meta
|
|
Анализировать url |
| /2019/07/12/msbuildallprojects-considered-harmful/ |
MSBuildAllProjects Considered Harmful
|
|
Анализировать url |
| /2019/01/28/small-project-system-tools-update/ |
Small Project System Tools Update
|
|
Анализировать url |
| /2018/08/15/another-way-to-talk-to-the-project-team/ |
Another Way to Talk to the Project Team
|
|
Анализировать url |
| /2018/05/14/view-evaluation-profiles-in-project-system-tools/ |
View Evaluation Profiles in Project System Tools
|
|
Анализировать url |
| /category/access/ |
Access
|
|
Анализировать url |
| /category/access/access97/ |
Access97
|
|
Анализировать url |
| /category/blogging/ |
Blogging
|
|
Анализировать url |
| /category/javascript/hosting/ |
Hosting
|
|
Анализировать url |
| /category/javascript/ |
Javascript
|
|
Анализировать url |
| /category/language-design/ |
Language Design
|
|
Анализировать url |
| /category/oslo/m/ |
M
|
|
Анализировать url |
| /category/meta/ |
Meta
|
|
Анализировать url |
| /category/oslo/mgrammar/ |
MGrammar
|
|
Анализировать url |
| /category/microsoft/ |
Microsoft
|
|
Анализировать url |
| /category/oslo/ |
Oslo
|
|
Анализировать url |
| /category/conferences/pdc03/ |
PDC03
|
|
Анализировать url |
| /category/conferences/pdc05/ |
PDC05
|
|
Анализировать url |
| /category/conferences/pdc08/ |
PDC08
|
|
Анализировать url |
| /category/personal/ |
Personal
|
|
Анализировать url |
| /category/project-system/ |
Project System
|
|
Анализировать url |
| /category/project-system/project-system-tools/ |
Project System Tools
|
|
Анализировать url |
| /category/samples/ |
Samples
|
|
Анализировать url |
| /category/sql-server/ |
SQL Server
|
|
Анализировать url |
| /category/sql-server/tsql/ |
T-SQL
|
|
Анализировать url |
| /category/conferences/teched2004/ |
TechEd2004
|
|
Анализировать url |
| /category/conferences/teched2005/ |
TechEd2005
|
|
Анализировать url |
| /category/technology/ |
Technology
|
|
Анализировать url |
| /category/javascript/typescript/ |
TypeScript
|
|
Анализировать url |
| /category/visual-basic/ |
Visual Basic
|
|
Анализировать url |
| /category/visual-basic/visual-basic-2005/ |
Visual Basic 2005
|
|
Анализировать url |
| /category/visual-basic/visual-basic-2008/ |
Visual Basic 2008
|
|
Анализировать url |
| /category/visual-basic/visual-basic-2010/ |
Visual Basic 2010
|
|
Анализировать url |
| /category/visual-studio/ |
Visual Studio
|
|
Анализировать url |
| /category/visual-studio/visual-studio-15/ |
Visual Studio 15
|
|
Анализировать url |
| /category/windows/ |
Windows
|
|
Анализировать url |
| /category/writing/ |
Writing
|
|
Анализировать url |
| /2024/03/ |
March 2024
|
|
Анализировать url |
| /2019/07/ |
July 2019
|
|
Анализировать url |
| /2019/01/ |
January 2019
|
|
Анализировать url |
| /2018/08/ |
August 2018
|
|
Анализировать url |
| /2018/05/ |
May 2018
|
|
Анализировать url |
| /2018/04/ |
April 2018
|
|
Анализировать url |
| /2018/03/ |
March 2018
|
|
Анализировать url |
| /2017/12/ |
December 2017
|
|
Анализировать url |
| /2017/10/ |
October 2017
|
|
Анализировать url |
| /2017/09/ |
September 2017
|
|
Анализировать url |
| /2016/04/ |
April 2016
|
|
Анализировать url |
Внешние ссылки
Кол-во: 30
Ссылки на сторонние сайты
?
Исходящие внешние ссылки передают часть ссылочного веса на чужие сайты. Ссылки на авторитетные ресурсы безопасны; ссылки на мусорные сайты могут навредить репутации страницы.
Внешних ссылок на странице 30 слишком много. Спрячьте лишние ссылки в тег noindex или атрибут rel='nofollow'!
Показать внешние ссылки
| Url | Анкор | Анализировать |
|---|---|---|
| businessinsider.com |
family of foxes
|
Анализировать url |
| blogs.msdn.microsoft.com |
For a long time now
|
Анализировать url |
| github.com |
starting in 16.0
|
Анализировать url |
| github.com |
already doing this
|
Анализировать url |
| marketplace.visualstudio.com |
Project System Tools
|
Анализировать url |
| twitter.com |
<em>here</em>
|
|
| twitter.com |
me
|
|
| twitter.com |
David Kean
|
|
| gitter.im |
Gitter channel
|
Анализировать url |
| github.com |
dotnet/project-system repo
|
Анализировать url |
| marketplace.visualstudio.com |
Project System Tools
|
Анализировать url |
| github.com |
evaluation profiles
|
Анализировать url |
| twitter.com |
<em>here</em>
|
|
| marketplace.visualstudio.com |
Project System Tools
|
Анализировать url |
| msbuildlog.com |
MSBuild Log Viewer
|
Анализировать url |
| twitter.com |
<em>here</em>
|
|
| docs.microsoft.com |
Reference
|
Анализировать url |
| docs.microsoft.com |
Reference3
|
Анализировать url |
| twitter.com |
<em>here</em>
|
|
| marketplace.visualstudio.com |
Project System Tools extension
|
Анализировать url |
| github.com |
branch of MSBuild
|
Анализировать url |
| twitter.com |
<em>here</em>
|
|
| marketplace.visualstudio.com |
Project System Tools
|
Анализировать url |
| github.com |
MSBuild binary log format
|
Анализировать url |
| msbuildlog.com |
MSBuild Log Viewer
|
Анализировать url |
| github.com |
https://github.com/dotnet/project-system-tools
|
Анализировать url |
| twitter.com |
<em>here</em>
|
|
| github.com |
Visual Studio project system
|
Анализировать url |
| twitter.com |
<em>here</em>
|
|
| wordpress.org |
Proudly powered by WordPress
|
Анализировать url |
Конкуренты Готовность: 0%
Конкуренты в Яндексе
Кол-во: 0
Топ сайтов-конкурентов в Яндексе
?
Сайты, чаще всего появляющиеся в ТОПе Яндекса по запросам из семантического ядра этой страницы.
Мы не нашли у вас конкурентов в Яндексе. Сайт или очень молодой или плохо продвигается.
Конкурентов в ТОП-10 Яндекса не нашлось.
Конкуренты в Google
Кол-во: 0
Топ сайтов-конкурентов в Google
?
Сайты, чаще всего появляющиеся в ТОПе Google по запросам из семантического ядра этой страницы.
Конкуренты в Google тоже не найдены. Займитесь продвижением сайта!
Конкурентов в ТОП-10 Google не нашлось.
ЗоЗПП: права потребителей Готовность: 100%
Нарушения
Не выявлены
Признаков дистанционной продажи товаров (интернет-магазина) не обнаружено — требования ЗоЗПП о раскрытии информации продавца к сайту не применяются. Нарушений нет.
ФЗ-149: рекомендательные технологии Готовность: 100%
Нарушения
Не выявлены
Рекомендательные блоки («с этим покупают», «похожие товары» и т.п.) на сайте не обнаружены — требования ст. 10.7 ФЗ-149 к сайту не применяются. Нарушений нет.
ФЗ-38: реклама Готовность: 100%
Нарушения
Не выявлены
Рекламных тематик с обязательными оговорками (медицина, БАД, кредиты и займы, новостройки) на сайте не обнаружено. Нарушений нет.
ФЗ-436: защита детей Готовность: 100%
Нарушения
Не выявлены
Признаков информационной продукции (новости, видео, книги, игры, курсы) не обнаружено — обязательная возрастная маркировка по ФЗ-436 сайту не требуется. Нарушений нет.
Вердикт
Сайт panopticoncentral.net не совсем готов к продвижению (процент готовности лишь 45%). Для попадания в ТОПы поисковых систем нужно:
Постарайтесь исправить общие ошибки.
Исправьте ошибки в мета-тегах.
Исправьте ошибки индексации.
Поделитесь с друзьями: